Package Summary

Tags No category tags.
Version 0.1.7
License BSD
Build type CATKIN

Repository Summary

Checkout URI
VCS Type git
VCS Version master
Last Updated 2022-09-22
CI status No Continuous Integration
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

RoboMaster standard robot Shooter controller

Additional Links

No additional links.


  • Qiayuan Liao


  • Qiayuan Liao



The rm_shooter_controller has four states: STOP, READY, PUSH, and BLOCK, it controls the left and right friction wheels and the trigger wheel through PID algorithm according to the command. It can set the bullet speed by setting the angular velocity of the friction wheel, and at the same time realizes the block detection.

Keywords: ROS, robomaster, shooter


The source code is released under a BSD 3-Clause license.

Author: DynamicX
Affiliation: DynamicX
Maintainer: DynamicX

The rm_shooter_controller package has been tested under ROS Melodic and Noetic on respectively 18.04 and 20.04. This is research code, expect that it changes often and any fitness for a particular purpose is disclaimed.

Hardware interface type

  • JointStateInterface Used to obtain the speed of friction wheel and trigger wheel and the position of trigger wheel.
  • EffortJointInterface Used to send torque commands for friction wheels and trigger wheel.


Installation from Packages

To install all packages from this repository as Debian packages use

sudo apt-get install ros-noetic-rm-shooter-controllers

or better use rosdep:

sudo rosdep install --from-paths src


  • roscpp
  • rm_common
  • effort_controllers
  • dynamic_reconfigure


  • shooter.cfg: Add parameters related to friction wheel's angular velocity corresponding to each bullet speed and trigger block detection parameters.


Subscribed Topics

  • command (rm_msgs/ShootCmd)

Commands of controller state, bullet speed, frequency of shooting.


  • block_effort, block_speed, block_duration (double)

When the torque of the trigger motor is greater than block_effort (in N·m), and the angular velocity of trigger motor is less than block_speed (in rad/s), it will be regarded as blocking if it continues for block_duration (in s), and the the state of shooter controller will switch to BLOCK.

  • block_overtime (double)

If the time to enter BLOCK state exceeds block_overtime (in s), the state of shooter controller will switch to PUSH.

  • anti_block_angle (double)

If shooter controller enter BLOCK state, the friction wheel will reverse anti_block_angle (in rad) to try to get rid of blocking. When the friction wheel get rid of BLOCK state successfully, the state of shooter controller will switch to PUSH.

  • anti_block_threshold (double)

If the anti angle of the friction wheel exceeds anti_block_threshold (in rad), it means that friction wheel reverse successfully.

  • qd_10, qd_15, qd_18, qd_30 (double)

These parameters mean the friction wheel's angular velocity, the number of it's name expresses different bullet speeds (in m/s).

Controller configuration examples

Complete description

    type: rm_shooter_controllers/Controller
    publish_rate: 50
      joint: "left_friction_wheel_joint"
      pid: { p: 0.001, i: 0.01, d: 0.0, i_clamp_max: 0.01, i_clamp_min: -0.01, antiwindup: true, publish_state: true }
      joint: "right_friction_wheel_joint"
      pid: { p: 0.001, i: 0.01, d: 0.0, i_clamp_max: 0.01, i_clamp_min: -0.01, antiwindup: true, publish_state: true }
      joint: "trigger_joint"
      pid: { p: 50.0, i: 0.0, d: 1.5, i_clamp_max: 0.0, i_clamp_min: 0.0, antiwindup: true, publish_state: true }
    push_per_rotation: 8
    push_qd_threshold: 0.90
    block_effort: 0.95
    block_duration: 0.05
    block_overtime: 0.5
    anti_block_angle: 0.2
    anti_block_threshold: 0.1
    qd_15: 460.0
    qd_18: 515.0
    qd_30: 740.0

Bugs & Feature Requests

Please report bugs and request features using the Issue Tracker .


Changelog for package rm_shooter_controllers

0.1.7 (2022-09-10)

  • Try two fix double shoot
  • Merge remote-tracking branch \'origin/master\'
  • Fix bug of shooting if statement
  • Contributors: qiayuan

0.1.6 (2022-06-16)

  • Merge remote-tracking branch \'origin/master\'
  • Contributors: qiayuan

0.1.5 (2022-06-10)

  • Add hz counting in trigger test mode.
  • Merge remote-tracking branch \'origin/master\'
  • Add testing option to shooter for testing the trigger without friction wheel
  • 0.1.4
  • Merge branch \'master\' into gimbal_track
  • Merge pull request #45 from mlione/master Delete some config files in rm_controllers.
  • Delete some config files in rm_controller.
  • Merge pull request #46 from ye-luo-xi-tui/master Deprecated imu_filter_controller
  • Contributors: BruceLannn, QiayuanLiao, YuuinIH, mlione, qiayuan, yezi

0.1.3 (2022-03-28)

  • Merge branch \'master\' into forward_feed
  • Merge pull request #40 from ye-luo-xi-tui/maintain Delete configuration of robot_state_controller in each of controllers\' config file
  • Merge branch \'master\' into maintain # Conflicts: # rm_chassis_controllers/config/standard3.yaml
  • Merge pull request #41 from ye-luo-xi-tui/standard3 Update standard3 config
  • Delete configuration of robot_state_controller in each of controllers\' config file
  • Merge branch \'master\' into standard3
  • Update standard3 config
  • Merge remote-tracking branch \'origin/master\'
  • Contributors: QiayuanLiao, qiayuan, ye-luo-xi-tui, yezi

0.1.2 (2022-01-08)

  • Merge branch \'master\' of
  • Merge branch \'gimbal/opti_or_simplify\' into chassis/balance_imu_interface
  • Update the config of rm_shooter_controller, load only one controller on launch instead of spawn controllers
  • Merge branch \'master\' into chassis/fix_filter
  • Merge remote-tracking branch \'origin/master\'
  • Merge branch \'namespace\' # Conflicts: # rm_chassis_controllers/
  • Merge pull request #15 from ye-luo-xi-tui/namespace Change name of namespace:from hardware_interface to rm_control
  • Change name of namespace:from hardware_interface to rm_control.
  • Merge pull request #8 from Edwinlinks/master Update in rm_shooter_controller
  • Update the format of Bugs & Feature Requests in rm_shooter_controller
  • Fix LICENSE url
  • Update the format of Bugs & Feature Requests in rm_shooter_controller
  • Update the in rm_shooter_controller
  • Use "pragma once" in rm_shooter_controllers headers instead of include guards.
  • Correct dependencies and interface type.
  • Correct some shooter param\'s description.
  • Simplify shooter
  • Update shooter param\'s description.
  • Correct readme format.
  • Correct readme format.
  • Update controllers README.
  • Merge remote-tracking branch \'origin/master\'
  • Update
  • Delet a space bar. Delet space bar after sudo rosdep install --from-paths src
  • Add some param\'s description
  • Update shooter controller\'s
  • Fix wrong naming \"include/rm_shooter_controller\"
  • Run pre-commit
  • Format rm_shooter_controllers using clang-format
  • Contributors: BruceLannn, QiayuanLiao, YuuinIH, chenzheng, link Edwin, qiayuan, yezi,

Wiki Tutorials

See ROS Wiki Tutorials for more details.

Source Tutorials

Not currently indexed.

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages


No message files found.


No service files found

Recent questions tagged rm_shooter_controllers at