tl;dr:如何使用 ROS MoveIt 向 6 DOF 机器人手臂发送“移动到(x、y、z、roll、pitch、yaw)”命令?
我正在尝试使用 Python 移动组接口控制带有 ROS 和 MoveIt 的 Universal Robots 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) 的四元数。
我做过/研究的一些事情:
其他一些信息:
- 在 Ubuntu 18.04 上运行 ROS Melodic
- 在 RViz 和 Gazebo 中模拟 UR5 机械臂但也有物理手臂
问题
- 我的研究表明,形式为 (x, y, z, w) 的四元数仅描述 3D 空间中的旋转。如果只获取旋转信息,机器人如何知道要移动到哪个位置?
- 我可以从 (x, y, z, roll, pitch, yaw) 转换为四元数吗?还是那些描述了两种不同的事物?
- 是否必须对四元数进行归一化以使平方和等于 1?如果是这样,我怎样才能告诉我的机器人手臂去空间中的一个物理点,比如(0.5m,0.3m,0m)?
- 有人可以提供用四元数(4D)描述旋转(3D)的外行术语解释吗?