【工控基础】UVW平台踩坑

本文介绍了UVW平台的旋转原理,如何以平台任意点为中心旋转,以及C#代码实现平移和旋转的转换过程。特别强调了数学库中的角度处理、初始角度顺序的重要性,以及电机运动方向对坐标的影响。
摘要由CSDN通过智能技术生成

前言

本文不讲原理,旨在会用,不踩坑。

一、UVW平台介绍

invalid image(图片无法加载)

疑问: 如何理解可以以平台任意一点为中心进行旋转? 我们目前是以平台的旋转中心最为相机的原点坐标。

关于原理

invalid image(图片无法加载)

目前,我们使用的是旋转标定,这个方式找到的中心应该不是很准。

三、关于uvw的公式

那三个轴是如何进行旋转了的呢?可以看下图:

invalid image(图片无法加载)

1 每个轴按顺时针或逆时针走一个距离,就是旋转。
2 图中W动,U轴V轴不动,就是X方向的平移
3 图中U轴V轴同时动,X不动,就是Y方向的平移。

每个制造uvw平台的公式都会提供自己的公式,用来计算角度到uvw分量的计算。
1 平台的半径
invalid image(图片无法加载)

2 平台轴初始的三个角度

invalid image(图片无法加载)

这次用的平台提供的参数如下:
invalid image(图片无法加载)

公式如下:
在这里插入图片描述

上面的是用于计算角度的。下面是计算极限的,我们先关注角度这个部分。

1 角度的计算
这个无非是通过三角函数计算出角度到uvw的分量。但是我们对位的时候,一般都是平移+加上角度。
不过对应我们的uvw平台旋转也是通过平移实现的。
所以要实现平移+旋转。其实就是两个步骤。
1 通过三角函数计算出角度到uvw的分量
2 叠加平移分量和角度分量,其实就是相加。
这里,我直接给出C#代码实现:

/// <summary>
/// XYR移动量转UVW移动量
/// </summary>
/// <param name="MoveY">Y方向移动量</param>
/// <param name="MoveX">X方向移动量</param>
/// <param name="Rotatetion">旋转角度移动量</param>
public void DataUVW(float MoveX, float MoveY, float Rotatetion)
{
    float R = GlobalData.Instance.saveInfo.R;
    float θx = GlobalData.Instance.saveInfo.X;
    float θy1 = GlobalData.Instance.saveInfo.Y1;
    float θy2 = GlobalData.Instance.saveInfo.Y2;

    Rotatetion *= -1;
    //double rad = Rotatetion * Math.PI / 180;

    //偏移补偿
    MoveY += GlobalData.Instance.saveInfo.OffsetY;
    MoveX += GlobalData.Instance.saveInfo.OffsetX;

    GlobalData.Instance.U = -(float)(R * Math.Sin(Rotatetion + θx) - R * Math.Sin(θx));
    GlobalData.Instance.V = (float)(R * Math.Cos(Rotatetion + θy1) - R * Math.Cos(θy1));
    GlobalData.Instance.W = -(float)(R * Math.Cos(Rotatetion + θy2) - R * Math.Cos(θy2));
    float tempX = -MoveX;
    float tempY1 = MoveY;
    float tempY2 = -MoveY;

    //角度补偿
    GlobalData.Instance.U += GlobalData.Instance.saveInfo.OffsetA;
    GlobalData.Instance.V += GlobalData.Instance.saveInfo.OffsetA;
    GlobalData.Instance.W += GlobalData.Instance.saveInfo.OffsetA;

    //角度和平移的叠加
    GlobalData.Instance.U += tempX;
    GlobalData.Instance.V += tempY1;
    GlobalData.Instance.W += tempY2;
}

踩坑记录

1 首先,要注意Math的库里的三脚函数,参数都是弧度,不是角度,所以先要把角度转为弧度再进行计算。
2 其实每个轴对应的初始角度顺序不能错!

invalid image(图片无法加载)

3 要根据电机实际的运动方向适当的添加正负号。

invalid image(图片无法加载)

特别是角度和平移叠加的时候,方向要一致!

额外的记录

为啥正转一度和反转一度,通过计算的得到的平移的距离的绝对值不相同?

invalid image(图片无法加载)

invalid image(图片无法加载)

暂不明白,大概意思是,旋转的中心不是平台的正中心导致的。所以正转一度和反转一度平移的距离的绝对值不相同。

参考文章:

https://blog.csdn.net/weixin_38672958/article/details/129190738

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code bean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值