给JointTrajectoryPoint时,目标开始与当前姿势错误不匹配

时间:2018-10-02 21:30:54

标签: ros inverse-kinematics

我是ROS的新手。我的UR5在从ur_modern驱动程序执行test_move.py时遇到了问题。之后,当我尝试运行相同的代码test_move.py时,此错误始终弹出。 “目标开始与当前姿势不匹配”。我该如何解决?如果需要重新初始化关节,请指导我如何做?

我浏览了此链接(https://github.com/ros-industrial/ur_ ...),发现了一些线索,它说:每当计算轨迹时,请执行以下步骤:

  • 计算目标的IK。
  • 建立轨迹
  • 等待/ joint_states上的消息
  • 基于/ joint_state中的新值更新起始位置
  • 将轨迹发送给驾驶员

这会给我解决方案吗?但是,如何将初始状态添加到轨迹代码中?为什么我需要赋予与机器人姿势相同的初始状态。机器人应该能够向右移动到新位置。以下是我正在运行并收到错误的test_move.py代码:

def move1():
global joints_pos
g = FollowJointTrajectoryGoal()
g.trajectory = JointTrajectory()
g.trajectory.joint_names = JOINT_NAMES
try:
    joint_states = rospy.wait_for_message("joint_states", JointState)
    joints_pos = joint_states.position
    g.trajectory.points = [
        JointTrajectoryPoint(positions=joints_pos, velocities=[0]*6, time_from_start=rospy.Duration(0.0)),
        JointTrajectoryPoint(positions=Q1, velocities=[0]*6, time_from_start=rospy.Duration(2.0)),
        JointTrajectoryPoint(positions=Q2, velocities=[0]*6, time_from_start=rospy.Duration(3.0)),
        JointTrajectoryPoint(positions=Q3, velocities=[0]*6, time_from_start=rospy.Duration(4.0))]
    client.send_goal(g)
    client.wait_for_result()
except KeyboardInterrupt:
    client.cancel_goal()
    raise
except:
    raise

def main():
global client
try:
    rospy.init_node("test_move", anonymous=True, disable_signals=True)
    client = actionlib.SimpleActionClient('follow_joint_trajectory', FollowJointTrajectoryAction)
    print "Waiting for server..."
    client.wait_for_server()
    print "Connected to server"
    parameters = rospy.get_param(None)
    index = str(parameters).find('prefix')
    if (index > 0):
        prefix = str(parameters)[index+len("prefix': '"):(index+len("prefix': '")+str(parameters)[index+len("prefix': '"):-1].find("'"))]
        for i, name in enumerate(JOINT_NAMES):
            JOINT_NAMES[i] = prefix + name
    print "This program makes the robot move between the following three poses:"
    print str([Q1[i]*180./pi for i in xrange(0,6)])
    print str([Q2[i]*180./pi for i in xrange(0,6)])
    print str([Q3[i]*180./pi for i in xrange(0,6)])
    print "Please make sure that your robot can move freely between these poses before proceeding!"
    inp = raw_input("Continue? y/n: ")[0]
    if (inp == 'y'):
        #move1()
        move_repeated()
        #move_disordered()
        #move_interrupt()
    else:
        print "Halting program"
except KeyboardInterrupt:
    rospy.signal_shutdown("KeyboardInterrupt")
    raise

0 个答案:

没有答案