三轴全向机器人运动学分析

前言:机器人日趋火热,各式各样的机器人随即诞生!今天要谈的是三轴全向机器人,吾理小子是个简单的钢铁直男,争取用最通俗的话语将其运动学讲述清楚,希望对各位道友有帮助。

1.三轴全向机器人背景

        什么是三轴全向机器人?三轴的安装位置关系是怎样的?三个轴能运动吗?等等一系列问题可能会被提出,首先进行一下小科普。机器人运动是依靠轮子完成的,三轴简单理解为三个轮子,三轴的安装位置互呈120°夹角。至于三个轴能行走吗?那完全仰仗今天的这位老大哥--麦克纳姆轮

       它是一种与常规轮子外形很接近的万向轮。有了它的出现,三轴方才能够实际应用,否则只能是纸上谈兵!它可以转动和平动,而且互不影响。自从麦克纳姆轮出现之后,现在已经有各式各样的产品出现,其实本质都是一样的。接下来我们看看我们核心底盘——三轴的实物图(以上图片均来自某宝,若有违规,联系作者删除)

        三轴底盘能够实现的运动有直行、拐弯、原地拐弯、平动、转动行走等任意动作。其优越性决定它势必会被广泛关注。其非常灵活的运行特征都要归功于结构,但是上面所有提到的运动都是依靠底部三个轮子实现的,那么其运动学分析又是很头疼的一件事情了!接下来要放大招开始分析其运动学了,只是想普及知识的游客可以止步了!哈哈哈

2.三轴运动学分析

       说到这里,技术大牛估计更关心的是怎样控制这个灵活的小身板。小编也提前说一句,小编力争简单易懂,讲的不到位的地方希望您谅解,欢迎批评指正。顺便吐槽一下,一提到运动学分析,一问度娘全是一堆建模、矩阵变换等等,小编一般都是可望而不可及(数学功力不够啊!!!),所以顺便请求给为前辈与大佬,能将问题简化一定简化,谢谢您!相信小编,在吾理小子这里绝对没有复杂的公式,高中数学完全可以解决这个问题。

       好的,首先我们先做一个简单的抽象,画一个草图,并且将所有的外部条件理想化。比如,车架是绝对的正三角形;轮子严格按照120°夹角安装;轮子运动时不打滑等等,我们先从理想条件去分析运动学问题。

        如上图所示,三角形ABC表示底盘;O点是底盘的中心;r是车轮到中心的距离,也就是旋转半径;A、B、C分别表示车轮;图中小线段指的是轮子的速度方向,并规定箭头方向为正;设A、B、C轮子的速度大小分别是Va、Vb、Vc,其正负表示速度的方向;前和右规定的是车体的运动方向。

       做了上述的假设与规定之后,先简单来分析一下运动状态。假设需要车子向前直行,各位思考一下该如何设置轮子速度呢?很简单,设车轮的速度分别为Va=v、Vb=-v、Vc=0(v是某一速度值)就可以完成直行,如此一来前后直行很容易实现了。我们已经知道,三轴可以向任意方向行驶,假设需要车体向右行驶,各位再思考一下三个轮子的速度怎样设置呢?是不是就没有那么简单了。

       做了一点简单分析之后,我们接下来再进行分析,由于车子行驶的和速度方向由三个轮子共同决定,那么各位第一想到的是求速度的矢量和,就可以求出车子的和速度大小与方向。不错,的确如此。这种是基于高中数学中向量的思想,也就是说向量都是自由向量,可以任意平移,但是请注意此处的速度是不能够随便的平移,因为各个轮子的速度不仅仅影响车子的和速度与方向,还会产生另外一个效果——车体旋转!简单来说,和速度不仅仅考虑平动,也需要考虑转动。

       说到这里,其实可以发现,仅仅考虑车体的和速度大小与方向,那么做矢量和就可以完成,但是要考虑上车体的旋转之后,这个问题就会稍微复杂一些。其实也没有多么复杂,各位不用担心,接着看下文。

       初中物理中我们学习过杠杆原理,有一个支点与力臂,那么动力的大小就是动力*动力臂,阻力的大小就是阻力*阻力臂,通过两者的大小来评判此杠杆是费力杠杆还是阻力杠杆。其实把问题升级一点,就是大学物理中的力矩。几个外力共同施加在一个刚体上(刚体不能当做质点),那么刚体的运动状态要通过各个分力的力矩来做判断。好了,回归到上文,我们谈到了车体的旋转。三个轮子的速度可以等效为三个外力,并且方向确定,互呈120°夹角,并且力臂长度都是距离中心的距离,如此一来这个问题没有想象中的复杂吧!

还是运动的合成与分解思想,我们分别讨论平动与转动

       将三个速度平移到一点,建立平面直角坐标系XOY,如上图所示。高中数学排上用场,完全是高中向量知识,而且很基本。为书写简单,Va、Vb、Vc分别简写为a,b,c。其坐标如下所示:

                                                                      \vec{Va}(-\frac{1}{2}a,\frac{\sqrt{3}}{2}a) \vec{Vb}(-\frac{1}{2}b,-\frac{\sqrt{3}}{2}b) \vec{Vc}(c,0)

说到这里,和向量\vec{S}就很容易得到了:\vec{S}(c-\frac{1}{2}a-\frac{1}{2}b,\tfrac{\sqrt{3}}{2}a-\tfrac{\sqrt{3}}{2}b)

(PS:公式好难敲,原谅小编敲的很乱)

       得到和向量,那么和向量的模就是和速度的大小,和向量的方向就是和速度的方向。在这里,可能心急如焚的小伙伴急于用和向量的模表示和速度大小,用反三角函数表示和速度的方向。小编劝君莫着急,先看下文!(否则速度方向不能唯一确定,会让你很抓狂)

        好了,平动暂时讨论到这里,接下来考虑转动。由于结构的优越性,正三角形三心合一,那么车体的旋转中心就是正三角形的重心。车体的转动,通常用角速度来衡量。

则有角速度\omega =(a+b+c)/r

        至此,车体的平动与转动讨论完毕!

总结:上文我们通过将车体的运动分为平动和转动并分别进行讨论。我们发现平动与转动结果仅与小车的三个轮子速度有关,换句话说,三个轮子的速度大小与方向决定了车体的平动与转动。(这是一句废话,我们一直在讨论的就是这个问题啦!)讨论的结果是,平动用和向量表示,转动用角速度表示。

重点:三轴机器人我们通常关心的三个量是和速度大小、和速度方向、旋转角速度,这三个量共同决定车体的运动方向与姿态。

接下来,我们将讨论结果进行实践!

3.三轴全向机器人控制程序

        好了,上述那么多,可能看官现在有点迷糊,不知道我们的重点再哪里?其实,上述的所有讨论只是为了控制三轴机器人按照我们的目标运行。

我们解决一下开头没有回答的问题,假设需要车体向右行驶,各位再思考一下三个轮子的速度怎样设置呢?

       有了上述的讨论,很容易就可以算出结果啦!向右行驶,也就是方向为0°角,和速度大小为v,角速度为0。通过上述讨论与限定条件,可以列出以下三元方程组

       各位,是不是发现结果很简单呢。对于小编这种数学菜鸟而言,得到这样的结果对于底层控制程序太简单啦!所以,对于小车的控制,我们通过三个量车体运动速度(和速度大小),车体运动方向(和速度方向),车体旋转速度(角速度)可以唯一确定车体的运行状态,那么这三个量是已知的,所以通过已知量来求三个轮子的速度已经完美解决啦!(PS:掌声鼓励一下)回答了开头的问题之后,我们再看看底层控制程序的书写。

        对于每一个轮子,需要先调试好速度环PID,保证设定速度的有效性。关于速度环PID的书写与调试我们不做讨论。我们在控制程序中添加子函数,具体代码如下

/*************************************************************
             入口参数分别是,速度、速度方向、角速度
*************************************************************/
void Cal_Every_Speed(float speed,float angle,float angle_speed)
{
	float Vx,Vy;     //定义正交分解之后的速度
	float V1,V2,V3;  //定义各个轮子的速度
	
	Vx = speed * cos(angle);  //计算X方向速度
	Vy = speed * sin(angle);  //计算Y方向速度
	
	V1 = 1/3*angle_speed*Radius + 2/3*Vx;         
	V2 = 1/3*angle_speed*Radius - 1/3*Vx - sqrt(3)*Vy/3;
	V3 = 1/3*angle_speed*Radius - 1/3*Vx + sqrt(3)*Vy/3;  //解算各个轮子速度
                                               //Radius是旋转半径,和底盘有关
	
	Set_Speed_Task(V1,V2,V3);    //调用速度环PID设置各个轮子速度
}  

好了,至此所有的知识点都说完了。吾理小子尽了全力啦!说的不对的地方欢迎各位批评指正,吾理小子在此谢过!写博文不易,欢迎各位尽情吐槽!

最后,感谢我的同事给我 指点,还有我的女朋友帮我数学知识(哈哈哈)!

猜你喜欢

转载自blog.csdn.net/qq_39960119/article/details/81316611