两点计算机械手旋转中心

在视觉引导中 当相机视野与旋转中心很远的时候,使用旋转多个点来计算圆心准确性可能不高。今天分享使用视野内两点来计算旋转中心:

这里在Visionpro里用图像做了验证
在这里插入图片描述
P2是P1特征点绕O旋转角度A后的点 P3是P1和P2的延长线与以P1为圆心半径为r的焦点 直接上代码吧

 double d;//P1和P2直接的距离
    double x0,y0;//旋转中心O
    double x1,y1,x2,y2;//p1和P2坐标
    double a;//旋转角度
    double xx,yy;//P3坐标
    double r ;//旋转半径
   
    x1 = this.Tools.CogIntersectLineCircleTool1.X1;
    y1 = this.Tools.CogIntersectLineCircleTool1.Y1;
    x2 = this.Tools.CogIntersectLineCircleTool2.X1;
    y2 = this.Tools.CogIntersectLineCircleTool2.Y1;
    
    d = Math.Sqrt((x2 - x1) * (x2 - x1)+(y2 - y1) * (y2 - y1));
    a =  this.Tools.CogAngleLineLineTool1.Angle;//a为弧度
    
    r = d / 2 / Math.Sin(a / 2);//
    
    //r / d = (xx - x1) / (x2 - x1);
    //r / d = (yy - y1) / (y2 - y1);
    xx = (1 - r / d) * x1 + (r / d) * x2;
    yy = (1 - r / d) * y1 + (r / d) * y2;
    
    double rr = 90 - (CogMisc.RadToDeg(a)/ 2);
    
    x0 = Math.Cos(Math.PI/2 - a / 2) * (xx - x1) - Math.Sin(Math.PI/2 - a / 2) * (yy - y1) + x1;
    y0 = Math.Cos(Math.PI/2 - a / 2) * (yy - y1) + Math.Sin(Math.PI/2 - a / 2) * (xx - x1) + y1;

以上默认机械手与图像空间是同一个空间,实际在运用过程中需要标定到机械手空间,在结合以上的计算出机械手的旋转中心。

  • 11
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: 我可以为您提供一个用于建模机械手的 Fin Ray 程序示例:1. 使用 Fin Ray 引擎创建基本几何图形(如点、线、圆弧等)。2. 根据需要,创建机械手的各个部分,如机械臂、伺服电机和驱动器。3. 使用 Fin Ray 的碰撞检测功能,确保机械手的结构不会发生碰撞。4. 使用 Fin Ray 的动力学建模功能,为机械手添加动态参数,使其能够实现动作。5. 使用 Fin Ray 的仿真功能,模拟机械手的运动,验证其正确性。 ### 回答2: 要编写一个fin ray机械手的建模程序,我们需要考虑机械手的结构和运动控制。fin ray机械手模仿了鱼类的鳍状运动,能够实现优雅而灵活的运动。 首先,我们需要定义机械手的结构,包括骨骼和关节。骨骼定义了机械手的整体形状,关节则决定了骨骼之间的连接方式和运动范围。可以使用三维建模软件创建机械手的几何形状,并通过导入模型文件的方式将其引入到程序中。 接下来,需要实现机械手的控制法。fin ray机械手的运动模仿了鱼类的鳍状运动,鳍的运动可以分为膨胀和收缩两个过程。在程序中,可以通过调整关节的角度控制机械手的运动。可以设计一个控制循环,通过不断修改关节角度来模拟机械手的鳍状运动。 除此之外,还可以考虑添加碰撞检测和路径规划功能。碰撞检测可以在机械手运动时检测是否与周围物体发生碰撞,避免机械手被卡住或损坏。路径规划可以在给定目标位置时,通过计算关节角度的插值来实现机械手的平滑运动。 最后,可以添加一个图形界面来展示机械手的运动过程。可以使用图形库绘制机械手和环境,并实时更新机械手的状态。 总而言之,编写fin ray机械手建模程序需要考虑机械手的结构、运动控制、碰撞检测和路径规划等方面。通过定义骨骼和关节,设计控制法,并添加可视化界面,可以实现这样一个程序。 ### 回答3: 为了写一个fin ray机械手的建模程序,我们可以按照以下步骤进行: 1. 定义机械手的物理模型:fin ray机械手由一系列关节组成,每个关节可以旋转,以模拟手的运动。我们需要确定每个关节的位置、角度和长度,以及它们之间的连接方式。 2. 编写程序来计算机械手的姿态:我们可以使用三维坐标系来表示机械手的姿态。通过计算每个关节的角度和长度,我们可以得到机械手在每个时刻的三维坐标。 3. 添加运动控制功能:我们可以为机械手添加控制器,用于控制机械手的运动。通过输入期望的目标位置和姿态,我们可以计算出每个关节需要的角度和长度,以达到目标位置和姿态。 4. 设计用户界面:我们可以添加一个用户界面,使用户能够输入目标位置和姿态,并控制机械手的运动。用户界面可以包括按钮、滑动条和文本框等元素,以提供方便的控制方式。 5. 进行仿真和测试:在完成机械手建模程序后,我们可以进行仿真和测试。通过输入不同的目标位置和姿态,检查机械手是否能够准确地达到目标位置和姿态。 总之,编写fin ray机械手建模程序需要考虑机械手的物理模型、姿态计算、运动控制和用户界面等方面。通过合理的设计和测试,我们可以实现一个功能完善的fin ray机械手建模程序。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值