A comprehensive ROS 2 workspace for simulating, controlling, and navigating a MiR 100 mobile robot in Gazebo Harmonic. This repository includes complete packages for differential drive control, SLAM, Nav2 integration, and a custom orchestrator for pick-and-place missions. It features an interactive RViz GUI for dispatching missions and selecting pick/place poses directly from the map.
Note: The foundational URDF model for the MiR 100 used in this project was sourced and adapted from the URDF dataset GitHub repository.
- OS: Ubuntu 24.04 (Noble)
- ROS 2 Version: Jazzy Jalisco
- Simulation: Gazebo Harmonic
Install the required ROS 2 packages before building the workspace:
sudo apt update
sudo apt install -y ros-jazzy-ros2-control ros-jazzy-ros2-controllers \
ros-jazzy-gz-ros2-control ros-jazzy-ros-gz-sim \
ros-jazzy-ros-gz-bridge ros-jazzy-ros-gz-interfaces \
ros-jazzy-navigation2 ros-jazzy-nav2-bringup \
ros-jazzy-slam-toolbox ros-jazzy-robot-state-publisher \
ros-jazzy-xacro ros-jazzy-rviz2The workspace is divided into modular packages:
mir_description: Xacro/URDF robot modeling, including definitions for differential drive chassis, Sick LiDAR, Realsense D435 RGB-D camera, and IMU.mir_control: Controllers configuration and launch files forros2_controland diff-drive kinematics.mir_gazebo: Simulation environments, including a custom maze world designed for Gazebo Harmonic.mir_navigation: Navigation stack configurations, including Nav2 parameter files, SLAM Toolbox launch files, behavior trees, custom map files, and RViz2 profiles.pick_place_interfaces: Custom ROS 2 action (PickPlaceMission) and service (SpawnObject,ExecuteMission) definitions used by the orchestrator.pick_place_orchestrator: Python-based nodes including an Object Manager for Gazebo entity manipulation and an Orchestrator state machine that interfaces with Nav2 for autonomous task sequencing.
Clone the repository into your workspace's src directory, then build using colcon:
# Navigate to the root of your workspace
cd ~/projects/Mobile_Robot
# Build the packages
colcon build --symlink-install
# Source the overlay
source install/setup.bashThe project provides several launch files, ranging from standalone component tests to full end-to-end simulations.
-
pick_place_sim.launch.py: The primary full-system simulation. Launches the Gazebo maze, Nav2 stack with a static map, robot description, controllers, and the pick-and-place orchestrator nodes for an end-to-end mission.
ros2 launch pick_place_orchestrator pick_place_sim.launch.py headless:=false use_rviz:=true
-
pick_place.launch.py: Starts the standalone pick-and-place nodes (Object Manager and Orchestrator) without launching Gazebo or the navigation stack.ros2 launch pick_place_orchestrator pick_place.launch.py
-
navigation_sim.launch.py: Launches the Gazebo simulation and Nav2 stack with AMCL and a static map for autonomous navigation testing, without the orchestrator.
ros2 launch mir_navigation navigation_sim.launch.py
-
slam.launch.py: Launches the Gazebo simulation withslam_toolboxin asynchronous mode, allowing the robot to map the maze environment dynamically.ros2 launch mir_navigation slam.launch.py
-
navigation.launch.py: Launches the core Nav2 stack nodes (AMCL, Planner, Controller, Recoveries) using predefined parameters. Usually called by other wrapper launch files.ros2 launch mir_navigation navigation.launch.py
-
rviz.launch.py: Standalone launch file for RViz configured with thenavigation.rvizdisplay settings.ros2 launch mir_navigation rviz.launch.py
spawn_maze.launch.py: Launches the Gazebo Harmonic maze world, spawns the MiR robot model, and starts the ROS-Gazebo bridge for topics and TF.ros2 launch mir_gazebo spawn_maze.launch.py
mir_control.launch.py: Loads and starts thediff_drive_controllerandjoint_state_broadcasterviaros2_control.ros2 launch mir_control mir_control.launch.py
display.launch.py: Launches RViz with ajoint_state_publisher_guito visualize the MiR robot's URDF/Xacro standalone.ros2 launch mir_description display.launch.py
This project is licensed under the MIT License.