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.
Controller don’t care which module (simulation or hardware) provide data.
Controller needs joint state info and joint command info.
Controller
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
controller_manager manages some controllers
controller_manager needs to load controllers.
<!– Load joint controller configurations from YAML file to parameter server –>
ROBOTICS made hardware_interface of dynamixel motor for ros-control.
Example
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.
output
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.