weixin_42106414 2019-05-20 16:59 采纳率: 0%
浏览 1000

ROS机械臂运动规划中这段源码怎么理解?

创建一个允许的的抓取姿态列表

def make_grasps(self, initial_pose_stamped, allowed_touch_objects):
    # 初始化抓取姿态对象
    g = Grasp()

    # 创建夹爪张开、闭合的姿态
    g.pre_grasp_posture = self.make_gripper_posture(GRIPPER_OPEN)
    g.grasp_posture = self.make_gripper_posture(GRIPPER_CLOSED)

    # 设置期望的夹爪靠近、撤离目标的参数
    g.pre_grasp_approach = self.make_gripper_translation(0.01, 0.1, [1.0, 0.0, 0.0])
    g.post_grasp_retreat = self.make_gripper_translation(0.1, 0.15, [0.0, -1.0, 1.0])

    # 设置抓取姿态
    g.grasp_pose = initial_pose_stamped

    # 需要尝试改变姿态的数据列表
    pitch_vals = [0, 0.1, -0.1, 0.2, -0.2, 0.3, -0.3]
    yaw_vals = [0]

    # 抓取姿态的列表
    grasps = []

    # 改变姿态,生成抓取动作
    for y in yaw_vals:
        for p in pitch_vals:
            # 欧拉角到四元数的转换
            q = quaternion_from_euler(0, p, y)

            # 设置抓取的姿态
            g.grasp_pose.pose.orientation.x = q[0]
            g.grasp_pose.pose.orientation.y = q[1]
            g.grasp_pose.pose.orientation.z = q[2]
            g.grasp_pose.pose.orientation.w = q[3]

            # 设置抓取的唯一id号
            g.id = str(len(grasps))

            # 设置允许接触的物体
            g.allowed_touch_objects = allowed_touch_objects

            # 将本次规划的抓取放入抓取列表中
            grasps.append(deepcopy(g))

    # 返回抓取列表
    return grasps
  • 写回答

1条回答 默认 最新

  • dht99082 2022-01-03 20:12
    关注

    结合注释来看,整个函数一共传入了两个参数,分别是initial_pose_stamped和allowed_touch_objects,前者应该是目标的位置信息,后者可能是一个表示是否允许触碰的状态参数。最终的返回值是一个名为grasps的列表,列表中的每个元素是形式为Grasp()的类。其中根据已有的代码可以看出该类中有initial_pose_stamped决定机械臂运动目标点的数据 allowed_touch_objects是否允许接触物体的参数 grasp_pose.pose抓取姿态的参数 id 一个名字 这些值,其中除了grasp_pose.pose外全是直接赋值。而grasp_pose.pose则是由欧拉角所转化而来的四元数,其欧拉角为(0, p, y),其中只有p为设定变量,其中虽然不知道这里的欧拉角是采用哪一种表示方式,但因其只有一个变量,可以判断是绕某一轴旋转的七种姿态状态。总体推断,这是一个基于抓取点的尝试抓取任务规划程序的一部分。其输入抓取点的位置参数和一个控制参数后,可以返回一个存有七个到达该位置但末端执行器分别绕行其轴旋转不同角度的七个姿态信息。下一步可以将其与运动控制接口结合,对这七个位置进行抓取尝试,根据设定的allowed_touch_objects参数达到效果。我猜测这里应该是对于末端执行机构的力矩检测,力矩达到某值表示抓到物体。

    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值