tl;dr:如何使用ROS MoveIt向6自由度机器人手臂发送“移动到(x、y、z、滚动、俯仰、偏航)”命令?
我正在尝试使用Python移动组界面,用ROS和MoveIt控制通用机器人UR5 6自由度机械臂。我缺少基本的“如何将机器人末端执行器发送到此点”控制。我把“末端效应器”解释为机器人末端的“手”。直观地说,我希望使用以下方法移动末端效应器:
pose_goal.position.x = x_coordinate # x, y, z, r, p, y are in a fixed reference frame
pose_goal.position.y = y_coordinate
pose_goal.position.z = z_coordinate
pose_goal.orientation.roll = roll_angle
pose_goal.orientation.pitch = pitch_angle
pose_goal.orientation.yaw = yaw_angle
move_group.set_pose_target(pose_goal)
plan = move_group.go(wait=True)
但是,geometry_msgs.msg.Pose()对象需要格式为(x,y,z,w)的四元数
我做过/研究过的一些事情:
其他一些信息:
问题
正确,四元数仅描述帧的方向;您还需要指定帧的位置,以获得完整的姿势。四元数只是描述物体方向的一种不同方法,另一种方法是,正如您已经提到的,使用欧拉角(偏航、俯仰、滚动)
在使用}设置{}的组件(注意{}、{}和{}四元数的部分与位置向量不同,它们是不同的东西)。一旦定义了{}和{}您就完成了,您就有了一个完整的姿势,可以发送给MoveIt!来计划和执行
pose_goal
对象的情况下,需要通过设置x
、y
和z
组件(即机器人在三维空间中的位置)来指定所需/目标机器人姿势的位置,然后还需要使用四元数表示法w
、x
来指定所需/目标机器人姿势的方向y
和{这里,
x, y, z
是你的位置向量,它与方向无关(因此与四元数无关),所以你的问题应该是,“我能把欧拉角(横摇、俯仰、偏航)转换成四元数吗?”答案是,你可以将欧拉角转换成四元数,但这可能很棘手。如果你可以用四元数来表示方向(即,如果你已经有了这个信息),你应该使用它,因为四元数在数值上更稳健,而且不会出现奇异现象(例如,欧拉角可能导致万向节锁,在特定配置下,系统会失去一定的自由度)如果您有权访问四元数,请使用它并忘记Euler角度,否则您可能希望尝试使用ROS的
tf
库使用以下方法将Euler角度转换为四元数:请参见^{} ,其中
ai
、aj
、ak
分别为横摇、俯仰和偏航,axes
参数定义了应用角度的顺序(这非常重要)(我自己还没有测试过,但可能值得一试)
四元数有点复杂,但有一个很棒的视频here以互动的方式解释它们。一般来说,根据我的经验,四元数在开始时可能有点令人沮丧,你可能会发现最初很难掌握这个概念,所以在研究它们时请记住这一点,并保持耐心
相关问题 更多 >
编程相关推荐