最近刚好手上两个项目都跟角度纠正相关,一个是上相机拍摄产品,产品底部由伺服电机带动旋转;另一个是手眼相机拍摄产品,机械手旋转角度抓取产品(此处说明一下,使用旋转标定工具也是可以,但是考虑不麻烦机器人工程师就自行脚本解决了)。
伺服电机和机械手的旋转方向刚好相反,于是整理了一张图表,全面分析了各种条件下的计算方式,如下图
以上计算出来的角度都将旋转范围限制在半圈以内,即正方向和负方向都不会超过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);
}
如果有不对的地方请各位同行指点改正!
以上就是本次所有内容的分享了,如果有用点个赞呗~~