This repository supports the development and control of the SOLO12 robot from the Open Dynamic Robot Initiative, leveraging the ros2_control framework. It includes essential packages for robot description, control, and simulation, providing a foundational structure to work with SOLO12 in ROS 2.
After cloning the repository, navigate to your workspace source directory and execute the following command to install dependencies:
rosdep install --from-paths src --ignore-src -r -yThis will ensure that all required dependencies are installed for seamless operation.
In short, ros2_control is a control framework for ROS 2. But actually, it is much more—it's the kernel of the ROS 2 system that controls robots:
- 🏗 Hardware Abstraction: It abstracts hardware and low-level control for frameworks such as MoveIt2 and Nav2.
- 🔄 Resource Management: Manages access to robot hardware and resources.
- 📜 Lifecycle Control: Controls the lifecycle of robots and their hardware components.
For more details, check this presentation.
The repository is structured around the following main components:
📌 This package contains the URDF and XACRO files, defining the kinematics, visual, and collision properties of the SOLO12 robot.
📌 This package is responsible for launching the system, loading robot description files, and starting the necessary controllers.
To launch the system, execute the following command:
ros2 launch solo12_bringup solo12.launch.pyThis will bring up the SOLO12 system with the configured controllers. For more detailed information, including available launch arguments, please refer to the solo12_bringup package.
To view the SOLO12 robot model and move its joints using the Joint State Publisher GUI, execute:
ros2 launch solo12_description view_solo12.launch.pyThis will load the robot's URDF and allow interaction with the robot's joints through Rviz2.
The ros2_control framework abstracts hardware and low-level control, providing resource management and lifecycle control for the robot. Key components include:
- 🛠 Controller Manager: Manages and loads controllers.
- 🎮 Controllers: Send commands to control the robot's joints.
- ⚙ Resource Manager: Manages hardware interfaces and resources.
- 🔌 Hardware Interface: Interfaces with physical or simulated hardware.
For testing and development, you can use the Mock Hardware Plugin to simulate robot hardware. This allows testing controllers and setup configurations without needing real hardware or simulation.
To run the system with mock hardware, use:
ros2 launch solo12_bringup solo12.launch.pyTo test the joint_trajectory_controller, run:
ros2 launch solo12_bringup controllers.launch.pyThis will launch the controller and publish goals using trajectory_msgs.msg.JointTrajectoryPoint.
Note: Delay between spawning controllers is usually not necessary, but may be useful in complex setups.
If you encounter the following warning after launching:
[WARNING] [launch_ros.actions.node]: Parameter file path is not a file: /path/to/source/install/solo12_bringup/share/solo12_bringup/config/solo12_controllers.yaml🔧 Fix:
1️⃣ Locate the solo12_controllers.yaml file from your source directory.
2️⃣ Copy it to the specified location:
cp /path/to/source/solo12_bringup/config/solo12_controllers.yaml /path/to/source/install/solo12_bringup/share/solo12_bringup/config/✅ Ensure you replace /path/to/source/ with the actual path where the solo12_controllers.yaml file is located.
This should resolve the warning and allow you to proceed with launching and using the SOLO12 robot system.
- solo12_bringup: Handles the system startup and controller management.
- solo12_description: Defines the robot's URDF and XACRO files.
For more detailed information about each package, please refer to the README files within the respective directories.
🚀 Happy coding with SOLO12! 🎉

