【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
之前花了40多篇文章,弄清了什么是slam,怎么学习slam,什么是ros,怎么利用ros来学好slam等等。不仅如此,我们还搭建了仿真环境,从话题订阅和发布开始,一步步到gmapping、amcl到move base,中间确实涉及了很多的内容,知识点也比较多。但如果仅仅如此,其实还是不够的。仿真学习虽然对于学习者是比较方便的,但我们最终的目的还是希望能够把slam技术用起来,这样才能产生价值。有了价值的反馈,我们也才能进行继续后面的学习和升级。
然而,仿真环境和实际环境还是差很多的。实际环境下,一个485的ab线没有接对,都有可能让你花费半天的时间。更不要说电路板上面的虚焊、接触不良了。所以,等了解了算法、了解了流程之后,建议大家下一步就可以慢慢转到实际小车来测试了,遇到的问题越多,成长的空间也越大。
下面我们就总结下真实环境和仿真环境的一些区别。
1、现实的传感器数据是不准的
前面仿真的时候,我们一般拿到传感器的数据就直接使用了。然而现实中,传感器的数据都是不准的,需要进行内参标定和外参标定值后才能使用。以摄像头为例,所谓的内参标定,就是摄像头的畸变参数;而外参标定,则是摄像头相对于机器人中心的坐标偏移。这部分数据都是需要自己标定出来,才能使用的。
此外,就算内参和外参都标定好了,这个时候数据就可以使用了吗?其实还不可以,因为此时还有可能出现随机噪声。那么我们只能通过均值滤波、滑动窗口、中值滤波等方法来进行处理。如果上面说的几种滤波方法还不够,这个时候可以考虑用卡尔曼滤波做一次数据平滑处理,再送给算法。注意,卡尔曼滤波不仅仅可以用于数据融合,还可以进行数值滤波。
2、真实的地面是不平整的
不管是gmapping,还是amcl,本质上都要求地面的起伏不能太大。因为从原理上说,他们都是借助于里程计的基础数据+lidar数据的粒子滤波,来实现制图和定位的。如果本身里程计的数据就是错的或者不准,地面上坑坑洼洼的,就不要太指望后面的粒子滤波可以给你修正回来。
3、单线雷达很多时候并不靠谱
这里说的单线雷达不靠谱,并不是说传感器本身不靠谱,而是说单线雷达所在的场景是经常容易发生改变的,单线雷达采集远远不够。就拿服务机器人来说,由于lidar传感器位置不高,那么它周围的场景就可能经常发生改变,一会桌子放在这里了,一会沙发放在那里了等等。这个时候,lidar发现场景改变了,它就不知道是应该去优化位置,还是忽略这些变化的场景。此外和多线lidar相比,它采集的数据少之又少,希望从这么少的数据中获取稳定的信息、输出稳定的结果可以想一下其中的难度了。
4、路径一般是规划好的
学习MoveBase的时候,我们发现很多时候路径都是临时生成的。只要没有障碍物,就贴着最大角速度、最大线速度走就可以了。实际生产中,对于机器人的活动路径和作业范围,一般都是做了空间约束的。这一点,对于开发者来说,其实并不是坏事,本质还是为了好控制,留出边界范围,也能满足业主安全方面的要求。
5、算力永远不够
很多算法有比较好的结果,都是依靠大算力、大存储来解决的。这会带来两个问题,第一我们选的soc开发板或者工控板算力够不够;第二,这么多数据需要处理,实时性来不来得及。一个比较好的slam算法,前端输出结果只是一部分,大部分时间都放在后端优化以及回环检测上面,这个时候就对算力和存储就都有了要求。一方面要求算的快,另外一方面又要求算得准,这本身就是一对矛盾体,需要自己做出权衡。
6、网络问题
真实的机器人都是自由行走在服务环境中的。它和调度器、充电器的连接是通过wifi来保证的。那么机器人和控制器之间的网络是不是稳定、通畅,这就变得很重要了。最低网络延时多少、网络联系失败的时候有没有重连机制,这关系到整个系统是不是长期稳定地运行。
7、精度和重复性的问题
如果机器人本身只是用于家庭,或者做一些服务用途,它的精度和重复性一般不做要求。但是如果应用在工业或者是军事上面,那么精度和重复性就会变得非常重要。以普通的AGV为例,10次取放货成功,和10000次无故障取放货成功,这中间还是有本质的区别的。所以,我们做机器人的时候不仅要求单次操作的精度很高,而且重复性必须满足客户和业主的要求,这样自己的产品才有竞争力。
8、安全问题
机器人本身是软硬、硬件和机械的复合体。当然,说白了它就是一个没有生命的铁疙瘩。所以我们不仅要让它干活,还要让它不伤害别人。狭义上的伤害,主要是运动、做任务的时候不要伤害到人;而广义上的伤害,还包括语言、功能和目的。前面的内容比较好理解,但是后面的伤害不一定为大家所熟知。可以试想一下,现在有了gpt和chatgpt的支持,如果我们安排机器人去做一些伤害人类的任务,它应该是去做呢,还是不去做呢?
9、成本
如果我们上面8点都实现了,这其实已经很不容易了。然而,为了达到这一效果,花费了很大的代价,在成本上没有控制住,这也是没有意义的。本来开发一款产品、完成一个设计,就是为了能够在市场上获得竞争力。但如果最终的结果是客户满意了,自己却遭受了损失,这明显是赔本的买卖,那就得不偿失了。
10、总结
所以说,用仿真实现机器人的算法,这只是第一步。怎么把机器人做出来、卖出去,给客户创造价值,这还有很长的路需要走。