Robotics StackExchange | Archived questions

send realtime data to moveit teleoperate robot

Hello, I have designed a master device to control robot. I want to use moveit to do motion planning. I want to send three dof. position data to robot end-effector . I have write a talker node to send the data, and I need another listener code to receive this data and send to moveit. I attached my code here.

#!/usr/bin/env python
import sys
import moveit_commander
import moveit_msgs.msg
import geometry_msgs.msg
import rospy
from geometry_msgs.msg import Twist

vx = 0
vy = 0
vz = 0

def callback(data):
rospy.loginfo(data.linear)
global vx,vy,vz
vx = data.linear.x
vy = data.linear.y
vz = data.linear.z

def main():
moveit_commander.roscpp_initialize(sys.argv)
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("fi", Twist, callback)
robot = moveit_commander.RobotCommander()
scene = moveit_commander.PlanningSceneInterface()
group = moveit_commander.MoveGroupCommander("manipulator")
display_trajectory_publisher = rospy.Publisher(
    '/move_group/display_planned_path',
    moveit_msgs.msg.DisplayTrajectory)
print robot.get_group_names()
print "============ Printing robot state"
print robot.get_current_state()
## Planning to a Pose goal:
print "============ Generating plan 1"
current_pose = group.get_current_pose().pose
rospy.loginfo('current_pose: {}'.format(current_pose))
pose_target = geometry_msgs.msg.Pose()
pose_target.orientation.w = current_pose.orientation.w
pose_target.orientation.x = current_pose.orientation.x
pose_target.orientation.y = current_pose.orientation.y
pose_target.orientation.z = current_pose.orientation.z
pose_target.position.x = current_pose.position.x + vx/10
pose_target.position.y = current_pose.position.y + vy/10
pose_target.position.z = current_pose.position.z + vz/10
group.set_pose_target(pose_target)
plan1 = group.plan()
group.go(wait=True)
moveit_commander.roscpp_shutdown()
print "stop"
rospy.spin()

if __name__ == '__main__':
print "Program start listerning..."
main()

I hope the moveit could read my read-time data of vx, vy and vz, then send these to current position. Then I could achieve remote control by my device. Now the running result is:

 Program start listerning...
[ INFO] [1508329377.270614560]: Loading robot model 'abb_irb120_3_58'...
    [rospack] Error: package 'abb_irb120_support' not found
    [librospack]: error while executing command
    [ERROR] [1508329377.306347223]: Error retrieving file [package://abb_irb120_support/meshes/irb120_3_58/collision/base_link.stl]: Package [abb_irb120_support] does not exist
    [rospack] Error: package 'abb_irb120_support' not found
    [librospack]: error while executing command
    [ERROR] [1508329377.326927698]: Error retrieving file [package://abb_irb120_support/meshes/irb120_3_58/visual/base_link.stl]: Package [abb_irb120_support] does not exist
    [rospack] Error: package 'abb_irb120_support' not found
    [librospack]: error while executing command
    [ERROR] [1508329377.349068945]: Error retrieving file [package://abb_irb120_support/meshes/irb120_3_58/collision/link_1.stl]: Package [abb_irb120_support] does not exist
    [rospack] Error: package 'abb_irb120_support' not found
    [librospack]: error while executing command
...
      [ WARN] [1508329377.983231280]: No geometry is associated to any robot links
       [ WARN] [1508329377.983386064]: The root link base_link has an inertia specified in the URDF, but KDL does not support a root link with an inertia.  As a workaround, you can add an extra dummy link to your URDF.
        Traceback (most recent call last):
          File "moveit_listener3.py", line 58, in <module>
            main()
          File "moveit_listener3.py", line 27, in main
            group = moveit_commander.MoveGroupCommander("manipulator")
          File "/opt/ros/kinetic/lib/python2.7/dist-packages/moveit_commander/move_group.py", line 51, in __init__
            self._g = _moveit_move_group_interface.MoveGroupInterface(name, robot_description)
        RuntimeError: Unable to connect to move_group action server 'move_group' within allotted time (5s)
       [INFO] [1508329926.239926]: x: 0.0
        y: 0.0
        z: 0.0
        [INFO] [1508329926.242838]: x: 0.0
        y: 0.0
        z: 0.0
        [INFO] [1508329926.243337]: x: 0.0
        y: 0.0
        z: 0.0
    ...

The moveit_config file was download online and the launch file could run and show robot in Rviz. I don't know why it always show the error of package don't exist. I am a new learner to both moveit and python. Could anyone help me to check what's wrong with the code, this is not the result I want. I hope the streaming data of x,y,z could control robot movement.

Thank you in advance.

Asked by huang on 2017-10-18 21:05:12 UTC

Comments

Answers