Controllers/Configuration
=========================
In this section, we will walk through configuring MoveIt! with the controllers on your robot. We will assume that your robot offers a ``FollowJointTrajectory`` action service for the arms on your robot and (optionally) a ``GripperCommand`` service for your gripper.
YAML Configuration
------------------
The first file to create is a YAML configuration file (call it *controllers.yaml* and place it in the *config* directory of your MoveIt! config directory). This will specify the controller configuration for your robot. Here's an example file for configuring a ``FollowJointTrajectory`` action controller for two different arms (left and right) and a ``GripperCommand`` gripper controller for two grippers ::
controller_list:
- name: r_arm_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
default: true
joints:
- r_shoulder_pan_joint
- r_shoulder_lift_joint
- r_upper_arm_roll_joint
- r_elbow_flex_joint
- r_forearm_roll_joint
- r_wrist_flex_joint
- r_wrist_roll_joint
- name: l_arm_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
default: true
joints:
- l_shoulder_pan_joint
- l_shoulder_lift_joint
- l_upper_arm_roll_joint
- l_elbow_flex_joint
- l_forearm_roll_joint
- l_wrist_flex_joint
- l_wrist_roll_joint
- name: gripper_controller
action_ns: gripper_action
type: GripperCommand
default: true
joints:
- l_gripper_joint
- r_gripper_joint
We will walk through the parameters for both types of controllers.
FollowJointTrajectory Controller Interface
------------------------------------------
The parameters are:
* *name*: The name of the controller. (See debugging information below for important notes).
* *action_ns*: The action namespace for the controller. (See debugging information below for important notes).
* *type*: The type of action being used (here FollowJointTrajectory).
* *default*: The default controller is the primary controller chosen by MoveIt! for communicating with a particular set of joints.
* *joints*: Names of all the joints that are being addressed by this interface.
GripperCommand Controller Interface
-----------------------------------
The parameters are:
* *name*: The name of the controller. (See debugging information below for important notes).
* *action_ns*: The action namespace for the controller. (See debugging information below for important notes).
* *type*: The type of action being used (here GripperCommand).
* *default*: The default controller is the primary controller chosen by MoveIt! for communicating with a particular set of joints.
* *joints*: Names of all the joints that are being addressed by this interface.
Create the Controller launch file
---------------------------------
Now, create the controller launch file (call it *robot_moveit_controller_manager.launch* where *robot* is the name of your robot - the robot name needs to match the name specified when you created your MoveIt! config directory).
Add the following lines to this file ::
MAKE SURE to replace *my_robot_name_moveit_config* with the correct path for your MoveIt! config directory.
Now, you should be ready to have MoveIt! talk to your robot.
Debugging Information
---------------------
The ``FollowJointTrajectory`` or ``GripperCommand`` interfaces on your robot must be communicating in the namespace: ``\name\action_ns``. In the above example, you should be able to see the following topics (using *rostopic list*) on your robot:
* /r_arm_controller/follow_joint_trajectory/goal
* /r_arm_controller/follow_joint_trajectory/feedback
* /r_arm_controller/follow_joint_trajectory/result
* /l_arm_controller/follow_joint_trajectory/goal
* /l_arm_controller/follow_joint_trajectory/feedback
* /l_arm_controller/follow_joint_trajectory/result
* /gripper_controller/gripper_action/goal
* /gripper_controller/gripper_action/feedback
* /gripper_controller/gripper_action/result
You should also be able to see (using *rostopic info topic_name*) that the topics are published/subscribed to by the controllers on your robot and also by the *move_group* node.
Links
=====
* Back to :moveit_website:`Moveit Tutorials `