开源自主导航小车MickX4(十)总结

开源自主导航小车MickX4(十)总结

开源自主导航小车MickX4 这个系列教程中,我们一共分为了十个博客部分进行了讲解差速小车的导航。由于一些的原因,这里有一部分我们没有仔细去深入研究其中每一个部分的算法内容,只是简单的调用和理解了这个算法模块的输入输出接口。比如说这里用到的激光SLAM(gmapping,cartographer LeGO-LOAM),还有后续的全局规划算法和局部规划算法也只是调了一下参数,没有对源码进行分析。

在这里插入图片描述

1 博客回顾

最早针对先锋机器人底盘上实现了自主导航,产生了如下的几篇博客。当时在先锋机器人的底盘上实现了自主导航。

后来由于项目需要,产生了自己制作ROS底盘的项目。因此制作了5辆麦卡纳姆轮的底盘,这个过程编写成为了以下两篇博文

后来想制作在室外运行的自主导航小车,因此确定了Mick 这个项目代号。开始使用四轮差速小车模型和16线的3D激光雷达作为传感器,导航框架是基于move_base进行修改的。

项目开源的代码中支持麦克纳姆轮和四轮差速底盘,该开源项目从搭建机械部分开始,分享底层的嵌入式控制,上层的建图和导航部分,最终实现A点到B的自主导航。 当前地址的代码为麦克纳姆轮和四轮差速ROS底盘的ROS导航节点包,与 mick_robot_chasiss 代码(底层控制代码)配合使用,更多的信息可以参考博客-熊猫飞天

2 存在问题

  • 1)里程计不准
    室外的4轮小车或者是6轮的小车,转向是依靠轮子和地面打滑实现转向的。因此单独使用轮子转速换算得到的偏航角是不准的,需要使用外置的IMU来计算偏航角。在测试中我们还发现,低成本的IMU(MPU9250、MPU6050这类几十块钱的IMU)在使用前必须要校准磁力计,安装位置要远离电机、铁块(15cm以上),否则会影响偏航角的输出值。
  • 2)电机选型
    最好是选择无刷电机,带总线通讯协议的。在做车的过程中我们选出了大疆的M3508电机和安普斯的轮毂电机两种电机,M3508扭矩在3.5牛米左右,安普斯的电机最大有5牛米的。这两款电机都不错,值得推荐给大家。
  • 3)车辆布局
    我们的小车采用了四个电机,也就是每个轮子一个电机,暂时叫做方案A。对应的还有一种是理论同步带把一侧的轮子用同步带动,再利用一个或者多个电机带动同步带,把这种方案叫做方案B。 方案A的机械结构简单,安装方便,只需要一个联轴器就可以吧轮子相连。缺点是,四个轮子的速度会不一样,造成这种现象的原因是,在坑洼路面和上下坡的时候每个轮子的受力不同,如果我们四个电机都是用的同一个PID参数,那么此时轮子的速度会不同,导致轮子滑转,对里程计产生误差。 方案B在结构上会比方案A复杂一点,但是可以保证机器人左右两侧的轮子的速度是一样的。这种结构在先锋机器人上有应用。
  • 4)通讯接口
    这里的通讯接口主要是指单片机底板和工控机的通讯。通常我们使用232来连接单片机和工控机,考虑到数据量后期可能比较大,我们尝试过使用网口来连接,所有的数据汇聚到中心交换机上,然后工控机只需要一根网线连到交换机就可以实现和所有传感器通讯。这种方式接线起来比较简单,使用POE供电的交换机,连供电问题都解决了,实际使用中发现这个实时性不太好,也就是从工控机到单片机发送控制命令的时候,由于网络环境可能会产生阻塞的问题,不能保证通讯延时。

3 学习建议

  • 1)先使用成品底盘
    根据我自己学习的经验。大家如果是初学的话,最好还是先用一个成品的底盘(比如,turtlebot、autolabor、先锋机器人和kuboki之类的)。先用成品的底盘调通导航程序,这样如果你对自己搭建底盘感兴趣,你在调试的时候起码可以保证上层导航算法是没有问题的。

  • 2)底盘选型
    在学习的过程中,我们发现两轮差速底盘的里程计精度比起四轮差速要高很对(四轮是依靠轮子和底盘滑动实现转向的)。但是室外环境,两轮底盘不如四轮底盘平稳。而里程计误差问题通过额外的算法来补偿里程计,比如,IMU测量姿态角,把Yaw补偿轮子打滑,俯仰角用于计算高度。

  • 3)底盘控制方案
    现在的伺服电机都支持总线式的电机,一些工控机也有IO接口。因此也有方案直接把底盘的运动控制放在了工控机里面,也就是在ROS底盘节点里面计算速度闭环,直接通过总线下发,控制电机调速。与之对比的方案就是我们采用的利用STM32来实现底盘的运动控制。这两种方案我们都在不同的项目上使用过,单片机方案成熟度高,但是针对大功率电机需要对控制板做电磁屏蔽。工控机方案好调试,可视化数据比较方便,但是实时性差一点,此外类似于线程阻塞的坑(别问我咋知道的())。对于小车还是推荐单片机方案。

  • 4)学习方法
    遇到问题别自己一直想,多加群交流,加群,加群

  • 5)知识点
    从头制作一个ROS小车,然后实现自主导航。需要设计到ROS导航层嵌入式底层一些拧螺丝的知识。嵌入式的话可以去网上找一个配有视频教程的开发板进行学习,后期再自己制作PCB,美化一下。ROS导航的话可以网络上有很多的博客(入古月居大佬的教程)

4 后续计划

当前的小车教程,也只能算是走通了整个流程,算是一个入门教程吧。在实际的项目中还需要针对环境去微调参数和,但是基本上小车是可以动起来的。实际上小车的文档在此之前就已经写完了,中间由于一些项目上的事情去忙其他的了,最近把文档整理了一遍(也算是复习了),使得它展示的更加有逻辑性一点。

由于自己的研究方向是视觉SLAM,因此在后续的任务中将继续开源另外一个项目,计划是实现基于视觉的导航。针对在激光导航中遇到的问题,后期可能会调整一些使用4轮8电机的全驱动结构的底盘,提升里程计的精度问题。新的视觉导航框架也会合并到Mick这个项目代号中去。

最后感谢向我反馈BUG的网友们,感谢大家的支持。

欢迎大家点赞在评论区交流讨论([email protected]) O(∩_∩)O

或者加群水一波(1149897304)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/crp997576280/article/details/113438074