View Demo · Report Bug · Request Feature
Table of Contents
This project provides a suite of ROS-based controllers for robotic systems, enabling precise motion control of chassis, shooter, gimbal, and action components. It supports omnidirectional and swerve drive kinematics, shooter wheel dynamics, gimbal pointing, and action command handling. Built on ROS Control and pluginlib, it offers modular, real-time safe control logic with YAML-based configuration, integrating Eigen for kinematic computations and leveraging TF2 for coordinate transformations.
- ROS Control Integration: Seamless integration with the ROS Control framework for modular and reusable controllers.
- Modular Controller Plugins: Supports plugin-based architecture for easy extensibility and runtime loading.
- Omni-directional Motion Support: Implements controllers for omnidirectional wheels with configurable geometry.
- Swerve Drive Kinematics: Advanced swerve drive control with independent module angle and speed control.
- Real-time Command Handling: Uses real-time safe buffers and control loops for deterministic behavior.
- Torque Limited Effort Control: Ensures safe operation by limiting torque based on physical constraints.
- Dynamic Reconfiguration Support: Allows runtime tuning of controller parameters.
- TF2-based Gimbal Control: Accurate coordinate transformation for 2-DOF gimbal control.
- Chassis Velocity Transformation: Transforms velocity commands from any coordinate frame to base frame.
- Multi-mode Shooter Control: Supports same-speed and differential-speed modes for robotic shooters.
Click to expand project structure
rc_controllers/
├── .clang-format
├── .clang-tidy
├── action_controller/
│ ├── CMakeLists.txt
│ ├── action_controller_plugins.xml
│ ├── package.xml
│ ├── include/
│ │ └── action_controller/
│ │ ├── action_controller.h
│ ├── src/
│ │ └── action_controller.cpp
│ └── test/
│ ├── test_action_controller.launch
│ └── test_action_controller.yaml
├── chassis_controllers/
│ ├── CMakeLists.txt
│ ├── chassis_controllers_plugins.xml
│ ├── package.xml
│ ├── include/
│ │ └── chassis_controllers/
│ │ ├── chassis_base.h
│ │ ├── omni.h
│ │ └── swerve.h
│ ├── src/
│ │ ├── chassis_base.cpp
│ │ ├── omni.cpp
│ │ └── swerve.cpp
│ └── test/
│ ├── test_omni.launch
│ ├── test_omni.yaml
│ ├── test_swerve.launch
│ └── test_swerve.yaml
├── rc_gimbal_controller/
│ ├── CMakeLists.txt
│ ├── package.xml
│ ├── rc_gimbal_controller_plugins.xml
│ ├── include/
│ │ └── rc_gimbal_controller/
│ │ ├── gimbal_base.h
│ ├── src/
│ │ └── gimbal_base.cpp
│ └── test/
│ ├── gimbal_config_template.yaml
│ └── load_controllers.launch
├── rc_shooter_controller/
│ ├── CMakeLists.txt
│ ├── package.xml
│ ├── rc_shooter_controller_plugins.xml
│ ├── include/
│ │ └── rc_shooter_controller/
│ │ ├── rc_shooter_controller.h
│ ├── src/
│ │ └── rc_shooter_controller.cpp
│ └── test/
│ ├── load_controller.launch
│ └── rc_shooter_controller_template.yaml
This is an example of how you may give instructions on setting up your project locally. To get a local copy up and running follow these simple steps.
- ROS Noetic or newer installed
- catkin workspace initialized
pluginlib
,controller_interface
,tf2
,Eigen3
,realtime_tools
installed
-
Clone the repository into your catkin workspace:
cd ~/catkin_ws/src git clone https://github.com/gdut-robocon/rc_controllers.git
-
Build the package:
cd ~/catkin_ws catkin_make
-
Source the setup file:
source devel/setup.bash
- Each controller supports YAML-based configuration for parameters such as wheel geometry, joint limits, publishing rate, and timeout.
- Example configuration files are provided in the
test/
directories of each controller package.
-
Launch the controller using the provided launch files in the
test/
directories. -
For example, to test the omni-directional controller:
roslaunch rc_controllers test_omni.launch
-
Controllers can be dynamically reconfigured using
dynamic_reconfigure
. -
Controllers can be loaded via
controller_manager
and configured using YAML files.
- Add support for differential drive controllers
- Enhance shooter controller with PID-based speed control
- Implement advanced trajectory tracking for chassis controllers
- Add simulation support in Gazebo
- Improve documentation and add tutorials
See the open issues for a full list of proposed features (and known issues).
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Copyright © 2024-2025 rc_controllers.
Released under the MIT license.
Email: jialonglongliu@gmail.com
Project Link: https://github.com/gdut-robocon/rc_controllers
- ROS community for providing the ROS Control framework
- Eigen developers for high-performance linear algebra library
- TF2 developers for coordinate transformation utilities
- Contributors and users of this project