I am trying to add Gazebo Plug-ins for the second part of the URDF Project. I have added the plugs ins but whenever I try to spawn the robot, the sim shuts down.
Following is the terminal output when I spawn the robot:
ros2 launch small_city_lab_gzsim simulation.launch.py
[INFO] [launch]: All log files can be found below /home/user/.ros/log/2026-05-07-14-40-07-502220-4_xterm-21747
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [DISPLAY=:2 ruby $(which gz) sim-1]: process started with pid [21750]
[DISPLAY=:2 ruby $(which gz) sim-1] QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-user'
[DISPLAY=:2 ruby $(which gz) sim-1] MESA: error: ZINK: vkCreateInstance failed (VK_ERROR_INCOMPATIBLE_DRIVER)
[DISPLAY=:2 ruby $(which gz) sim-1] glx: failed to create drisw screen
[DISPLAY=:2 ruby $(which gz) sim-1] Warning [Utils.cc:132] [/sdf/model[@name="fastbot"]/link[@name="laser_spinner"]/sensor[@name="gpu_lidar"]/gz_frame_id:<urdf-string>:L0]: XML Element[gz_frame_id], child of element[sensor], not defined in SDF. Copying[gz_frame_id] as children of [sensor].
[DISPLAY=:2 ruby $(which gz) sim-1] [INFO] [1778164826.019080403] [gz_ros_control]: Loading controller_manager
[DISPLAY=:2 ruby $(which gz) sim-1] [INFO] [1778164826.038667933] [controller_manager]: Using ROS clock for triggering controller manager cycles.
[DISPLAY=:2 ruby $(which gz) sim-1] [INFO] [1778164826.044467760] [controller_manager]: Subscribing to '/robot_description' topic for robot description.
[DISPLAY=:2 ruby $(which gz) sim-1] [WARN] [1778164826.047800600] [gz_ros_control]: Waiting RM to load and initialize hardware...
[DISPLAY=:2 ruby $(which gz) sim-1] [INFO] [1778164826.088853498] [controller_manager]: Received robot description from topic.
[DISPLAY=:2 ruby $(which gz) sim-1] [INFO] [1778164826.088936736] [controller_manager]: Enforcing command limits is disabled. Command limits from URDF will be ignored.
[DISPLAY=:2 ruby $(which gz) sim-1] [INFO] [1778164826.105184462] [gz_ros_control]: The position_proportional_gain has been set to: 0.1
[DISPLAY=:2 ruby $(which gz) sim-1] [INFO] [1778164826.105335091] [gz_ros_control]: Loading joint: laser_spinner_joint
[DISPLAY=:2 ruby $(which gz) sim-1] [INFO] [1778164826.105357303] [gz_ros_control]: State:
.
.
.
[DISPLAY=:2 ruby $(which gz) sim-1] [INFO] [1778164826.106228333] [resource_manager]: Successful 'activate' of hardware 'GazeboSimSystem'
[DISPLAY=:2 ruby $(which gz) sim-1] gz sim server: symbol lookup error: /opt/ros/jazzy/lib/libcontroller_manager_msgs__rosidl_typesupport_fastrtps_cpp.so:undefined symbol: _ZN8eprosima7fastcdr3Cdr9serializeEj
[INFO] [DISPLAY=:2 ruby $(which gz) sim-1]: process has finished cleanly [pid 21750]
[INFO] [launch]: process[DISPLAY=:2 ruby $(which gz) sim-1] was required: shutting down launched system
I checked my environment variables, and only ROS2 Jazzy is sourced (ROS_DISTRO=jazzy ).
I also checked installed package versions and noticed that most ROS Jazzy packages are from 2024 builds, while ros-jazzy-gz-ros2-control appears to be from a much newer 2026 build.
When I remove the ros2control part, I don’t face this issue and the robot gets spawned normally.
Could this be a package/version mismatch issue between gz_ros2_control , FastDDS/FastCDR, or Gazebo packages in the lab environment?
Also, is the project officially tested on ROS2 Jazzy, or primarily on Humble?
Hi, Dificult to see without the project, but I would reccomend to try this:
Change the yaml file to : $(find-pkg-share ros2_urdf_project)/config/controllers.yaml, because it might not be finding it and fail silently. Or put the absolute path just for testing.
check the controller.yaml so it has something like this : ""controller_manager:
ros__parameters:
update_rate: 50
Hi. Thank you for the suggestions. @duckfrost2 I have re-checked the .yaml, the urdf and the code setup is exactly as you mentioned.
@girishkumar.kannan
I tried sudo update and sudo install ros-jazzy-fastcdr followed by reinstalling gz_ros_control.
It didn’t resolve the issue. When running the urdf launch file state_publisher.launch.pyafter those steps, I received the following error:
user:~/ros2_ws$ ros2 launch ros2_urdf_project state_publisher.launch.py
[INFO] [launch]: All log files can be found below /home/user/.ros/log/2026-05-12-14-10-27-977000-4_xterm-8523
[INFO] [launch]: Default logging verbosity is set to INFO
Fetching URDF ==>
[INFO] [robot_state_publisher-1]: process started with pid [8542]
[robot_state_publisher-1] terminate called after throwing an instance of 'eprosima::fastcdr::exception::BadParamException'
[robot_state_publisher-1] what(): This member is not been selected
[ERROR] [robot_state_publisher-1]: process has died [pid 8542, exit code -6, cmd '/opt/ros/jazzy/lib/robot_state_publisher/robot_state_publisher --ros-args -r __node:=robot_state_publisher_node --params-file /tmp/launch_params_0l4xow0j'].
On digging a bit, I found that the error was most likely caused because of version mismatch again between a newer version of FastCDR and an older version of the robot_state_publisher.
Later, on AI suggestion, I ran the following commands:
That successfully stopped the state_publisher from crashing. However, when I tried to actually spawn the robot (ros2 launch ros2_urdf_project spawn.launch.py), I hit a new error
user:~$ cd ros2_wsuser:~/ros2_ws$ source install/setup.bash
user:~/ros2_ws$ export RMW_IMPLEMENTATION=rmw_cyclonedds_cppuser:~/ros2_ws$ source install/setup.bash
user:~/ros2_ws$ ros2 launch ros2_urdf_project spawn.launch.py
[INFO] [launch]: All log files can be found below /home/user/.ros/log/2026-05-12-14-44-32-274761-4_xterm-24048
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [create-1]: process started with pid [24051]
[create-1]
[create-1] >>> [rcutils|error_handling.c:108] rcutils_set_error_state()
[create-1] This error state is being overwritten:
[create-1]
[create-1] 'failed to resolve symbol 'rmw_event_type_is_supported' in shared library '/home/simulations/ros2_sims_ws/install/rmw_cyclonedds_cpp/lib/librmw_cyclonedds_cpp.so', at ./src/functions.cpp:152'
[create-1]
[create-1] with this new error message:
[create-1]
[create-1] 'Handle's typesupport identifier (rosidl_typesupport_cpp) is not supported by this library, at ./src/type_support_dispatch.hpp:114'
[create-1]
[create-1] rcutils_reset_error() should be called after error handling to avoid this.
[create-1] <<<
[create-1] [INFO] [1778597072.685598600] [my_robot_spawn]: Requesting list of world names.
[create-1] [INFO] [1778597072.957736030] [my_robot_spawn]: Waiting messages on topic [robot_description].
[create-1] [INFO] [1778597072.980842665] [my_robot_spawn]: Entity creation successful.
[INFO] [create-1]: process has finished cleanly [pid 24051]
The suggested solution to this was a full system upgrade with sudo apt upgrade, but I haven’t done that as this is on a managed platform.
What would you suggest I do next? Is it safe for me to run a full apt upgrade in this rosject?
Hi @ralves
Thank you. The new Jazzy Docker image probably set things right for me, as I am able to spawn the robot in Gazebo and the simulation part of the rosject is working as expected now. Thank you for the help!