在机器视觉引导项目中,经常出现旋转中心与旋转轴不重合的情况,这种情况下的坐标计算方法并不复杂,利用高中所学的数学知识即可解答,第一步就是找到旋转中心点,这个是你的运动机构的不是产品上的,比如机械手。
要找到旋转中心,只需要任意旋转三次,取这三个点求其圆心与半径,其实只需圆心坐标即可,旋转所在点就是运动机构的旋转中心,比如机械手的6轴旋转,6轴所在位置就是其旋转中心,这是重合的情况。一旦加上手爪,就需要我们自己计算旋转中心了,下面是C#的圆心求解方法。
代码如下
struct mPoint{public double X;public double Y;}struct circle{public mPoint center;public float R;}mPoint getcenter(mPoint p1,mPoint p2,mPoint p3) {mPoint rpoint;double a = p1.X - p2.X;double b = p1.Y - p2.Y;double c = p1.X - p3.X;double d = p1.Y - p3.Y;double e = (Math.Pow(p1.X, 2) - Math.Pow(p2.X, 2) + Math.Pow(p1.Y, 2) - Math.Pow(p2.Y, 2)) / 2.0;double f = (Math.Pow(p1.X, 2) - Math.Pow(p3.X, 2) + Math.Pow(p1.Y, 2) - Math.Pow(p3.Y, 2)) / 2.0;double det = b * c - a * d;if (Math.Abs(det) > 0){//x0,y0为计算得到的原点double x0 = -(d * e - b * f) / det;double y0 = -(a * f - c * e) / det;rpoint.X = x0;rpoint.Y = y0;return rpoint;}else{mPoint ab;ab.X = 9999;ab.Y = 9999;return ab ;}}
怎么使用我就不多讲了,应该都能看懂。算法是根据圆的方程来的。
下一章再讲已知圆周上一点,球其旋转一定角度后的坐标。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/iot/242016.html