鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    眼在手上输出应该是机械臂末端end_link与相机camera之间的位姿关系,为什么结果显示是end_link->marker

    已定时 已固定 已锁定 已移动
    手眼标定
    精度问题 为何算法之间结果差距如此之大?
    3
    7
    915
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 24714667862
      yanan
      最后由 2471466786 编辑

      博主您好,非常感谢您发布的手眼标定功能包和教程,已按照您的教程将handeye-calib功能包配置成功,并用base_hand_on_eye_calib.launch完成标定,但有以下疑问想要请教一下,以下是经过17组数据标定的结果。
      一、眼在手上输出应该是机械臂末端end_link与相机camera之间的位姿关系,为什么结果显示是end_link->marker?
      2024-04-10 19-47-58屏幕截图.png
      二、为何算法之间结果差距如此之大?
      三、相机中标定板位姿orientation(x,y,z,w)转RX,RY,RZ,下列代码正确吗?

      import math
      
      def quaternion_to_euler(x, y, z, w):
          # Roll (RX)
          roll = math.atan2(2*(w*x + y*z), 1 - 2*(x**2 + y**2))
          
          # Pitch (RY)
          pitch = math.asin(2*(w*y - z*x))
          
          # Yaw (RZ)
          yaw = math.atan2(2*(w*z + x*y), 1 - 2*(y**2 + z**2))
          
          # Convert angles from radians to degrees
          roll_deg = math.degrees(roll)
          pitch_deg = math.degrees(pitch)
          yaw_deg = math.degrees(yaw)
          
          return roll_deg, pitch_deg, yaw_deg
      
      # Example usage
      x = 0.9771264496922119
      y = 0.04967186030182394
      z = 0.021577803717608448
      w = -0.20564777166984738
      
      roll, pitch, yaw = quaternion_to_euler(x, y, z, w)
      print("Roll (RX):", roll)
      print("Pitch (RY):", pitch)
      print("Yaw (RZ):", yaw)
      
      小鱼小 B 2 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @2471466786
        最后由 编辑

        @2471466786

        1. 结果是末端到相机,应该是本人写错了
        2. 数据不准确一般是输入数据误差较大引起,请确保前置步骤的精度
        3. 姿态转换建议使用python库transforms3d ,我的其他文章有介绍https://blog.csdn.net/qq_27865227/article/details/124296609

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        24714667862 1 条回复 最后回复 回复 引用 0
        • 24714667862
          yanan @小鱼
          最后由 2471466786 编辑

          @小鱼 非常感谢您的回答!
          我发现一个错误,我在单独运行博主的手眼标定算法Tsai-Lenz代码时,与功能包中执行出来的结果完全不一致,问题是否出在base_hand_on_eye_calib.py文件中的第61行eye_on_hand=False。我将其已改为True,结果一致。
          2024-04-11 19-21-10屏幕截图.png
          如果发现错误请您谅解,万分感谢!

          小鱼小 1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @2471466786
            最后由 编辑

            @2471466786 需要注意的是,眼在手上和手外用的其实是同一套算法,只不过最后采用的数据不一样,原理相同。

            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            24714667862 1 条回复 最后回复 回复 引用 0
            • 24714667862
              yanan @小鱼
              最后由 2471466786 编辑

              @小鱼 非常感谢您的回答!
              我依旧有疑问,两种安装方式采用同一套算法,只和采用的数据有关,那为何将功能包中base_hand_on_eye_calib.py文件的eye_on_hand=False改成True,结果会出现如此大的差异?
              我是否可以认为如果采用功能包的话,依旧要注意eye_on_hand=False(True)的修改。

              小鱼小 1 条回复 最后回复 回复 引用 0
              • 小鱼小
                小鱼 技术大佬 @2471466786
                最后由 编辑

                @2471466786 这里是需要注意的,因为最后喂数据的方式不太一样

                新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                1 条回复 最后回复 回复 引用 0
                • B
                  bqpeng @2471466786
                  最后由 编辑

                  @2471466786 您好!请问为什么四种算法 的数值差距这么大呢?现在这个标定是得到了end_link和camera之间的关系!如果我现在通过相机得到一个标志点的位姿信息,那么我该如何去让机械臂到达这个位置呢?标志点基于相机的位姿标定得到的矩阵机械臂当前的末端位姿,是这样的大致逻辑吗?

                  1 条回复 最后回复 回复 引用 0
                  • 第一个帖子
                    最后一个帖子
                  皖ICP备16016415号-7
                  Powered by NodeBB | 鱼香ROS