[共享学习]VM之角度纠正问题
视觉项目中经常会遇到通过相机给定偏差角度来修正产品位置的需求,但是视觉软件的角度值范围是[-180,180],不能直接给值。那么本文就来仔细分析下各种不同的情况,借用脚本模块实现偏差角度的正确输出。

     最近刚好手上两个项目都跟角度纠正相关,一个是上相机拍摄产品,产品底部由伺服电机带动旋转;另一个是手眼相机拍摄产品,机械手旋转角度抓取产品(此处说明一下,使用旋转标定工具也是可以,但是考虑不麻烦机器人工程师就自行脚本解决了)。

     伺服电机和机械手的旋转方向刚好相反,于是整理了一张图表,全面分析了各种条件下的计算方式,如下图


以上计算出来的角度都将旋转范围限制在半圈以内,即正方向和负方向都不会超过180°。


大体的逻辑思路如下:



接下去根据思路编写脚本,如下例子:



下面贴出旋转机构顺时针旋转为正方向时的代码,仅供参考:

/旋转机构顺时针旋转为正方向时
  //A为负角度的情况下
  //r为正角度[0,180]
  if(r>=0&&r<=180)
  {
     //相减小于180°时,直接相减
     if((r-A)<=180)
     {
        SetFloatValue("outR",r-A);
     }
     //相减大于180°时,相减再减360°
     else
     {
        SetFloatValue("outR",r-A-360);
     }
  }
  //r为负角度[-180,0),直接相减
  else if(r>=-180&&r<0)
  {
     SetFloatValue("outR",r-A);
  }
  //其它情况输出0或其它值
  else
  {
     SetFloatValue("outR",0);
  }

  //A为正角度的情况下
  //r为负角度[-180,0)
  if(r>=-180&&r<0)
  {
     //相减大于-180°时,直接相减
     if((r-A)>=-180)
     {
       SetFloatValue("outR",r-A);
     }
     //相减小于-180°时,相减再加360°
     else
     {
       SetFloatValue("outR",r-A+360);
     }
  }
  //r为正角度[0,180],直接相减
  else if(r>=0&&r<=180)
  {
     SetFloatValue("outR",r-A);
  }
  //其它情况输出0或其它值
  else
  {
     SetFloatValue("outR",0);
  }


如果有不对的地方请各位同行指点改正!


以上就是本次所有内容的分享了,如果有用点个赞呗~~



附件:
版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

VM关于FTP存图的一点分享

下一篇

【技术分享】通过脚本来重置变量计算模块中变量的值

评论请先登录 登录
全部评论 5

一个atan2就解决了

2024-04-20 14:25:58 海南省
回复

附件怎么是空的

2024-03-26 23:06:13 广东
回复

需要静下心来看看写的是啥

2024-03-26 01:05:20 未知地区
回复

做过同样的项目,不需要脚本,用条件分支就可以了。

2024-03-25 12:27:52 广东省
回复

为什么不直接对计算结果进行判断呢?

2024-03-25 08:30:22 湖北省
回复
  • 1
Lv.0
0
关注
23
粉丝
4
创作
96
获赞
相关阅读
  • 探讨海康VisionMasterN点标定的内部原理
    2024-07-19 浏览 0
  • 关于两起激光方案配置不合理引起的碰撞案例分析
    2024-07-09 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器