Open Discussion: Solo12 integration with ROS/ROS2

Hello everyone,

I am currently working on integrating the Solo12 with Gazebo and ROS, specifically using CHAMP (GitHub - chvmp/champ: 𓃡 Quadruped Robot based on MIT Cheetah I), which is the most documented ROS quadruped project out there to my knowledge.

I wanted to open a discussion about this, and to hear what others have done to integrate the robot with ROS or ROS2. There is not much information out there so it can be a good idea to consolidate it here.

As for a working Gazebo simulation, I am currently using the champ_setup_assistant along with the URDF I found in robot_properties_solo in order to implement the CHAMP controller in Gazebo. I believe there are some modifications needed in the URDF in order for CHAMP to work with it.

Has anyone done any related work? What do you think the best route to control solo12 with ROS at a high level is?


1 Like

Pro tip: I would use ISAAC sim rather than Gazebo.
Nobody uses ROS/ROS2 to control the joints because its too slow. It is usually used on higher level for things like navigation.
Solo 12 controller you have to build your own and make sure it will run in hard real-time computing. ROS/ROS2 is not got for hard real-time computing. Controllers there are plenty methods and plenty of classes avaiable online. The Solo12 is made to study and develop those controllers affordably compared to other quadrupeds. I dont think people use Solo12 for stuff like navigation, planning … It lacks the torque to carry sensors and battery. Mini-Cheetah is way more suitable and is only around 7,000 usd.
Here is the Roscon video:

Isaac Sim example with quadrupeds by Eth Zurich

I will follow your thread, it could be great and useful too! Waiting for someone and hoping it could be done! Even if it will not be easy due to real-time problems, I guess I will try.
Moreover, I suggest you visit this repo and this website, the Solo yaml configuration has to be improved even in the simulation, but in the future, it could be a nice approach.

Just to let you know that we are currently working on a ROS-2 implementation with ros2-control for Bolt
The current status is here: GitHub - stack-of-tasks/ros2_control_bolt
There is still some work to do to have a first working prototype. A master student is currently working on it (documenting and understanding). But normally after that you should be able to plug any ros2_controlller you want. Having real-time capabilities should not be a problem as the node starting the control is not making control communication through ROS.
This is how it is done on the PAL-Robotics TALOS robot at 2 KHz (but with ROS-1).
Once this work on Bolt going to Solo should not be too difficult.

All the best,
Olivier Stasse.


I have a quadruped robot too and looked at CHAMP. I think it is the wrong way to go. I plan to use ROS2 but my robot will look like just one node. It wil be a ase controller and accept wo kinds of messages

  1. command valoicty that has (velocity_x, Velocity_y, rotation_rate_about_Z) Normal the robot turns a corner by walking forward in Y rite rotatiing about Z.

  2. command_pose. This has 6 feids and describs the robot’s body realive to a “nutral” leg pose
    (translation_x, trans_y, trans_z, roll, pitch, yaw)
    “translation” is basically a lean butwith no body tilt.

The robot accept a stream of these two messages. Altogether these are 9 floating point values. Your firse experiment with ROS is to write a node that takes 9 values from an X-Box controller and pubishes them. Your robot is the subscriber.

Later you get the robot is send data back, odometry an TF and then housekeeping data like battery state and so on.