Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

I think the key problem is that the example of rrbot uses a hardware interface of joint effort. If you want to implement MoveIt to it, you need to build a joint trajectory controller.

  • Add a trajectory controller to your robot:

rrbot_control/config/rrbot_control.yaml

arm_controller:
type: effort_controllers/JointTrajectoryController
joints:
   - joint1
   - joint2
constraints:
    goal_time: 0.0
    stopped_velocity_tolerance: 0.01
    joint1: {trajectory: 0.01, goal: 0.01}
    joint2: {trajectory: 0.01, goal: 0.01}
gains:
   joint1: {p: 100.0, d: 75.0, i: 0.0, i_clamp: 0.0}
   joint2: {p: 100.0, d: 25.0, i: 0.0, i_clamp: 0.0}
state_publish_rate:  100
action_monitor_rate: 100
stop_trajectory_duration: 0.0

notice that you should maunally setup these parameters to have a good performance, especially pid.

  • Remap the controller topic to MoveIt topic

    rrbot_gazebo/launch/rrbot_world.launch

    <remap from="/rrbot/arm_controller/follow_joint_trajectory" to="/joint_trajectory_action"/> <remap from="/rrbot/arm_controller/state" to="/feedback_states"/> <remap from="/rrbot/arm_controller/command" to="/joint_path_command"/>

If you just want to learn how to set-up MoveIt with a simple robot, I suggest you change the hardware interface to joint position interface. It's at the bottom of the description of rrbot. Tag hardwareInterface of joint and actuator both should be PositionJointInterface. And then in the joint trajectory controller, you don't have to tune pid any more.

Hope this would help.