Skip to content

Conversation

@onkoe
Copy link
Member

@onkoe onkoe commented Nov 14, 2025

Goal

Update our ROS 2 version to enable usage of the ros2-control under Pixi in the simulator.

Summary

Because we're now using Pixi, the Rover is able to run any version of ROS 2, despite being stuck on Ubuntu 22.04 (thanks NVIDIA for that arbitrary limitation).

In any case, we need to do so, as the package that connects ros2-control to Gazebo has only been updated for Jazzy -- the package available for Humble is very old and seems intended for Gazebo Classic, which we don't use.

By updating to Jazzy, we also gain some benefits:

  • MUUUUCH enhanced static typing in rclpy and friends
  • Bug fixes for Context status in rclpy
  • Better static knowledge of ROS 2 parameters in rclpy
  • A TON of bug fixes in various other packages, especially relating to outdoors robotics

Checklist

BLOCKED: waiting on sync

in progress: blocked until next robostack-jazzy sync. see: RoboStack/ros-jazzy#126

builds work great! however, the simulator is currently encountering the following error due to a lack of required packages (particularly, geodesy, but likely others as well):

barrett@fedora ~/D/p/R/auto_ros2 (feat/jazzy)> just sim                                                                      (auto_ros2)
Building the ROS 2 workspace...
colcon build --symlink-install --packages-select custom_interfaces --cmake-args -DPython_ROOT_DIR="$CONDA_PREFIX" -DPython_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')"
Starting >>> custom_interfaces
Finished <<< custom_interfaces [0.44s]

Summary: 1 package finished [0.85s]
colcon build --symlink-install --cmake-args -DPython_ROOT_DIR="$CONDA_PREFIX" -DPython_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')"
Starting >>> custom_interfaces_shim
Starting >>> aruco_node
Starting >>> custom_interfaces
Starting >>> drive_launcher
Starting >>> log_node
Starting >>> manual_control
Starting >>> navigator
Starting >>> see3cam
Starting >>> simulator
Starting >>> zed
/home/barrett/Documents/projects/Rover/auto_ros2/.pixi/envs/default/lib/python3.12/site-packages/setuptools/_distutils/dist.py:289: UserWarning: Unknown distribution option: 'tests_require'
  warnings.warn(msg)
[1.627s] colcon.colcon_ros.task.ament_python.build WARNING Package 'navigator' doesn't explicitly install the 'package.xml' file (colcon-ros currently does it implicitly but that fallback will be removed in the future)
Finished <<< custom_interfaces_shim [1.13s]
Starting >>> drive_tui
Starting >>> lights
Starting >>> maps_backend
Starting >>> sensors
Starting >>> wheels
Finished <<< drive_launcher [1.17s]
Finished <<< see3cam [1.20s]
Finished <<< zed [1.21s]
Finished <<< custom_interfaces [1.25s]
Finished <<< simulator [1.49s]
Finished <<< drive_tui [0.40s]
Finished <<< maps_backend [0.43s]
Finished <<< wheels [0.43s]
--- stderr: sensors
warning: struct `RawData` is never constructed
   --> src/sensors/src/zed_imu.rs:106:12
    |
106 | pub struct RawData {
    |            ^^^^^^^
    |
    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default

---
Finished <<< sensors [0.43s]
Finished <<< aruco_node [2.14s]
Finished <<< manual_control [2.15s]
--- stderr: navigator
/home/barrett/Documents/projects/Rover/auto_ros2/.pixi/envs/default/lib/python3.12/site-packages/setuptools/_distutils/dist.py:289: UserWarning: Unknown distribution option: 'tests_require'
  warnings.warn(msg)
---
Finished <<< navigator [2.17s]
Finished <<< log_node [2.19s]
Finished <<< lights [1.15s]

Summary: 15 packages finished [2.70s]
  2 packages had stderr output: navigator sensors
Build complete!
You should be running this script using `\e[32m. ./SOURCE_SCRIPT.bash\e[0m`.
If you didn't do so, please restart the script.

Sourcing ROS 2 environment files...
Done!

Setting Nav2-compatible ROS middleware implementation...
Done!

Turning on colorized output from ROS 2...
Done!

All source tasks are now complete!
Adding these paths to Gazebo's plugin path: /opt/ros/jazzy/lib
ign: no process found
gzclient: no process found
simulator: no process found
gazebo: no process found
gzserver: no process found
The simulation is about to begin...
[INFO] [launch]: All log files can be found below /home/barrett/.ros/log/2025-11-13-20-20-00-945574-fedora-122742
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [parameter_bridge-1]: process started with pid [122761]
[INFO] [image_bridge-2]: process started with pid [122763]
[INFO] [gazebo-3]: process started with pid [122765]
[INFO] [simulator-4]: process started with pid [122767]
[INFO] [joint_state_publisher-5]: process started with pid [122769]
[INFO] [create-6]: process started with pid [122771]
[INFO] [navigator_node-7]: process started with pid [122773]
[INFO] [utm_conversion_node-8]: process started with pid [122775]
[INFO] [robot_state_publisher-9]: process started with pid [122777]
[INFO] [navsat_transform_node-10]: process started with pid [122779]
[INFO] [ekf_node-11]: process started with pid [122781]
[INFO] [ekf_node-12]: process started with pid [122783]
[INFO] [depthimage_to_laserscan_node-13]: process started with pid [122785]
[INFO] [slam_toolbox_start_node-14]: process started with pid [122787]
[INFO] [spawner-15]: process started with pid [122789]
[INFO] [navigation_bringup_node-16]: process started with pid [122792]
[INFO] [spawner-17]: process started with pid [122794]
[robot_state_publisher-9] [INFO] [1763086801.478057184] [robot_state_publisher]: Robot initialized
[create-6] [INFO] [1763086801.502138829] [ros_gz_sim]: Requesting list of world names.
[utm_conversion_node-8] Traceback (most recent call last):
[utm_conversion_node-8]   File "/home/barrett/Documents/projects/Rover/auto_ros2/install/navigator/lib/navigator/utm_conversion_node", line 33, in <module>
[utm_conversion_node-8]     sys.exit(load_entry_point('navigator', 'console_scripts', 'utm_conversion_node')())
[utm_conversion_node-8]              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[utm_conversion_node-8]   File "/home/barrett/Documents/projects/Rover/auto_ros2/install/navigator/lib/navigator/utm_conversion_node", line 25, in importlib_load_entry_point
[utm_conversion_node-8]     return next(matches).load()
[utm_conversion_node-8]            ^^^^^^^^^^^^^^^^^^^^
[utm_conversion_node-8]   File "/home/barrett/Documents/projects/Rover/auto_ros2/.pixi/envs/default/lib/python3.12/importlib/metadata/__init__.py", line 205, in load
[utm_conversion_node-8]     module = import_module(match.group('module'))
[utm_conversion_node-8]              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[utm_conversion_node-8]   File "/home/barrett/Documents/projects/Rover/auto_ros2/.pixi/envs/default/lib/python3.12/importlib/__init__.py", line 90, in import_module
[utm_conversion_node-8]     return _bootstrap._gcd_import(name[level:], package, level)
[utm_conversion_node-8]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[utm_conversion_node-8]   File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
[utm_conversion_node-8]   File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
[utm_conversion_node-8]   File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
[utm_conversion_node-8]   File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
[utm_conversion_node-8]   File "<frozen importlib._bootstrap_external>", line 999, in exec_module
[utm_conversion_node-8]   File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
[utm_conversion_node-8]   File "/home/barrett/Documents/projects/Rover/auto_ros2/build/navigator/utm_conversion_node/main.py", line 5, in <module>
[utm_conversion_node-8]     from geodesy import utm
[utm_conversion_node-8] ModuleNotFoundError: No module named 'geodesy'
[ERROR] [utm_conversion_node-8]: process has died [pid 122775, exit code 1, cmd '/home/barrett/Documents/projects/Rover/auto_ros2/install/navigator/lib/navigator/utm_conversion_node --ros-args -r __node:=utm_conversion_node -p use_sim_time:=True --params-file /tmp/launch_params_95bzbx4p'].
[simulator-4] 2025-11-13 20:20:01.632 | INFO     | simulator.main:main:68 - Starting simulator driver...
[simulator-4] 2025-11-13 20:20:01.739 | INFO     | simulator.main:main:72 - Simulator has been initialized.
[slam_toolbox_start_node-14] [INFO] [launch]: All log files can be found below /home/barrett/.ros/log/2025-11-13-20-20-01-864676-fedora-122787
[slam_toolbox_start_node-14] [INFO] [launch]: Default logging verbosity is set to INFO
[navigation_bringup_node-16] 2025-11-13 20:20:01.878 | INFO     | navigation_bringup_node.main:main:110 - Starting Navigation bringup...
[spawner-17] [INFO] [1763086801.891577843] [diff_drive_controller_spawner]: waiting for service /controller_manager/list_controllers to become available...
[slam_toolbox_start_node-14] [INFO] [static_transform_publisher-1]: process started with pid [123130]
[slam_toolbox_start_node-14] [INFO] [async_slam_toolbox_node-2]: process started with pid [123132]
[navigator_node-7] [INFO] [1763086801.906659227] [navigator_node]: Starting Navigator...
[navigator_node-7] Traceback (most recent call last):
[navigator_node-7]   File "/home/barrett/Documents/projects/Rover/auto_ros2/install/navigator/lib/navigator/navigator_node", line 33, in <module>
[navigator_node-7]     sys.exit(load_entry_point('navigator', 'console_scripts', 'navigator_node')())
[navigator_node-7]              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[navigator_node-7]   File "/home/barrett/Documents/projects/Rover/auto_ros2/build/navigator/navigator_node/main.py", line 492, in main
[navigator_node-7]     navigator_node: NavigatorNode = NavigatorNode()
[navigator_node-7]                                     ^^^^^^^^^^^^^^^
[navigator_node-7]   File "/home/barrett/Documents/projects/Rover/auto_ros2/build/navigator/navigator_node/main.py", line 115, in __init__
[navigator_node-7]     _ = self.declare_parameter(name="latitude", descriptor=latitude_desc)
[navigator_node-7]         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[navigator_node-7]   File "/home/barrett/Documents/projects/Rover/auto_ros2/.pixi/envs/default/lib/python3.12/site-packages/rclpy/node.py", line 388, in declare_parameter
[navigator_node-7]     return self.declare_parameters('', [args], ignore_override)[0]
[navigator_node-7]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[navigator_node-7]   File "/home/barrett/Documents/projects/Rover/auto_ros2/.pixi/envs/default/lib/python3.12/site-packages/rclpy/node.py", line 509, in declare_parameters
[navigator_node-7]     raise ValueError(
[navigator_node-7] ValueError: Cannot declare a statically typed parameter with default value of type PARAMETER_NOT_SET
[slam_toolbox_start_node-14] [static_transform_publisher-1] [WARN] [1763086801.920605804] []: Old-style arguments are deprecated; see --help for new-style arguments
[slam_toolbox_start_node-14] [static_transform_publisher-1] [INFO] [1763086801.925808089] [tf2_publish_camera_depth_frame_link_node]: Spinning until stopped - publishing transform
[slam_toolbox_start_node-14] [static_transform_publisher-1] translation: ('0.000000', '0.000000', '0.000000')
[slam_toolbox_start_node-14] [static_transform_publisher-1] rotation: ('0.000000', '0.000000', '0.000000', '1.000000')
[slam_toolbox_start_node-14] [static_transform_publisher-1] from 'camera_link' to 'camera_depth_frame'
[navigation_bringup_node-16] [INFO] [1763086801.935077013] [navigation_bringup_node]: Performing navigation stack bringup...
[joint_state_publisher-5] [INFO] [1763086801.938643778] [joint_state_publisher]: Waiting for robot_description to be published on the robot_description topic...
[slam_toolbox_start_node-14] [async_slam_toolbox_node-2] [INFO] [1763086801.938557407] [slam_toolbox]: Node using stack size 40000000
[parameter_bridge-1] [INFO] [1763086802.528155411] [ros_gz_bridge]: Creating GZ->ROS Bridge: [/imu (gz.msgs.IMU) -> /sensors/imu (sensor_msgs/msg/Imu)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.529929913] [ros_gz_bridge]: Creating GZ->ROS Bridge: [/navsat (gz.msgs.NavSat) -> /sensors/gps (sensor_msgs/msg/NavSatFix)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.530236705] [ros_gz_bridge]: Creating ROS->GZ Bridge: [/sim/left_front_wheel/vel (std_msgs/msg/Float64) -> /left_front_wheel/cmd_vel (gz.msgs.Double)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.530598448] [ros_gz_bridge]: Creating ROS->GZ Bridge: [/sim/left_middle_wheel/vel (std_msgs/msg/Float64) -> /left_middle_wheel/cmd_vel (gz.msgs.Double)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.530837209] [ros_gz_bridge]: Creating ROS->GZ Bridge: [/sim/left_back_wheel/vel (std_msgs/msg/Float64) -> /left_back_wheel/cmd_vel (gz.msgs.Double)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.531067271] [ros_gz_bridge]: Creating ROS->GZ Bridge: [/sim/right_front_wheel/vel (std_msgs/msg/Float64) -> /right_front_wheel/cmd_vel (gz.msgs.Double)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.531299752] [ros_gz_bridge]: Creating ROS->GZ Bridge: [/sim/right_middle_wheel/vel (std_msgs/msg/Float64) -> /right_middle_wheel/cmd_vel (gz.msgs.Double)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.531530944] [ros_gz_bridge]: Creating ROS->GZ Bridge: [/sim/right_back_wheel/vel (std_msgs/msg/Float64) -> /right_back_wheel/cmd_vel (gz.msgs.Double)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.531778066] [ros_gz_bridge]: Creating GZ->ROS Bridge: [/joint_states (gz.msgs.Model) -> /joint_states (sensor_msgs/msg/JointState)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.532080748] [ros_gz_bridge]: Creating GZ->ROS Bridge: [/sensors/mono_image/camera_info (gz.msgs.CameraInfo) -> /sensors/mono_image/camera_info (sensor_msgs/msg/CameraInfo)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.532415910] [ros_gz_bridge]: Creating GZ->ROS Bridge: [/sensors/camera_info (gz.msgs.CameraInfo) -> /sensors/depth_image/camera_info (sensor_msgs/msg/CameraInfo)] (Lazy 0)
[parameter_bridge-1] [INFO] [1763086802.532720312] [ros_gz_bridge]: Creating GZ->ROS Bridge: [/clock (ignition.msgs.Clock) -> clock (rosgraph_msgs/msg/Clock)] (Lazy 0)

@onkoe onkoe self-assigned this Nov 14, 2025
@onkoe onkoe added this to Autonomous Nov 14, 2025
@onkoe onkoe moved this to In Progress in Autonomous Nov 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

1 participant