Discussion - Running ros2_control on a real robot (Making a Mobile Robot Pt 13)

Hi @JoshNewans
i installed RO2 Humble. I am getting this error when trying to build diffdrive_arduino with colcon build. Can you help me?

Starting >>> serial
Starting >>> articubot_one
Finished <<< articubot_one [0.88s]
Finished <<< serial [1.39s]
Starting >>> diffdrive_arduino
— stderr: diffdrive_arduino
In file included from /home/robot/rasp_ws/src/diffdrive_arduino/src/fake_robot.cpp:1:
/home/robot/rasp_ws/src/diffdrive_arduino/include/diffdrive_arduino/fake_robot.h:7:10: fatal error: hardware_interface/base_interface.hpp: No such file or directory
7 | #include “hardware_interface/base_interface.hpp”
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/fake_robot.dir/build.make:76: CMakeFiles/fake_robot.dir/src/fake_robot.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:165: CMakeFiles/fake_robot.dir/all] Error 2
gmake[1]: *** Waiting for unfinished jobs…
In file included from /home/robot/rasp_ws/src/diffdrive_arduino/src/diffdrive_arduino.cpp:1:
/home/robot/rasp_ws/src/diffdrive_arduino/include/diffdrive_arduino/diffdrive_arduino.h:7:10: fatal error: hardware_interface/base_interface.hpp: No such file or directory
7 | #include “hardware_interface/base_interface.hpp”
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/diffdrive_arduino.dir/build.make:76: CMakeFiles/diffdrive_arduino.dir/src/diffdrive_arduino.cpp.o] Error 1
gmake[2]: *** Waiting for unfinished jobs…
gmake[1]: *** [CMakeFiles/Makefile2:139: CMakeFiles/diffdrive_arduino.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2

Failed <<< diffdrive_arduino [23.8s, exited with code 2]

Summary: 2 packages finished [26.4s]
1 package failed: diffdrive_arduino
1 package had stderr output: diffdrive_arduino

@JoshNewans . I installed diffdrive_arduino of GitHub - Buzzology/diffdrive_arduino: A simple ROS Control Hardware Interface for differential drive control of robot whose motors are connected via an Arduino (or similar microcontroller).. I can run teleop_twist_keyboard to drive my around. My motors can work. But when I open rviz2 for tracking, when I press some letters ‘i’ and ‘m’ on the keyboard, the robot runs circle around base_link , doesn’t go straight ( forward and backward). I installed ROS2 HUMBLE. Can you help me, plz?

I’m a bit confuse
When using SIM mode
The file ros2_control.xacro define the differential wheel plug in for gazebo through the yaml files
the file gazebo_control.xacro define diff_drive plugin

isn’t redundant? what do I miss with my understanding?

@JoshNewans Hi! Firstly, amazing tutorial which clearly explains how to interface to a real robot. However, I am facing an issue when launching the real robot. The error is as below

[ros2_control_node-2] [INFO] [1694504172.944274701] [resource_manager]: Loading hardware ‘RealRobot’
[ros2_control_node-2] [INFO] [1694504172.946497851] [resource_manager]: Initialize hardware ‘RealRobot’
[ros2_control_node-2] terminate called after throwing an instance of ‘std::invalid_argument’

I figured the error occurs in the ros2_control/hardware_interface/resource_manager.cpp file. The specific line where the error occurs I think is this:
const rclcpp_lifecycle::State new_state = hardware.initialize(hardware_info);

I’m using an Arduino Mega instead. I have tested my bot with the ros_arduino_bridge package and it works fine when running miniterm. Is there a way to resolve this? Thank you!

1 Like

Hi, thank you for all your work on those videos, which I love learning from.

I’m trying to create my own robot under ROS 2 Humble. It seems that I have successfully managed to use Nav2. However, I don’t understand how ROS 2 Control is used by Nav2. What does Nav2 Controller Server and Planner use to work? And finally, the most important question: Is there any controller from ROS 2 Control for controlling a 3-wheel omnidirectional robot?

Hey Josh,

First of all, thanks for all these great tutorials! They are helping me loads during my studies and thanks for replying. This is for a school project, so i appreciate all the help i can get.
I get the same error message as Samet_Elmaci in this thread:
Discussion - Changes for running mobile robot on Humble/Jammy - #14 by Samet_Elmaci .

Some information about my setup:
I am using ros2 humble in a docker container. I have the exact same hardware setup as you for ease of following your tutorials. I have forwarded the USB ports on the pi to the container, so i am able to get lidar data and control the motors. Therefore the container setup itself is not likely the issue.

I have cloned the repo for articubot_one (humble branch) and the error happens when i try to run the the launch_robot.launch.py. I have tried various things to fix the issue:

  • I can control the motors with miniterm.
  • I have your diffdrive_arduino pkg (humble branch).
  • I have your serial pkg (newans_ros2 branch).
  • I have tried running it both on my dev machine and the rpi.
  • Following packages are installed:
    • ros-humble-ros2-controllers
    • ros-humble-ros2-control
    • ros-humble-gazebo-ros2-control (on dev machine)
  • ros2 control works when running ‘launch_sim.launch.py’. (I can teleop).
  • I have of course rebuild with colcon and sourced the workspace.
  • I tried referencing the serial device in the ros2_controller.xacro file both by /dev/ttyUSB0 and with /dev/serial/by-id/{the id i found for the nano}.
  • I have changed to both read, write, execute privilege for the serial port.
  • User is added to the dialout group
  • I have tried something as simple as sudo apt-get update and upgrade.

Things i am going to try:

  • I have only wired one of the motors up, so i will connect the other one as well.
  • Try foxy instead of humble.
  • Install ros directly on the machines instead of docker containers.

Error message:
devuser@pi:/overlay_ws$ ros2 launch articubot_one launch_robot.launch.py
[INFO] [launch]: All log files can be found below /home/devuser/.ros/log/2023-09-26-11-54-50-619436-pi-2661
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [2663]
[INFO] [twist_mux-2]: process started with pid [2665]
[twist_mux-2] [INFO] [1695729293.661287767] [twist_mux]: Topic handler ‘topics.joystick’ subscribed to topic ‘cmd_vel_joy’: timeout = 0.500000s , priority = 100.
[twist_mux-2] [INFO] [1695729293.669544297] [twist_mux]: Topic handler ‘topics.navigation’ subscribed to topic ‘cmd_vel’: timeout = 0.500000s , priority = 10.
[twist_mux-2] [INFO] [1695729293.671005906] [twist_mux]: Topic handler ‘topics.tracker’ subscribed to topic ‘cmd_vel_tracker’: timeout = 0.500000s , priority = 20.
[robot_state_publisher-1] [INFO] [1695729293.707919896] [robot_state_publisher]: got segment base_footprint
[robot_state_publisher-1] [INFO] [1695729293.708507536] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1695729293.708640478] [robot_state_publisher]: got segment camera_link
[robot_state_publisher-1] [INFO] [1695729293.708740736] [robot_state_publisher]: got segment camera_link_optical
[robot_state_publisher-1] [INFO] [1695729293.708833883] [robot_state_publisher]: got segment caster_wheel
[robot_state_publisher-1] [INFO] [1695729293.708923104] [robot_state_publisher]: got segment chassis
[robot_state_publisher-1] [INFO] [1695729293.709009436] [robot_state_publisher]: got segment face_link
[robot_state_publisher-1] [INFO] [1695729293.709094694] [robot_state_publisher]: got segment laser_frame
[robot_state_publisher-1] [INFO] [1695729293.709181637] [robot_state_publisher]: got segment left_wheel
[robot_state_publisher-1] [INFO] [1695729293.709267247] [robot_state_publisher]: got segment right_wheel
[INFO] [ros2_control_node-3]: process started with pid [2700]
[INFO] [spawner-4]: process started with pid [2702]
[INFO] [spawner-5]: process started with pid [2704]
[ros2_control_node-3] [INFO] [1695729302.263149623] [resource_manager]: Loading hardware ‘RealRobot’
[ros2_control_node-3] terminate called after throwing an instance of ‘pluginlib::LibraryLoadException’
[ros2_control_node-3] what(): According to the loaded plugin descriptions the class diffdrive_arduino/DiffDriveArduino with base class type hardware_interface::SystemInterface does not exist. Declared types are diffdrive_arduino/DiffDriveArduinoHardware fake_components/GenericSystem mock_components/GenericSystem test_hardware_components/TestSystemCommandModes test_hardware_components/TestTwoJointSystem test_system
[ros2_control_node-3] Stack trace (most recent call last):
[ros2_control_node-3] #16 Object “/usr/lib/aarch64-linux-gnu/ld-linux-aarch64.so.1”, at 0xffffffffffffffff, in
[ros2_control_node-3] #15 Object “/opt/ros/humble/lib/controller_manager/ros2_control_node”, at 0xaaaae2d52c6f, in
[ros2_control_node-3] #14 Object “/usr/lib/aarch64-linux-gnu/libc.so.6”, at 0xffffa63274cb, in __libc_start_main
[ros2_control_node-3] #13 Object “/usr/lib/aarch64-linux-gnu/libc.so.6”, at 0xffffa63273fb, in
[ros2_control_node-3] #12 Object “/opt/ros/humble/lib/controller_manager/ros2_control_node”, at 0xaaaae2d52767, in
[ros2_control_node-3] #11 Object “/opt/ros/humble/lib/libcontroller_manager.so”, at 0xffffa699cba7, in controller_manager::ControllerManager::ControllerManager(std::shared_ptrrclcpp::Executor, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, rclcpp::NodeOptions const&)
[ros2_control_node-3] #10 Object “/opt/ros/humble/lib/libcontroller_manager.so”, at 0xffffa699bfcf, in controller_manager::ControllerManager::init_resource_manager(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)
[ros2_control_node-3] #9 Object “/opt/ros/humble/lib/libhardware_interface.so”, at 0xffffa6197237, in hardware_interface::ResourceManager::load_urdf(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, bool)
[ros2_control_node-3] #8 Object “/opt/ros/humble/lib/libhardware_interface.so”, at 0xffffa61959e3, in
[ros2_control_node-3] #7 Object “/opt/ros/humble/lib/libhardware_interface.so”, at 0xffffa61a16b7, in
[ros2_control_node-3] #6 Object “/usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.30”, at 0xffffa6582e03, in __cxa_throw
[ros2_control_node-3] #5 Object “/usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.30”, at 0xffffa6582b1f, in std::terminate()
[ros2_control_node-3] #4 Object “/usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.30”, at 0xffffa6582abb, in
[ros2_control_node-3] #3 Object “/usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.30”, at 0xffffa65862db, in __gnu_cxx::__verbose_terminate_handler()
[ros2_control_node-3] #2 Object “/usr/lib/aarch64-linux-gnu/libc.so.6”, at 0xffffa632712f, in abort
[ros2_control_node-3] #1 Object “/usr/lib/aarch64-linux-gnu/libc.so.6”, at 0xffffa633a67b, in raise
[ros2_control_node-3] #0 Object “/usr/lib/aarch64-linux-gnu/libc.so.6”, at 0xffffa637f200, in
[ros2_control_node-3] Aborted (Signal sent by tkill() 2700 1000)
[ERROR] [ros2_control_node-3]: process has died [pid 2700, exit code -6, cmd ‘/opt/ros/humble/lib/controller_manager/ros2_control_node --ros-args --params-file /tmp/launch_params_navrtmcw --params-file /overlay_ws/install/articubot_one/share/articubot_one/config/my_controllers.yaml’].
[spawner-4] [INFO] [1695729307.338964270] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-5] [INFO] [1695729307.421576180] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [INFO] [1695729309.405147189] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-5] [INFO] [1695729309.489268521] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [INFO] [1695729311.472865011] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-5] [INFO] [1695729311.556779495] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [INFO] [1695729313.543320664] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-5] [INFO] [1695729313.625254842] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [ERROR] [1695729315.200286903] [spawner_joint_broad]: Controller manager not available
[spawner-5] [ERROR] [1695729315.279275328] [spawner_diff_cont]: Controller manager not available
[ERROR] [spawner-4]: process has died [pid 2702, exit code 1, cmd ‘/opt/ros/humble/lib/controller_manager/spawner joint_broad --ros-args’].
[ERROR] [spawner-5]: process has died [pid 2704, exit code 1, cmd ‘/opt/ros/humble/lib/controller_manager/spawner diff_cont --ros-args’].

Hi,
I’m running directly on arduino and have the same issue.

ros2@robot:/home/robot_ws$ ros2 launch lunorobot launch_robot.launch.py
[INFO] [launch]: All log files can be found below /home/ros2/.ros/log/2023-10-03-17-12-02-039075-robot-4349
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [4350]
[robot_state_publisher-1] [INFO] [1696345922.974149735] [robot_state_publisher]: got segment base_footprint
[robot_state_publisher-1] [INFO] [1696345922.974446916] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1696345922.974494767] [robot_state_publisher]: got segment caster_wheel
[robot_state_publisher-1] [INFO] [1696345922.974526341] [robot_state_publisher]: got segment chassis
[robot_state_publisher-1] [INFO] [1696345922.974552155] [robot_state_publisher]: got segment laser_frame
[robot_state_publisher-1] [INFO] [1696345922.974576322] [robot_state_publisher]: got segment left_wheel
[robot_state_publisher-1] [INFO] [1696345922.974600988] [robot_state_publisher]: got segment right_wheel
[INFO] [ros2_control_node-2]: process started with pid [4388]
[INFO] [spawner-3]: process started with pid [4390]
[INFO] [spawner-4]: process started with pid [4392]
[ros2_control_node-2] [INFO] [1696345928.903734258] [resource_manager]: Loading hardware ‘RealRobot’
[ros2_control_node-2] terminate called after throwing an instance of ‘pluginlib::LibraryLoadException’
[ros2_control_node-2] what(): According to the loaded plugin descriptions the class diffdrive_arduino/DiffDriveArduino with base class type hardware_interface::SystemInterface does not exist. Declared types are diffdrive_arduino/DiffDriveArduinoHardware fake_components/GenericSystem mock_components/GenericSystem test_hardware_components/TestSystemCommandModes test_hardware_components/TestTwoJointSystem test_system
[ros2_control_node-2] Stack trace (most recent call last):
[ros2_control_node-2] #16 Object “/usr/lib/aarch64-linux-gnu/ld-linux-aarch64.so.1”, at 0xffffffffffffffff, in
[ros2_control_node-2] #15 Object “/opt/ros/humble/lib/controller_manager/ros2_control_node”, at 0xaaaaea4c2c6f, in
[ros2_control_node-2] #14 Object “/usr/lib/aarch64-linux-gnu/libc.so.6”, at 0xffff9fb674cb, in __libc_start_main
[ros2_control_node-2] #13 Object “/usr/lib/aarch64-linux-gnu/libc.so.6”, at 0xffff9fb673fb, in
[ros2_control_node-2] #12 Object “/opt/ros/humble/lib/controller_manager/ros2_control_node”, at 0xaaaaea4c2767, in
[ros2_control_node-2] #11 Object “/opt/ros/humble/lib/libcontroller_manager.so”, at 0xffffa01dd717, in controller_manager::ControllerManager::ControllerManager(std::shared_ptrrclcpp::Executor, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, rclcpp::NodeOptions const&)
[ros2_control_node-2] #10 Object “/opt/ros/humble/lib/libcontroller_manager.so”, at 0xffffa01dcb3f, in controller_manager::ControllerManager::init_resource_manager(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)
[ros2_control_node-2] #9 Object “/opt/ros/humble/lib/libhardware_interface.so”, at 0xffff9f9d7237, in hardware_interface::ResourceManager::load_urdf(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, bool)
[ros2_control_node-2] #8 Object “/opt/ros/humble/lib/libhardware_interface.so”, at 0xffff9f9d59e3, in
[ros2_control_node-2] #7 Object “/opt/ros/humble/lib/libhardware_interface.so”, at 0xffff9f9e16b7, in
[ros2_control_node-2] #6 Object “/usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.30”, at 0xffff9fdc2e03, in __cxa_throw
[ros2_control_node-2] #5 Object “/usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.30”, at 0xffff9fdc2b1f, in std::terminate()
[ros2_control_node-2] #4 Object “/usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.30”, at 0xffff9fdc2abb, in
[ros2_control_node-2] #3 Object “/usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.30”, at 0xffff9fdc62db, in __gnu_cxx::__verbose_terminate_handler()
[ros2_control_node-2] #2 Object “/usr/lib/aarch64-linux-gnu/libc.so.6”, at 0xffff9fb6712f, in abort
[ros2_control_node-2] #1 Object “/usr/lib/aarch64-linux-gnu/libc.so.6”, at 0xffff9fb7a67b, in raise
[ros2_control_node-2] #0 Object “/usr/lib/aarch64-linux-gnu/libc.so.6”, at 0xffff9fbbf200, in
[ros2_control_node-2] Aborted (Signal sent by tkill() 4388 1000)
[ERROR] [ros2_control_node-2]: process has died [pid 4388, exit code -6, cmd ‘/opt/ros/humble/lib/controller_manager/ros2_control_node --ros-args --params-file /tmp/launch_params_izmqttko --params-file /home/robot_ws/install/lunorobot/share/lunorobot/config/my_controllers.yaml’].
[spawner-3] [INFO] [1696345932.213156760] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [INFO] [1696345932.541984436] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[spawner-3] [INFO] [1696345934.271893949] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [INFO] [1696345934.602429954] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[spawner-3] [INFO] [1696345936.328438815] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [INFO] [1696345936.660799370] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist

Could you please help?

Hi,

Solution found for Humble version
There are 3 issues in ros2_control.xacro file:

  1. the name of the plugin should be diffdrive_arduino/DiffDriveArduinoHardware
  2. the name of the timeout parameter should be timeout_ms
  3. the sequence of the state_interface should be position then velocity, see correct xml code below:
<ros2_control name="RealRobot" type="system">
        <hardware>
            <plugin>diffdrive_arduino/DiffDriveArduinoHardware</plugin>
            <param name="left_wheel_name">left_wheel_joint</param>
            <param name="right_wheel_name">right_wheel_joint</param>
            <param name="loop_rate">30</param>
            <param name="device">/dev/ttyUSB0</param>
            <param name="baud_rate">57600</param>
            <param name="timeout_ms">1000</param>
            <param name="enc_counts_per_rev">17280</param>
        </hardware>
        <!-- Note everything below here is the same as the Gazebo one -->
        <joint name="left_wheel_joint">
            <command_interface name="velocity">
                <param name="min">-10</param>
                <param name="max">10</param>
            </command_interface>
            <state_interface name="position"/>
            <state_interface name="velocity"/>
        </joint>
        <joint name="right_wheel_joint">
            <command_interface name="velocity">
                <param name="min">-10</param>
                <param name="max">10</param>
            </command_interface>
            <state_interface name="position"/>
            <state_interface name="velocity"/>
        </joint>
    </ros2_control> 
</robot>
1 Like

Hi Josh,
I find your videos awsome!!!
Would you mind to plan a topic also using some kind of 9dof sensor (for example bno055) for better navigation? Are they really needed or SLAM is enoough?

Thank you very much!

Cheers,
Ivo

hi im new to Ros and needed some help. From the tutorials i have leard few thing and iwas able to build a 4WD diff_drive robot ( GitHub - The-Kriz/rog_ros_bot )

but was able to run the bot in sim, but didnt have the luck to make the actual bot run as i coudint figure out how to write code for the hardware part ( i only know basic arduino code )

can someone help me to convert or let me know what all i should change from the provided code for 2WD diff_drive to 4WD diff_drive

thanks you,
Kriz

HI,
It was a great lecture, thanks for sharing with us. I was able to follow most part of it, but i was unable to understand how input and output ports are connected in the hardware interface plugin.

thanks a lot for sharing with us.

Hi @JoshNewans
Thank you for the great work!

I have a question and would appreciate your help.

Could you please explain the rationale behind the specific formula used in the setMotorValues method for converting angular velocity to encoder counts per control loop iteration?

arduino_.setMotorValues(l_wheel_.cmd / l_wheel_.rads_per_count / cfg_.loop_rate, r_wheel_.cmd / r_wheel_.rads_per_count / cfg_.loop_rate);

Specifically, why are the desired angular velocities divided by both the rads_per_count conversion factor and the loop_rate ?

If I were to adapt this code for a different robot with different hardware or control requirements, what aspects of this line would I need to modify?

I seem to be having a problem with the teleop_twist_joy node not auto-repeating.

I used ros2 topic echo /diff_cont/cmd_vel_unstamped to monitor the command being sent when I was using the joy stick to control the robot.

Initial I would see the command and the robot would move. But after a few seconds, no more commands would be sent even when the joystick is held full forward with the enable button pressed.

I have the “autorepeat_rate” set to 20.0 in the joystick.yaml file.

What am I missing?

Any ideas would be welcome. Thank you

I watched the video “You can use ANY hardware with ros2_control”, I downloaded the code of that video, The purpose of that code is that I want to use the frame available in the code to connect to the arduino mega board. Currently I am in the stage of connecting ros2_control to arduino through the code framework available in the video, But I have connection problems when launching the diffbot.launch.py file, currently I am working on the ros_humble version. I’m really sorry that my English sentence seems grammatically incorrect. Thank you everyone for your help.
I just edited the device parameter:

/dev/serial/by-path/pci-0000\:05\:00.3-usb-0\:2\:1.0 error: namdc@Nam20195107:~/project_arduino$ ros2 launch diffdrive_arduino diffbot.launch.py [INFO] [launch]: All log files can be found below /home/namdc/.ros/log/2023-11-25-12-52-15-389354-Nam20195107-10120 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [ros2_control_node-1]: process started with pid [10123] [INFO] [robot_state_publisher-2]: process started with pid [10125] [INFO] [spawner-3]: process started with pid [10127] [ros2_control_node-1] [INFO] [1700891536.231110072] [resource_manager]: Loading hardware 'DiffBot' [ros2_control_node-1] [INFO] [1700891536.232843117] [resource_manager]: Initialize hardware 'DiffBot' [ros2_control_node-1] [INFO] [1700891536.233266397] [resource_manager]: Successful initialization of hardware 'DiffBot' [ros2_control_node-1] [INFO] [1700891536.233504397] [resource_manager]: 'configure' hardware 'DiffBot' [ros2_control_node-1] [INFO] [1700891536.233545464] [DiffDriveArduinoHardware]: Configuring ...please wait... [ros2_control_node-1] terminate called after throwing an instance of 'LibSerial::OpenFailed' [ros2_control_node-1] what(): Bad file descriptor [ros2_control_node-1] Stack trace (most recent call last): [robot_state_publisher-2] [WARN] [1700891536.235810194] [kdl_parser]: The root link base_link has an inertia specified in the URDF, but KDL does not support a root link with an inertia. As a workaround, you can add an extra dummy link to your URDF. [robot_state_publisher-2] [INFO] [1700891536.236364170] [robot_state_publisher]: got segment base_link [robot_state_publisher-2] [INFO] [1700891536.236486892] [robot_state_publisher]: got segment caster_frontal_wheel [robot_state_publisher-2] [INFO] [1700891536.236504515] [robot_state_publisher]: got segment caster_rear_wheel [robot_state_publisher-2] [INFO] [1700891536.236517450] [robot_state_publisher]: got segment left_wheel [robot_state_publisher-2] [INFO] [1700891536.236529713] [robot_state_publisher]: got segment right_wheel [ros2_control_node-1] #22 Object "", at 0xffffffffffffffff, in [ros2_control_node-1] #21 Object "/opt/ros/humble/lib/controller_manager/ros2_control_node", at 0x55ebb695dd84, in [ros2_control_node-1] #20 Source "../csu/libc-start.c", line 392, in __libc_start_main_impl [0x7faad2c29e3f] [ros2_control_node-1] #19 Source "../sysdeps/nptl/libc_start_call_main.h", line 58, in __libc_start_call_main [0x7faad2c29d8f] [ros2_control_node-1] #18 Object "/opt/ros/humble/lib/controller_manager/ros2_control_node", at 0x55ebb695d89e, in [ros2_control_node-1] #17 Object "/opt/ros/humble/lib/libcontroller_manager.so", at 0x7faad3657661, in controller_manager::ControllerManager::ControllerManager(std::shared_ptr, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, rclcpp::NodeOptions const&) [ros2_control_node-1] #16 Object "/opt/ros/humble/lib/libcontroller_manager.so", at 0x7faad3656b2e, in controller_manager::ControllerManager::init_resource_manager(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&) [ros2_control_node-1] #15 Object "/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad32f8900, in hardware_interface::ResourceManager::activate_all_components() [ros2_control_node-1] #14 Object "/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad32f80bb, in hardware_interface::ResourceManager::set_component_state(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, rclcpp_lifecycle::State&) [ros2_control_node-1] #13 Object "/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad32f95e2, in bool hardware_interface::ResourceStorage::set_component_state(hardware_interface::System&, rclcpp_lifecycle::State const&) [ros2_control_node-1] #12 Object "/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad330489b, in [ros2_control_node-1] #11 Object "/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad331aaeb, in [ros2_control_node-1] #10 Object "/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad3312776, in hardware_interface::System::configure() [ros2_control_node-1] #9 Object "/home/namdc/project_arduino/install/diffdrive_arduino/lib/libdiffdrive_arduino.so", at 0x7faacd614b24, in diffdrive_arduino::DiffDriveArduinoHardware::on_configure(rclcpp_lifecycle::State const&) [ros2_control_node-1] #8 Object "/home/namdc/project_arduino/install/diffdrive_arduino/lib/libdiffdrive_arduino.so", at 0x7faacd61765c, in ArduinoComms::connect(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, int, int) [ros2_control_node-1] #7 Object "/usr/lib/x86_64-linux-gnu/libserial.so.1.0.0", at 0x7faacd5a40b3, in [ros2_control_node-1] #6 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30", at 0x7faad30ae4d7, in __cxa_throw [ros2_control_node-1] #5 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30", at 0x7faad30ae276, in std::terminate() [ros2_control_node-1] #4 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30", at 0x7faad30ae20b, in [ros2_control_node-1] #3 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30", at 0x7faad30a2b9d, in [ros2_control_node-1] #2 Source "./stdlib/abort.c", line 79, in abort [0x7faad2c287f2] [ros2_control_node-1] #1 Source "../sysdeps/posix/raise.c", line 26, in raise [0x7faad2c42475] [ros2_control_node-1] #0 | Source "./nptl/pthread_kill.c", line 89, in __pthread_kill_internal [ros2_control_node-1] | Source "./nptl/pthread_kill.c", line 78, in __pthread_kill_implementation [ros2_control_node-1] Source "./nptl/pthread_kill.c", line 44, in __pthread_kill [0x7faad2c969fc] [ros2_control_node-1] Aborted (Signal sent by tkill() 10123 1000) [ERROR] [ros2_control_node-1]: process has died [pid 10123, exit code -6, cmd '/opt/ros/humble/lib/controller_manager/ros2_control_node --ros-args --params-file /tmp/launch_params_xpux93li --params-file /home/namdc/project_arduino/install/diffdrive_arduino/share/diffdrive_arduino/config/diffbot_controllers.yaml']. [spawner-3] [INFO] [1700891538.812032991] [spawner_joint_state_broadcaster]: Waiting for '/controller_manager' node to exist [spawner-3] [INFO] [1700891540.830612800] [spawner_joint_state_broadcaster]: Waiting for '/controller_manager' node to exist [spawner-3] [INFO] [1700891542.849569356] [spawner_joint_state_broadcaster]: Waiting for '/controller_manager' node to exist [spawner-3] [INFO] [1700891544.867227744] [spawner_joint_state_broadcaster]: Waiting for '/controller_manager' node to exist [spawner-3] [ERROR] [1700891546.883473615] [spawner_joint_state_broadcaster]: Controller manager not available [ERROR] [spawner-3]: process has died [pid 10127, exit code 1, cmd '/opt/ros/humble/lib/controller_manager/spawner joint_state_broadcaster --controller-manager /controller_manager --ros-args']. [INFO] [spawner-4]: process started with pid [10167] [INFO] [rviz2-5]: process started with pid [10169] [rviz2-5] Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway. [rviz2-5] [INFO] [1700891547.947906029] [rviz2]: Stereo is NOT SUPPORTED [rviz2-5] [INFO] [1700891547.948230081] [rviz2]: OpenGl version: 4.6 (GLSL 4.6) [rviz2-5] [INFO] [1700891547.987819732] [rviz2]: Stereo is NOT SUPPORTED [rviz2-5] [ERROR] [1700891548.258911760] [rviz2]: The link is static or has unrealistic inertia, so the equivalent inertia box will not be shown. [rviz2-5] [rviz2-5] [ERROR] [1700891548.259194124] [rviz2]: The link is static or has unrealistic inertia, so the equivalent inertia box will not be shown. [rviz2-5] [spawner-4] [INFO] [1700891549.758581685] [spawner_diffbot_base_controller]: Waiting for '/controller_manager' node to exist [spawner-4] [INFO] [1700891551.777160247] [spawner_diffbot_base_controller]: Waiting for '/controller_manager' node to exist [spawner-4] [INFO] [1700891553.793324662] [spawner_diffbot_base_controller]: Waiting for '/controller_manager' node to exist [spawner-4] [INFO] [1700891555.810854949] [spawner_diffbot_base_controller]: Waiting for '/controller_manager' node to exist [spawner-4] [ERROR] [1700891557.828001767] [spawner_diffbot_base_controller]: Controller manager not available [ERROR] [spawner-4]: process has died [pid 10167, exit code 1, cmd '/opt/ros/humble/lib/controller_manager/spawner diffbot_base_controller --controller-manager /controller_manager --ros-args'].

Thank you very much @JoshNewans for such a useful content! I’m facing one issue. My real robot wheels are moving fine but in rviz2 it is not moving. The tf is also not moving. Fixed frame is ‘odom’. Tried other fixed frame but of no avail. Don’t know the real problem. If anyone knows about this issue, please help me out. Thanks once again.

Hi @JoshNewans I have learned a lot from your tutorials and applying them on my graduation project so thank you for all the work you have done I would not got anywhere without your generous help
I have been running into issues when I run the “launch_robot.launch.py” on the RasberryPi while it works perfectly on my laptop and in both cases the Arduino board works fine but I do not seem to load “diff_cont” for some reason on the Pi here is the error I get

[INFO] [ros2_control_node-4]: process started with pid [196016]
[INFO] [spawner-5]: process started with pid [196018]
[INFO] [spawner-6]: process started with pid [196020]
[ros2_control_node-4] [INFO] [1700919705.073008620] [resource_manager]: Loading hardware 'RealRobot' 
[ros2_control_node-4] [INFO] [1700919705.094977924] [resource_manager]: Initialize hardware 'RealRobot' 
[ros2_control_node-4] [INFO] [1700919705.098197162] [DiffDriveArduino]: Configuring...
[ros2_control_node-4] [INFO] [1700919705.128308250] [DiffDriveArduino]: Finished Configuration
[ros2_control_node-4] [INFO] [1700919705.128477832] [resource_manager]: Successful initialization of hardware 'RealRobot'
[ros2_control_node-4] [INFO] [1700919705.129383249] [resource_manager]: 'configure' hardware 'RealRobot' 
[ros2_control_node-4] [INFO] [1700919705.129478457] [resource_manager]: Successful 'configure' of hardware 'RealRobot'
[ros2_control_node-4] [INFO] [1700919705.129508218] [resource_manager]: 'activate' hardware 'RealRobot' 
[ros2_control_node-4] [INFO] [1700919705.129532016] [DiffDriveArduino]: Starting Controller...
[ros2_control_node-4] [INFO] [1700919706.134547443] [resource_manager]: Successful 'activate' of hardware 'RealRobot'
[ros2_control_node-4] [INFO] [1700919706.271511173] [controller_manager]: update rate is 30 Hz
[ros2_control_node-4] [INFO] [1700919706.288859315] [controller_manager]: RT kernel is recommended for better performance
[ros2_control_node-4] [INFO] [1700919707.306182869] [controller_manager]: Loading controller 'joint_broad'
[ros2_control_node-4] [INFO] [1700919707.525818714] [controller_manager]: Loading controller 'diff_cont'
[ros2_control_node-4] [ERROR] [1700919707.525999760] [controller_manager]: Loader for controller 'diff_cont' (type 'diff_drive_controller/DiffDriveController') not found.
[ros2_control_node-4] [INFO] [1700919707.526040966] [controller_manager]: Available classes:
[ros2_control_node-4] [INFO] [1700919707.526075634] [controller_manager]:   controller_manager/test_controller
[ros2_control_node-4] [INFO] [1700919707.526103543] [controller_manager]:   controller_manager/test_controller_failed_init
[ros2_control_node-4] [INFO] [1700919707.526129859] [controller_manager]:   controller_manager/test_controller_with_interfaces
[ros2_control_node-4] [INFO] [1700919707.526158527] [controller_manager]:   joint_state_broadcaster/JointStateBroadcaster
[ros2_control_node-4] [INFO] [1700919707.526212030] [controller_manager]:   joint_trajectory_controller/JointTrajectoryController
[ros2_control_node-4] [INFO] [1700919707.528960763] [controller_manager]:   controller_manager/test_chainable_controller
[spawner-6] [FATAL] [1700919707.533096584] [spawner_diff_cont]: Failed loading controller diff_cont
[spawner-5] [INFO] [1700919707.759520886] [spawner_joint_broad]: Loaded joint_broad
[ros2_control_node-4] [INFO] [1700919707.765827910] [controller_manager]: Configuring controller 'joint_broad'
[ros2_control_node-4] [INFO] [1700919707.766330214] [joint_broad]: 'joints' or 'interfaces' parameter is empty. All available state interfaces will be published
[spawner-5] [INFO] [1700919707.954555349] [spawner_joint_broad]: Configured and activated joint_broad
[ERROR] [spawner-6]: process has died [pid 196020, exit code 1, cmd '/opt/ros/humble/lib/controller_manager/spawner diff_cont --ros-args'].
[INFO] [spawner-5]: process has finished cleanly [pid 196018]

my initial thoughts that it dose not see the “my_controllers.yaml” file but it runs the “joint_broad” without any problems

Hi Josh!
I’m planning to simulate an AUV for 3D underwater object tracking with camera sensor using ROS and Gazebo. Do you have Any recommendations on the ROS version, Gazebo version, and plugins for simulation this scenario? or GitHub directory?

hello, i have problem with the diffdrive_arduino, it can’t be compiled. im using the ubuntu 22.04 with ros humble and i can install the ros-foxy, so i use the ros-humble. but after i install the ros-humble-ros2-control & ros-humble-ros2-controllers the diffdrive_arduino still won’t compiled. can u help me?? thankyou
agnes@raspberrypi:~/ros2_ws$ colcon build --symlink-install
[8.185s] WARNING:colcon.colcon_core.package_selection:Some selected packages are already built in one or more underlay workspaces:
‘rplidar_ros’ is in: /home/agnes/ros2_ws/install/rplidar_ros
If a package in a merged underlay workspace is overridden and it installs headers, then all packages in the overlay must sort their include directories by workspace order. Failure to do so may result in build failures or undefined behavior at run time.
If the overridden package is used by another package in any underlay, then the overriding package in the overlay must be API and ABI compatible or undefined behavior at run time may occur.

If you understand the risks and want to override a package anyways, add the following to the command line:
–allow-overriding rplidar_ros

This may be promoted to an error in a future release of colcon-override-check.
Starting >>> serial
Starting >>> articubot_one
Starting >>> ldlidar_stl_ros2
Starting >>> rplidar_ros
Finished <<< articubot_one [3.33s]
Finished <<< ldlidar_stl_ros2 [3.37s]
Finished <<< serial [4.88s]
Starting >>> diffdrive_arduino
Finished <<< rplidar_ros [4.61s]
— stderr: diffdrive_arduino
In file included from /home/agnes/ros2_ws/src/diffdrive_arduino/src/fake_robot.cpp:1:
/home/agnes/ros2_ws/src/diffdrive_arduino/include/diffdrive_arduino/fake_robot.h:7:10: fatal error: hardware_interface/base_interface.hpp: No such file or directory
7 | #include “hardware_interface/base_interface.hpp”
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/fake_robot.dir/build.make:76: CMakeFiles/fake_robot.dir/src/fake_robot.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:165: CMakeFiles/fake_robot.dir/all] Error 2
gmake[1]: *** Waiting for unfinished jobs…
In file included from /home/agnes/ros2_ws/src/diffdrive_arduino/src/diffdrive_arduino.cpp:1:
/home/agnes/ros2_ws/src/diffdrive_arduino/include/diffdrive_arduino/diffdrive_arduino.h:7:10: fatal error: hardware_interface/base_interface.hpp: No such file or directory
7 | #include “hardware_interface/base_interface.hpp”
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/diffdrive_arduino.dir/build.make:76: CMakeFiles/diffdrive_arduino.dir/src/diffdrive_arduino.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:139: CMakeFiles/diffdrive_arduino.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2

Failed <<< diffdrive_arduino [3.85s, exited with code 2]

Summary: 4 packages finished [14.0s]
1 package failed: diffdrive_arduino
1 package had stderr output: diffdrive_arduino

hello Mr joshNewans i have a problem when i try to run this command ros2 launch articubot_one launch_robot.launch.py
the error is :
[INFO] [launch]: All log files can be found below /home/omar/.ros/log/2023-12-19-14-15-50-067095-omarlegiony540-15500
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [15503]
[INFO] [twist_mux-2]: process started with pid [15505]
[robot_state_publisher-1] Parsing robot urdf xml string.
[robot_state_publisher-1] Link base_footprint had 0 children
[robot_state_publisher-1] Link chassis had 3 children
[robot_state_publisher-1] Link camera_link had 1 children
[robot_state_publisher-1] Link camera_link_optical had 0 children
[robot_state_publisher-1] Link caster_wheel had 0 children
[robot_state_publisher-1] Link laser_frame had 0 children
[robot_state_publisher-1] Link left_wheel had 0 children
[robot_state_publisher-1] Link right_wheel had 0 children
[robot_state_publisher-1] [INFO] [1702988150.253367756] [robot_state_publisher]: got segment base_footprint
[robot_state_publisher-1] [INFO] [1702988150.253457840] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1702988150.253472042] [robot_state_publisher]: got segment camera_link
[robot_state_publisher-1] [INFO] [1702988150.253482521] [robot_state_publisher]: got segment camera_link_optical
[robot_state_publisher-1] [INFO] [1702988150.253492593] [robot_state_publisher]: got segment caster_wheel
[robot_state_publisher-1] [INFO] [1702988150.253502422] [robot_state_publisher]: got segment chassis
[robot_state_publisher-1] [INFO] [1702988150.253512065] [robot_state_publisher]: got segment laser_frame
[robot_state_publisher-1] [INFO] [1702988150.253521801] [robot_state_publisher]: got segment left_wheel
[robot_state_publisher-1] [INFO] [1702988150.253531529] [robot_state_publisher]: got segment right_wheel
[twist_mux-2] [INFO] [1702988150.253417560] [twist_mux]: Topic handler ‘topics.joystick’ subscribed to topic ‘cmd_vel_joy’: timeout = 0.500000s , priority = 100.
[twist_mux-2] [INFO] [1702988150.253767902] [twist_mux]: Topic handler ‘topics.navigation’ subscribed to topic ‘cmd_vel’: timeout = 0.500000s , priority = 10.
[twist_mux-2] [INFO] [1702988150.253950440] [twist_mux]: Topic handler ‘topics.tracker’ subscribed to topic ‘cmd_vel_tracker’: timeout = 0.500000s , priority = 20.
[INFO] [ros2_control_node-3]: process started with pid [15541]
[INFO] [spawner.py-4]: process started with pid [15543]
[INFO] [spawner.py-5]: process started with pid [15545]
[ros2_control_node-3] terminate called after throwing an instance of ‘pluginlib::LibraryLoadException’
[ros2_control_node-3] what(): According to the loaded plugin descriptions the class diffdrive_arduino/DiffDriveArduino with base class type hardware_interface::SystemInterface does not exist. Declared types are fake_components/GenericSystem test_hardware_components/TestSystemCommandModes test_hardware_components/TestTwoJointSystem test_system turtlebot3_manipulation_hardware/TurtleBot3ManipulationSystemHardware
[spawner.py-4] [INFO] [1702988154.738035052] [spawner_joint_broad]: Waiting for /controller_manager services
[spawner.py-5] [INFO] [1702988154.742421839] [spawner_diff_cont]: Waiting for /controller_manager services
[ERROR] [ros2_control_node-3]: process has died [pid 15541, exit code -6, cmd ‘/opt/ros/foxy/lib/controller_manager/ros2_control_node --ros-args --params-file /tmp/launch_params_i511tc0_ --params-file /home/omar/colcon_ws/install/articubot_one/share/articubot_one/config/my_controllers.yaml’].
[spawner.py-4] [INFO] [1702988156.754901118] [spawner_joint_broad]: Waiting for /controller_manager services
[spawner.py-5] [INFO] [1702988156.758037875] [spawner_diff_cont]: Waiting for /controller_manager services
[spawner.py-4] [INFO] [1702988158.770261931] [spawner_joint_broad]: Waiting for /controller_manager services
[spawner.py-5] [INFO] [1702988158.773408347] [spawner_diff_cont]: Waiting for /controller_manager services
[spawner.py-4] [INFO] [1702988160.788893056] [spawner_joint_broad]: Waiting for /controller_manager services
[spawner.py-5] [INFO] [1702988160.791728848] [spawner_diff_cont]: Waiting for /controller_manager services
[spawner.py-4] [INFO] [1702988162.807066439] [spawner_joint_broad]: Waiting for /controller_manager services
[spawner.py-5] [INFO] [1702988162.811132170] [spawner_diff_cont]: Waiting for /controller_manager services
[spawner.py-4] [ERROR] [1702988164.823391319] [spawner_joint_broad]: Controller manager not available
[spawner.py-5] [ERROR] [1702988164.828567043] [spawner_diff_cont]: Controller manager not available
[ERROR] [spawner.py-4]: process has died [pid 15543, exit code 1, cmd ‘/opt/ros/foxy/lib/controller_manager/spawner.py joint_broad --ros-args’].
[ERROR] [spawner.py-5]: process has died [pid 15545, exit code 1, cmd ‘/opt/ros/foxy/lib/controller_manager/spawner.py diff_cont --ros-args’].
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
[twist_mux-2] [INFO] [1702988175.110388053] [rclcpp]: signal_handler(signal_value=2)
[robot_state_publisher-1] [INFO] [1702988175.110824006] [rclcpp]: signal_handler(signal_value=2)
[INFO] [robot_state_publisher-1]: process has finished cleanly [pid 15503]
[INFO] [twist_mux-2]: process has finished cleanly [pid 15505]

Hi Josh ,
I’m having the same issue like others with controller manager some how is not working .
I’ve been stuck in this for 4 days now with no luck ! any chance you recommend something ? I echo /cmd_vel_unstamped in robot and I can see the values passing
[spawner-4] [INFO] [1703827838.665064167] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-5] [INFO] [1703827838.785338511] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [INFO] [1703827840.711671532] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-5] [INFO] [1703827840.828404607] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [INFO] [1703827842.760930707] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-5] [INFO] [1703827842.877129094] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [INFO] [1703827844.805368341] [spawner_joint_broad]: Waiting for ‘/controller_manager’ node to exist
[spawner-5] [INFO] [1703827844.923151119] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[spawner-4] [ERROR] [1703827846.646826040] [spawner_joint_broad]: Controller manager not available
[spawner-5] [ERROR] [1703827846.763479498] [spawner_diff_cont]: Controller manager not available
[ERROR] [spawner-4]: process has died [pid 7297, exit code 1, cmd ‘/opt/ros/humble/lib/controller_manager/spawner joint_broad --ros-args’].
[ERROR] [spawner-5]: process has died [pid 7299, exit code 1, cmd ‘/opt/ros/humble/lib/controller_manager/spawner diff_cont --ros-args’].

Also I ran controller_manager and no connection
ros2 run controller_manager spawner diff_cont
[INFO] [1703828709.701625640] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[INFO] [1703828711.722023739] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[INFO] [1703828713.742430911] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[INFO] [1703828715.764174999] [spawner_diff_cont]: Waiting for ‘/controller_manager’ node to exist
[ERROR] [1703828717.784713751] [spawner_diff_cont]: Controller manager not available
[ros2run]: Process exited with failure 1