ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

I would suggest to use ros_control. It's a bit of a learning curve, but the "only" think you'd need to do is write a hardware_interface that knows how to pass on (fi) position setpoints to your industrial servo motor using whatever mechanism (a fieldbus, serial, TCP/IP, UDP, whatever).

After you have that, all the rest (action server, position control, etc) is already done for you.

You then just have to configure a joint_trajectory_action controller on top of your hardware_interface and that's it.

Now treat that as you do the Action server that your robot driver provides you with, configure MoveIt to use it (just as in your OP) and things should start working.


Note that doing things like this -- with separate drivers -- will make true synchronous motion execution impossible, as there are too many asynchronous things going on. If you need synchronous execution, you could look into combined_robot_hw.

I would suggest to use ros_control. It's a bit of a learning curve, but the "only" think thing you'd need to do is write a hardware_interface that knows how to pass on (fi) position setpoints to your industrial servo motor using whatever mechanism (a fieldbus, serial, TCP/IP, UDP, whatever).

After you have that, all the rest (action server, position control, etc) is already done for you.

You then just have to configure a joint_trajectory_action controller on top of your hardware_interface and that's it.

Now treat that as you do the Action server that your robot driver provides you with, configure MoveIt to use it (just as in your OP) and things should start working.


Note that doing things like this -- with separate drivers -- will make true synchronous motion execution impossible, as there are too many asynchronous things going on. If you need synchronous execution, you could look into combined_robot_hw.

I would suggest to use ros_control. It's a bit of a learning curve, but the "only" thing you'd need to do is write a hardware_interface that knows how to pass on (fi) position setpoints to your industrial servo motor using whatever mechanism (a fieldbus, serial, TCP/IP, UDP, whatever).

After you have that, all the rest (action server, position control, etc) is already done for you.

You then just have to configure a joint_trajectory_action controller on top of your hardware_interface and that's it.

Now treat that as you do the Action server that your robot driver provides you with, configure MoveIt to use it (just as in your OP) and things should start working.


Note that doing things like this -- with separate drivers -- will make true synchronous motion execution impossible, as there are too many asynchronous things going on. If you need synchronous execution, you could look into combined_robot_hw.


Edit:

What I cant seem to figure out how the controller above defined here in ros_control_boilerplate/railrobot_control/config/railrobot_controllers.yaml, will communicate with the follow joint trajectory action server that will in turn connect to moveit.

You have this in your railrobot_controllers.yaml:

# Joint Trajectory Controller -------------------------------
# For detailed explanations of parameter see http://wiki.ros.org/joint_trajectory_controller
position_trajectory_controller:
   type: position_controllers/JointTrajectoryController
   # These joints can likely just be copied from the hardware_interface list above
   joints:
      - rail_joint

This is the joint trajectory action server.

From wiki/joint_trajectory_controller - Sending trajectories - Available interfaces:

There are two mechanisms for sending trajectories to the controller: by means of the action interface or the topic interface.

See also Section 3.1.1 - Action interface.

I would suggest to use ros_control. It's a bit of a learning curve, but the "only" thing you'd need to do is write a hardware_interface that knows how to pass on (fi) position setpoints to your industrial servo motor using whatever mechanism (a fieldbus, serial, TCP/IP, UDP, whatever).

After you have that, all the rest (action server, position control, etc) is already done for you.

You then just have to configure a joint_trajectory_action controller on top of your hardware_interface and that's it.

Now treat that as you do the Action server that your robot driver provides you with, configure MoveIt to use it (just as in your OP) and things should start working.


Note that doing things like this -- with separate drivers -- will make true synchronous motion execution impossible, as there are too many asynchronous things going on. If you need synchronous execution, you could look into combined_robot_hw.


Edit:

What I cant seem to figure out how the controller above defined here in ros_control_boilerplate/railrobot_control/config/railrobot_controllers.yaml, will communicate with the follow joint trajectory action server that will in turn connect to moveit.

You have this in your railrobot_controllers.yaml:

# Joint Trajectory Controller -------------------------------
# For detailed explanations of parameter see http://wiki.ros.org/joint_trajectory_controller
position_trajectory_controller:
   type: position_controllers/JointTrajectoryController
   # These joints can likely just be copied from the hardware_interface list above
   joints:
      - rail_joint

This is the joint trajectory action server.

From wiki/joint_trajectory_controller - Sending trajectories - Available interfaces:

There are two mechanisms for sending trajectories to the controller: by means of the action interface or the topic interface.

See also Section 3.1.1 - Action interface.