1 任务描述
在使用Moveit对机械臂运动进行规划时,我们定义Pose,然后规划,目标位姿Pose的定义代码如下:
target_pose = PoseStamped()
target_pose.header.frame_id = reference_frame
target_pose.header.stamp = rospy.Time.now()
target_pose.pose.position.x = -0.545
target_pose.pose.position.y = 0.426
target_pose.pose.position.z = 0.267
target_pose.pose.orientation.x = -0.628
target_pose.pose.orientation.y = 0.226
target_pose.pose.orientation.z = 0.708
target_pose.pose.orientation.w = 0.230
2 错误表现
这里面xyz的定义是没有问题的,但是姿态这么定义有问题,查看源代码这里的orientation是单位四元数的表示,然而规划也总是失败的。具体表现为无论你定义为多少姿态总是运动到四元数为[0 0 0 1]的姿态位置。就是下面这个姿态
3 原因分析
经过查找原因是数据格式问题,我具体的操作方法是在rviz界面拖动机械臂到预定位置,然后使用 tf_echo 查看坐标变换数值,然后把这个Quaternion数值输入上面定义的位置,如下图

在使用Moveit进行机械臂运动规划时,发现无论设定何种姿态,机械臂总是回到四元数[0 0 0 1]的状态。问题源于rviz中拖动机械臂获取的四元数数据只保留了三位小数,而非实际需要的八位小数。解决方案是通过rviz规划并执行后,获取精确的RPY数值,转换为四元数后用于姿态设定。
最低0.47元/天 解锁文章
2552

被折叠的 条评论
为什么被折叠?



