博士:如何使用ROS MoveIt发送一个6自由度的机器人手臂“移动到(x,y,z,滚,俯仰,偏航)”命令?
我正试图使用,用ROS和MoveIt控制一个通用机器人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)的四元数。
我做过/研究过的一些事情:
其他信息:
问题
发布于 2020-03-24 22:10:38
我的研究表明,四元数的形式(x,y,z,w)只描述3D空间中的旋转。如果机器人只获得旋转信息,它如何知道移动到哪个位置?
正确,四元数只描述框架的方向;您还需要指定框架的位置才能有完整的姿态。四元数只是一个不同的方式来描述一个物体的方向,另一种方式是,正如你已经提到的,使用欧拉角(偏航,音调,滚动)。
在使用pose_goal对象的情况下,您需要通过设置pose_goal.position的x、y和z组件(这是机器人在3D空间中的位置)来指定期望的/目标机器人姿态的位置,然后使用四元数表示法w、x、y和z来设置pose_goal.orientation的组件(注意x、y和d14部分与您的位置向量不相同)来指定所需的机器人/目标机器人姿态的方向。一旦你同时定义了pose_goal.position和pose_goal.orientation,你就有了一个完整的姿势,可以发送到MoveIt!计划和执行。
我能从(x,y,z,滚,俯仰,偏航)转换成四元数吗?或者这些描述了两种不同的东西?
在这里,x, y, z,你的位置矢量与方向无关(因此与四元数无关),所以你的问题应该是,“我能把欧拉角(滚动,俯仰,偏航)转换成四元数吗?”答案是,是的,你可以把欧拉角转换成四元数,但这可能很棘手。如果您可以使用四元数表示方向(即,如果您已经有此信息),您应该使用它,因为四元数更健壮,而且它们没有奇异性(例如,欧拉角可能导致Gimbal锁,在特定的配置下,系统失去了一定程度的自由度)。
如果您可以访问四元数,使用它并忘记欧拉角,否则您可能想尝试使用ROS的tf库使用以下方式将欧拉角转换为四元数:
from tf.transformations import quaternion_from_euler
# Pose Position
pose_goal.position.x = x_coordinate
pose_goal.position.y = y_coordinate
pose_goal.position.z = z_coordinate
# Pose Orientation
quaternion = quaternion_from_euler(roll_angle, pitch_angle, yaw_angle)
pose.orientation.x = quaternion[0]
pose.orientation.y = quaternion[1]
pose.orientation.z = quaternion[2]
pose.orientation.w = quaternion[3]
move_group.set_pose_target(pose_goal)
plan = move_group.go(wait=True)参见tf.transformations.quaternion_from_euler(ai, aj, ak, axes='sxyz'),其中ai、aj、ak分别为滚动、俯仰和偏航,axes参数定义了应用角度的顺序(这非常重要)。
(还没有亲自测试过,但可能值得一试)
有人能用四元数(4D)来解释旋转(3D)的外行术语吗?
四元数是有点复杂,但有一个伟大的视频这里解释他们的互动方式。一般来说,在我的经验中,四元数在一开始可能会有点令人沮丧,你可能会发现最初很难理解这个概念,所以在学习时要记住这一点,并且要有耐心!
https://stackoverflow.com/questions/60840019
复制相似问题