Autonomous navigation, sensor integration, and hardware control stack for the SIAR 6WD skid-steering mobile robot. This architecture was designed and developed during a 6-month robotics engineering internship at IDMind (Lisbon) as part of the Polytech Lyon curriculum.
This repository contains the complete ROS 2 (Humble) migration and feature integration for the SIAR robot. The architecture handles robust outdoor autonomous navigation, ensuring strict hardware safety, high-precision localization, and multi-sensor perception.
- Robot IP Address:
192.168.2.158(Ethernet). - Camera Array (Astra): The robot features 6 depth cameras. Orientation is based on facing the front of the robot (the front-right camera corresponds to the user's right).
- Front Left:
SN 17122430714| Front Mid:SN 17122831255| Front Right:SN 17030710023. - Back Left:
SN 17122830006| Back Mid:SN 17122830911| Back Right:SN 17122430299.
- Front Left:
The workspace is divided into the following ROS 2 packages:
astra_multicamera: Launch files and configurations for synchronizing the 6-camera array.foxglove-sdk: Integration SDK for real-time telemetry and visualization via Foxglove Studio.idmind_motors: ROS 2 drivers for the Motors Board.idmind_msgs: Custom ROS 2 messages and services definitions.idmind_navigation: ROS 2 control nodes for for navigation and odometry.idmind_sensors: ROS 2 drivers for the internal Sensors Board.idmind_serial2: Auxiliary package for serial communication with embedded devices.idmind_siar: Main bringup package containing system-wide launch files.idmind_teleop: ROS 2 package for the F710 controller, handling manual override viatwist_mux.ros2_astra_camera: Base ROS 2 hardware drivers for the Orbbec Astra cameras.siar_description: URDF, Xacro files, and 3D meshes for the robot's TF tree and Gazebo simulation.siar_imu: ROS 2 drivers for the SIAR IMU.siar_perception: Pointcloud and vision processing nodes for obstacle detection.unicore-um982-ros2-driver: Custom C++ parser and serial driver for the RTK GNSS module.ydlidar_ros2: 2D LiDAR drivers.
By default, the robot launches its software stack at boot using a systemd service. To perform manual launches or development, you must first stop and disable the service:
sudo systemctl stop siar_robot.service
sudo systemctl disable siar_robot.servicesource ~/ros2_ws/install/setup.bash
ros2 launch foxglove_bridge foxglove_bridge_launch.xml port:=8765
ros2 launch idmind_siar siar.launch.py
ros2 launch ydlidar ydlidar_launch.py
ros2 launch astra_multicamera siar_cameras.launch.pyexport GAZEBO_MODEL_PATH=/home/siar/ros2_ws/src/idmind_navigation/models
gazebo --verbose ~/ros2_ws/src/idmind_navigation/maps/corridor.world -s libgazebo_ros_init.so -s libgazebo_ros_factory.so
ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(cat ~/ros2_ws/src/siar_description/urdf/siar.urdf)" -p use_sim_time:=true
ros2 run gazebo_ros spawn_entity.py -entity siar -file ~/ros2_ws/src/siar_description/urdf/siar.urdf -x 0.0 -y 0.0 -z 0.1
ros2 launch idmind_navigation nav2_bringup.launch.py use_sim_time:=trueDue to computing constraints, outdoor mapping is performed by recording a rosbag and running SLAM offline.
1. Record data outdoors:
ros2 bag record -o scan_exterieur /scan /imu/data /tf /tf_static2. Playback and generate map (Offline):
ros2 launch foxglove_bridge foxglove_bridge_launch.xml port:=8765
ros2 launch idmind_siar siar_cartographer.launch.py use_sim_time:=true
ros2 bag play scan_exterieur --clock --topics /scan /imu/data /tf_static3. Save the map:
ros2 run nav2_map_server map_saver_cli -f ma_carte_finale