webots使用imu传感器(位姿传感器)实现四轮全向轮小车自旋前进,学会可拓展到其他的模型上(边自旋边沿一个方向直行)C语言版本附源码(开源)
为实现上述功能,需要获取到小车的绝对角度(在地图这个大的坐标系中),在webots中我们需要的便是imu传感器(即InertralUint),在实际的运用中,一个陀螺仪的功能便包括了imu的功能。AD轮子提供一个方向的速度,BC轮子提供一个方向的速度,通过这两个方向速度的合成实现小车可以向各个方向移动,当向前移动时,两个方向速度大小相等,所以矢量三角形的角度为Π/4.这就是对imu返回值的解释,所
如何做一个全向轮小车我在这里不再赘述了,直接上主要部分
为实现上述功能,需要获取到小车的绝对角度(在地图这个大的坐标系中),在webots中我们需要的便是imu传感器(即InertralUint),在实际的运用中,一个陀螺仪的功能便包括了imu的功能。
在代码的调试过程中,我们要学会观察每一个外设输出的数据,例如这个imu,你会发现他输出的一个弧度角,并且朝向一个位置时他的返回值是固定的,用图翻译一下:
这就是对imu返回值的解释,所以在我们的程序编写中,最好先旋转imu传感器找到返回值为0度的地方,固定imu传感器,然后先分析这种情况。
AD轮子提供一个方向的速度,BC轮子提供一个方向的速度,通过这两个方向速度的合成实现小车可以向各个方向移动,当向前移动时,两个方向速度大小相等,所以矢量三角形的角度为Π/4.
上面简单介绍了一下全向轮移动的原理,下面解释如何实现不管小车怎样放置,都可以沿着地图大坐标系的一个方向前进。当车头面向正前方,目标路线向前(imu传感器返回值为0)放置的时候,车正向移动,cos和sin计算取的角度为45度。假如车头向右偏了三十度,此时imu传感器返回值换算得到Π/6,我们是不是可以理解为车不动,而我们的目标行驶方向向左转了30度,所以为了使车还能够沿目标路线前进,则车向左前方30度行走即可,取得角度自然变成了(45-30)=15度=Π/12
所以得到 sin和cos利用的角度 sc_angle=3.14*(57.3*spin_angle-45 )/ 180,里面45度的加减需要根据自己的全局坐标系左面是Π/2还是右面是Π/2有关。
到这里便可以实现无论车怎么放都可以向一个方向移动了,效果如下:
最后便要实现旋转了,只需要给左面两个轮子和右面两个轮子速度差即可,最终效果如下
更多推荐
所有评论(0)