[ROS] What is ros-control




  • A set of packages that include controller interfaces, controller managers, transmissions and hardware_interfaces.
  • The ros_control packages are a rewrite of the pr2_mechanism packages to make controllers generic to all robots beyond just the PR2.
  • The ros_control packages takes as input the joint state data from your robot’s actuator’s encoders and an input set point. It uses a generic control loop feedback mechanism, typically a PID controller, to control the output, typically effort, sent to your actuators. ros_control gets more complicated for physical mechanisms that do not have one-to-one mappings of joint positions, efforts, etc but these scenarios are accounted for using transmissions.


There are some modules.

  • Controller manager
  • Controller
  • Hardware interface

ros control



Controller don’t care which module (simulation or hardware) provide data.

Controller needs joint state info and joint command info.



There are many controller on ros-control.

I used joint state_controller and joint_trajectory_controller for head control.

You need to set control parameter (PID gain, velocity_ff, etc.)

In control.yaml, head_controller has two joint (pan_joint and tilt_joint) and make trajectories.

Trajectories are specified as a set of waypoints to be reached at specific time instants, which the controller attempts to execute as well as the mechanism allows. Waypoints consist of positions, and optionally velocities and accelerations.



controller_manager manages some controllers

controller_manager needs to load controllers.

<!– Load joint controller configurations from YAML file to parameter server –>
<rosparam file=”$(find cam_pan_tilt)/config/control.yaml” command=”load”/>

<node name=”controller_spawner” pkg=”controller_manager” type=”spawner” respawn=”false”
output=”screen” ns=”/gretchen” args=”joint_state_controller




How to connect real robot

need to costruct hardware_inferface

It is hardware_interface example.

  • https://github.com/ros-controls/ros_control/wiki/hardware_interface

ROBOTICS made hardware_interface of dynamixel motor for ros-control.


1) Head Controller

Head controller control pan and tilt. input of the controller is tf, joint_states, head_controller/state

  • tf
    • tf is relationship between frames
    • tf is a package that lets the user keep track of multiple coordinate frames over time. tf maintains the relationship between coordinate frames in a tree structure buffered in time, and lets the user transform points, vectors, etc between any two coordinate frames at any desired point in time.

  • joint_states
    • it is raw data from motor controller

  • head_controller/state
    • desired, actual, error check for control
    • it is calculated by controller.


  • head_controller/command
    • set radian postion at each joint

2) Other robot

You can easily control the robot manipulator using ros-control and moveit.

3) Simple pan title model

1. User click a point

2. make target_line using the point

Target_line consist of those

  • geometry_msgs/PointStamped target
  • geometry_msgs/Vector3 pointing_axis
  • string pointing_frame
  • duration min_duration
  • float64 max_velocity

3. calculate inverse kinematics for getting joint angles

4. publish angle on each joint

5. move

Why it is need?

Once control part constructed using ros-package.

Perception part focus recognition and just publish u,v.


  • http://wiki.ros.org/ros_control
  • http://gazebosim.org/tutorials/?tut=ros_control
  • http://wiki.ros.org/joint_trajectory_controller
  • https://pinkwink.kr/1013
  • https://github.com/ros-controls/ros_control/wiki/hardware_interface


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다