0
$\begingroup$

I'm working on a differential drive robot simulation in ROS2 Jazzy and Gazebo Harmonics. My goal is to enable autonomous navigation to given coordinates using Nav2, with sensor fusion between IMU, wheel encoders, and GPS. However, I'm encountering issues with the Nav2 startup sequence due to missing collision detection sensors.

The basic sensor fusion is working, but Nav2's lifecycle nodes aren't fully launching due to the collision_monitor node failing. This makes sense as I have no LiDAR or camera for obstacle detection, but I need to find a way to run Nav2 without collision detection capabilities.

This is the error code I am getting:

[component_container-2] [INFO] [1739201580.897500063] [collision_monitor]: Configuring [component_container-2] [ERROR] [1739201580.899354171] [collision_monitor]: Error while getting parameters: parameter 'observation_sources' is not initialized [component_container-2] [INFO] [1739201580.899374011] [collision_monitor]: Cleaning up [component_container-2] [ERROR] [1739201580.901736311] [lifecycle_manager_navigation]: Failed to change state for node: collision_monitor [component_container-2] [ERROR] [1739201580.901751111] [lifecycle_manager_navigation]: Failed to bring up all requested nodes. Aborting bringup. 

My setup is:

  • Ubuntu 24.04
  • ROS2 Jazzy
  • Gazebo Harmonics

My question is there:

  1. Is there a way to configure Nav2 to run without the collision_monitor node?
  2. Alternatively, is there a way to configure the collision_monitor node to run with minimal/no collision detection sensors?

Additional Context: The full project code is available at: https://github.com/HenrikBiscuit/DiffDrive_Jazzy_Harmonics

The launch file I am using is "nav2test.launch.py"

$\endgroup$
3
  • $\begingroup$ Interesting! This is a very complex discussion, which you should start on discourse.ros.org. Your general idea will work, but you should think less in NAV2 terms, because you will not utilize most of its functionality. You path is a straight line to a GPS position (you cannot see anyway, might as well go straight) and your controller is a simple path_follower in odom-frame which you can get e.g. regulated pure pursuit. Use only EKF from localization package for sensor fusion. $\endgroup$ Commented Feb 10 at 16:40
  • 1
    $\begingroup$ @Scoeerg I think the use case is rather a known obstacle map, and an accurate enough pose estimate to navigate that map without obstacle detection. $\endgroup$ Commented Feb 10 at 21:49
  • $\begingroup$ @JRTG Yea, exactly! It's intended to drive on paved areas (or gravel), where there will be GPS boundaries (no go / can't go zones). So a LIDAR scanner would probably not be required. $\endgroup$ Commented Feb 11 at 11:54

2 Answers 2

0
$\begingroup$

[component_container-2] [ERROR] [1739201580.899354171] [collision_monitor]: Error while getting parameters: parameter 'observation_sources' is not initialized

You should simply disable the collision monitor. If you don't have any sensor data to come in to check for collisions based off of, the monitor isn't going to do you any good :-)

Go to the launch file, remove the collision monitor node from launching (and the lifecycle nodes list). Then, remap the velocity smoother to the appropriate input/output topics for removing the collision monitor.

You should be all set!

$\endgroup$
1
  • $\begingroup$ Hello, thanks for the answer. It would be nice to disable collision monitor, where do you mean I should do that? Is it an argument I pass into the node that launches "navigation_launch.py", or do you mean I should edit the file at "/opt/ros/jazzy/share/nav2_bringup/launch/navigation_launch.py"? And does the velocity smoother depend on the collision monitor? $\endgroup$ Commented Feb 10 at 20:44
0
$\begingroup$

I can't comment below Steve's answer so I will answer your doubt here.

Is it an argument I pass into the node that launches "navigation_launch.py", or do you mean I should edit the file at "/opt/ros/jazzy/share/nav2_bringup/launch/navigation_launch.py"? And does the velocity smoother depend on the collision monitor?

You should copy navigation_launch.py to your own package's launch directory, and then edit it there. Then just update the navigation2_cmd variable in your nav2test.launch.py to use the launch file from your package instead.

$\endgroup$
1
  • $\begingroup$ Thanks for the help! In hindsigth this was kind of obvious, but this solved my problem to an extend. I am marking Steves answer as accepted, but your comment really helped me implement the solution, so thanks! On to the next problem :D $\endgroup$ Commented Feb 12 at 12:20

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.