Skip to content
mrRobot62Public

About

ROS2 Rover project. ROS2 based rove raspberry pi platform working with 8 Dynamical AX12+ Servo motors connected via esp32 MCU.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

Β 

History

37 Commits

Folders and files

Repository files navigation

ROS2 ROVER Project

Dies ist das erste ROS2-Robotik Projekt das wir durchfΓΌhren. Daher sind sicherlich einige Implementierungen die durchgefΓΌhrt werden nicht ROS2 optimiert, stellen aber eine funktionierende Grundlage fΓΌr weitere Arbeiten zur VerfΓΌgung

Robot-Rover Projekt basierend auf ROS2 auf einem Raspberry PI4 oder PI5. Akuell arbeiten wir getrennt mit zwei Rover die beide zwar auf ROS2 basieren aber doch unterschiedlich konfiguriert sind

Historie

Version Datum Inhalt
0.2 2025-07-31 EinfΓΌhrung LiveCycleNodes, I2C_Node fΓΌr gekapselten I2C-Zugriff, Trennung Config files pro Node
0.1 2025-06-22 initialer upload, Rover fΓ€hrt grundlegene ROS2 Struktur funktioniert, ESP32 FW ok, Gamepad F710 ok, LIDAR ok

ROS2-HUMBLE

Hardware: Raspberry PI4, 4GB RAM, SD-Card

  • OS: Ubuntu 22.04
  • ROS2: Humble
  • LIDAR: YDLidar TMini Pro
  • Antrieb: 8x Dynamixel AX12+ Servos, 4 fΓΌr Antrieb, 4 fΓΌr Lenkung (Allradlenkung) Steuerung:** Gampad Logitech F710
  • Autonom: in Arbeit
  • Kamera: in Arbeit

ROS2-JAZZY

  • Hardware: Raspberry PI5, 8GB RAM, SSD
  • OS: Ubuntu 24.04
  • ROS2: Jazzy
  • LIDAR: YDLidar TMini Pro
  • Antrieb: 8x Dynamixel AX12+ Servos, 4 fΓΌr Antrieb, 4 fΓΌr Lenkung (Allradlenkung)
  • Steuerung: Gampad Logitech F710
  • Autonom: in Arbeit
  • Kamera: in Arbeit

Ziel des Projektes

Ziel des Projektes ist ein autonomer Rover Roboter zu bauen, basierend auf ROS2 und diverser Sensoren.

  • Komplexere Ansteuerung der Antriebskette durch einen Allradantrieb und Allradlenkung
  • ROS2 lernen und verstehen
  • Auslagerung von FunktionalitΓ€t auf einen ESP32 inkl. der Erstellung der Firmware und Kommunikation mit dem PI (Host)
  • Visualisierung des Rovers ΓΌber RVIZ
  • LIDAR-Sensor fΓΌr die Hindernis-Erkennung
  • Kamera fΓΌr Objekterkennung, Hindernis-Vermeidung
  • Navigation-Planning
  • SLAM
  • Odometrie
  • ...

Aktuelle Herausforderungen & Schwierigkeiten

  • ROS2 param.yaml File wird nicht richtig an die Nodes ΓΌbergeben und somit kΓΆnnen Parameter von Nodes nicht ausgelesen werden
  • Bei Erststart, starten direkt die AntriebsrΓ€der :-O. Fehlerursache muss in der Firmware liegen oder im driver_controller_node.py der einen unsinnigen Befehl weiterleitet
  • Genereller Umgang mit Fehlern nicht oder nur ungenΓΌgend implementiert. Robustheit gegen Fehler noch nicht verfΓΌgbar
  • Konfiguration der Antriebseinheiten aktuell in der ESP32-Firmware fest hinterlegt, das hat den Nachteil, das wir grundsΓ€tzlich zwischen Rover 1 und Rover 2 zwei unterschiedliche FW kompilieren mΓΌssen. Idee: Konfiguration auslagern und die Grundkonfiguration z.B. einem ESP32 SPIFF File ablegen.

Die ROVER Fahrzeuge

Bildmaterial

Antrieb und Lenkung

Der Rover hat eine Allrad-Lenkung und wird von vier Antriebseinheiten gesteuert. Jede Antriebseinheit besteht aus zwei Dynamixel-AX12+ Servos. Ein Servo fΓΌr den Radantribe (Velocity), ein Servo fΓΌr die Lenkung des Rades (Steering). Angesteuert werden alle Servos ΓΌber ein Dynamixel-BUS-Protokol (1.0 nicht 2.0!). Die dazugehΓΆrige Firmware wurde in einen ESP32 implementiert und bietet eine I2C Schnittstelle fΓΌr die Kommunikation mit des Raspberry PI. Zur Ansteuerung von Dynamixel-Servos bedarf es einer kleinen Elektronik die exaktes Timing und Flanken fΓΌr das BUS-Protokoll bereitstellt und basiert auf eine SN74LS241 und einem LevelShifter von 3.3v auf 5v.Details siehe ESP32-Schaltplan bzw. unter doc/esp32 die dazugehΓΆrigen Dokumentationen

Start des Rovers

  • login per SSH auf den PI des Rovers
  • Wechsel in den Folder ros2_ws
  • ROS2-Environment aktivieren : source install/setup.bash
  • ROVER starten (ohne RVIZ): ros2 launch rover rover_full.launch.py params-file:=install/rover/share/rover/config/rover.yaml lidar_model:=ydlidar use_rviz:=false
  • ROVER starten (mit RVIZ): ros2 launch rover rover_full.launch.py params-file:=install/rover/share/rover/config/rover.yaml lidar_model:=ydlidar use_rviz:=true

Aktuelle Folderstruktur (Stand 2025-06-22)

.
β”œβ”€β”€ README.md
β”œβ”€β”€ config
β”‚Β Β  β”œβ”€β”€ rover.yaml
β”‚Β Β  β”œβ”€β”€ rover.yaml.old
β”‚Β Β  β”œβ”€β”€ rviz
β”‚Β Β  β”‚Β Β  └── rover.rviz
β”‚Β Β  └── urdf
β”œβ”€β”€ doc
β”‚Β Β  β”œβ”€β”€ class_diagram.md
β”‚Β Β  β”œβ”€β”€ esp32
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ firmware_overview.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ i2c_protokoll_v1.md
β”‚Β Β  β”‚Β Β  └── i2c_protokoll_v2.md
β”‚Β Β  β”œβ”€β”€ images
β”‚Β Β  β”œβ”€β”€ komponenten_diagram.md
β”‚Β Β  β”œβ”€β”€ odometrie_allgemein.md
β”‚Β Β  β”œβ”€β”€ ros2_docs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ros2_commands.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ros2_commands.pdf
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ros2_launch_example.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ros2_launch_example.pdf
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ros2_micro_ros_details.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ros2_micro_ros_details.pdf
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ros2_micro_ros_esp32.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ros2_micro_ros_esp32.pdf
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ros2_slam_tool.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ros2_themen_welt.md
β”‚Β Β  β”‚Β Β  └── ros2_themen_welt.pdf
β”‚Β Β  β”œβ”€β”€ ros2_launch_nachschlagewerk.md
β”‚Β Β  β”œβ”€β”€ ros2_launch_styleguide.md
β”‚Β Β  β”œβ”€β”€ rover_architektur.md
β”‚Β Β  β”œβ”€β”€ rover_architektur_.md
β”‚Β Β  β”œβ”€β”€ rover_architektur_tmp.html
β”‚Β Β  β”œβ”€β”€ rover_full.launch.md
β”‚Β Β  └── rover_module_doc.md
β”œβ”€β”€ launch
β”‚Β Β  β”œβ”€β”€ rover.launch.py
β”‚Β Β  β”œβ”€β”€ rover_full.launch copy.py
β”‚Β Β  β”œβ”€β”€ rover_full.launch.py
β”‚Β Β  β”œβ”€β”€ rover_full.launch_20250501.py
β”‚Β Β  β”œβ”€β”€ rover_param.launch.py
β”‚Β Β  └── rover_param2.launch.py
β”œβ”€β”€ package.xml
β”œβ”€β”€ resource
β”‚Β Β  └── rover
β”œβ”€β”€ scripts
β”‚Β Β  β”œβ”€β”€ lifecycle_dashboard.py
β”‚Β Β  └── lifecycle_status_marker.py
β”œβ”€β”€ setup.cfg
β”œβ”€β”€ setup.py
β”œβ”€β”€ src
β”‚Β Β  β”œβ”€β”€ esp32
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ esp32_rover
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ deprecated
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __main_jsonData.cpp__20250419
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __old_rover.h__
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __old_rover_utils.h__
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __test__main.cpp__
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── _main_20250302_wifiversion.cpp_
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ doc
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Document 6.md.md
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Rover_ESP32_Firmware_Doku.md
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Rover_ESP32_Firmware_rover_utils.md
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ readme_esp32.md
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ readme_esp32.md.sb-8cb1a911-kIORDL
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── readme_ros2_loops.md
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ esp32_rover.code-workspace
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ include
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ DynamicArray.h
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ i2c_helper.h
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ led_info.h
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ rover.h
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── rover_utils.h
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ lib
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── README
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ platformio.ini
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── main.cpp
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── test
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── README
β”‚Β Β  β”‚Β Β  └── esp32_rover.zip
β”‚Β Β  └── rover
β”‚Β Β      β”œβ”€β”€ __depr_drive_controller_node.py__
β”‚Β Β      β”œβ”€β”€ __init__.py
β”‚Β Β      β”œβ”€β”€ __pycache__
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ __init__.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ drive_controller_node.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ driver_controller_node.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ led_node.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ manual_control_node.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ navigation_node.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ odom_node.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ sensor_node.cpython-312.pyc
β”‚Β Β      β”‚Β Β  └── vision_node.cpython-312.pyc
β”‚Β Β      β”œβ”€β”€ control
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ __pycache__
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __init__.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── led_pattern.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ kinematics_model.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ led_pattern.py
β”‚Β Β      β”‚Β Β  └── ws2812.py
β”‚Β Β      β”œβ”€β”€ driver_controller_node.py
β”‚Β Β      β”œβ”€β”€ hardware
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ __pycache__
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __init__.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ i2c_driver.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ lidar_driver.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ rover_driver.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ servo_driver.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ steering_driver.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ velocity_driver.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ xv11_neato.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── ydlidar_tminiplus.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ i2c_driver.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ lidar_driver.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ rover_driver.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ xv11_neato.py
β”‚Β Β      β”‚Β Β  └── ydlidar_tminiplus.py
β”‚Β Β      β”œβ”€β”€ led_node.py
β”‚Β Β      β”œβ”€β”€ navigation_node.py
β”‚Β Β      β”œβ”€β”€ odom_node.py
β”‚Β Β      β”œβ”€β”€ perception
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ image_processor.py
β”‚Β Β      β”‚Β Β  └── obstacle_detector.py
β”‚Β Β      β”œβ”€β”€ rover_config.py
β”‚Β Β      β”œβ”€β”€ sensor_node.py
β”‚Β Β      β”œβ”€β”€ sensors
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ __pycache__
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __init__.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ battery_sensor.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ lidar_sensor.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── sensor_interface.cpython-312.pyc
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ battery_sensor.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ camera_sensor.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ lidar_sensor.py
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ sensor_interface.py
β”‚Β Β      β”‚Β Β  └── ultrasound_sensor.py
β”‚Β Β      └── vision_node.py
β”œβ”€β”€ src_rover.code-workspace
└── test
    β”œβ”€β”€ i2c_binary_test.py
    β”œβ”€β”€ i2c_check_pi5.py
    β”œβ”€β”€ i2c_json_test.py
    β”œβ”€β”€ i2c_simple_test.py
    β”œβ”€β”€ test_copyright.py
    β”œβ”€β”€ test_flake8.py
    └── test_pep257.py

About

ROS2 Rover project. ROS2 based rove raspberry pi platform working with 8 Dynamical AX12+ Servo motors connected via esp32 MCU.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages