At ERIC Robotics, we’re big believers in building software with modularity. The nav2 stack reflects this perfectly with flexible, plugin-based framework, allowing you to pick and choose which pieces you need and run them independently. In this assignment, you’ll walk through the navigation workflow step by step—manually creating and calling actions—to bring an autonomous robot to life.
Here’s what to do:
- We have shared some starter code for the 'Testbed-T1.0.0', a simple open-source robot developed by the team here at ERIC Robotics. Your task is to develop a new ROS2 package called
testbed_navigation
to manage the navigation workflow for this robot. - However, rather than simply calling
nav2_bringup
, in this assignment you will manually build the required action components (i.e., using themap_server
,amcl
,planner
plugins, andbt_
plugins) to run ros2 navigation, by working directly with the respectivenav2
plugins. - i.e., In the
testbed_navigation
package, write individual launch files to load a map, perform localization, and navigate using the plugins provided bynav2
. - Document your process so we can see how you tackled the task.
This assignment gives you hands-on experience with ROS2’s navigation plugins, while showcasing your ability to design modular and effective robotics solutions.
- Four days (96 hrs) from the moment you accept the assignment.
- To submit your code, simply commit and push to your GitHub repository online. You can commit any number of times before your deadline.
ros_nav2_assignment/
├── testbed_description/
│ ├── launch/ # Launch the full base simulation
│ ├── meshes/
│ ├── rviz/ # RVIZ configuration files
│ └── urdf/ # URDF files for Testbed-T1.0.0
├── testbed_gazebo/
│ ├── worlds/ # Simulation world files
│ ├── launch/ # Launch files for Gazebo
│ └── models/ # Misc. Gazebo model files
├── testbed_bringup/
│ ├── launch/ # Launch file for bringing up the robot
│ └── maps/ # Predefined map of the test environment
├── help.md # Guidelines and FAQs
└── README.md # Instructions for the assignment
Your goals are to:
- Learn how to configure and use ROS2
nav2
plugins in independent files. - Set up manual map loading and localization for the given simulation environment.
- Implement the required navigation plugins to handle robot navigation in the
testbed_navigation
package. Only basic navigational functionality is expected in this assignment, so choose your plugins accordingly.
To get started, you’ll need:
- ROS2 Humble installed. (Install from Humble Installation) (You will need Ubuntu 22.04/Windows 10 for this. More in the help section.)
- Gazebo simulator (version 11.10.2 is compatible with ROS2 Humble) (Install from Gazebo Installation) and Rviz simulator.
- Basic to intermediate knowledge of ROS2 navigation concepts.
- Familiarity with creating and managing ROS2 packages, actions, and parameter files.
- The reference documentation for the
nav2
stack is going to be your best friend for this assignment: Nav2 Documentation.
- Create your workspace:
mkdir -p ~/assignment_ws/src
- Clone this repository:
cd ~/assignment_ws/src git clone <repository-url>
- Build the workspace:
cd ~/assignment_ws/ colcon build source install/setup.bash
- Start the full simulation using:
This brings up the testbed environment in Gazebo and Rviz.
ros2 launch testbed_bringup testbed_full_bringup.launch.py
- In your workspace, create a new package:
ros2 pkg create testbed_navigation --build-type ament_cmake
- Set up the necessary directories for parameters, launch files, and scripts.
- Write proper build commands in CMakeLists.txt for your navigation package.
- Use the map provided in
testbed_bringup/maps/testbed_world.yaml
. - Write actions in the launch file
testbed_navigation/launch/map_loader.launch.py
to load the map using themap_server
plugin. - Test and confirm that the map is loaded correctly in Rviz.
- Implement localization with the AMCL plugin:
- Write a parameter file for AMCL in
testbed_navigation/config/amcl_params.yaml
. - Create actions in the launch file
testbed_navigation/launch/localization.launch.py
to run AMCL. - Verify that the robot can localize itself in the simulated environment using Rviz.
- Write a parameter file for AMCL in
- Set up navigation using
nav2
plugins:- Configure parameter files for the global and local planners, behaviour tree plugins and any other nav2 plugin you want to use, like 'collision_monitor' or 'velocity_smoother', in
testbed_navigation/config/nav2_params.yaml
. - Write actions in the launch file
testbed_navigation/launch/navigation.launch.py
to bring up the navigation workflow.
- Configure parameter files for the global and local planners, behaviour tree plugins and any other nav2 plugin you want to use, like 'collision_monitor' or 'velocity_smoother', in
- Test the navigation setup by sending goals to the robot and observing its behavior.
- Submit your completed
testbed_navigation
package with:- Parameter files for map loading, localization, and navigation.
- Launch files for each component.
- A
README.md
describing your approach and any challenges you faced.
- Provide a short video or screenshots showing your robot performing localization and navigation.
We’ll be looking for:
- A functional manual navigation setup.
- Clear, well-structured parameter files and launch files.
- A modular, well-documented implementation.
- Successful localization and navigation in the simulation.
- You’re welcome to modify the robot description or simulation setup to better suit your implementation.
- Thorough testing is encouraged to ensure everything works as expected.
- If you have questions, check out the help section and don’t hesitate to reach out to us.
- Lastly, we encourage you to share your code for review—even if it’s still a work in progress.
We’re excited to see how you approach this task. Good luck, and happy coding! :)