ROS系统玩转自主移动机器人(1)–概述

580
0
2020年8月14日 13时50分

一、是什么开源项目?

从本博文开始将开源一个基于ROS系统的自主移动机器人项目,该项目基于一个差动轮机器人平台展开,机器人的设计效果图和实物图如下图1所示。

 

ROS系统玩转自主移动机器人(1)–概述插图

图1 设计图和实物图

 

所有涉及该机器人的设计文件和组成构件将全部通过BSD协议开源,具体开源的内容为:

 

1.  机械结构设计文件。为了尽可能的降低成本,本机器人平台尽量采用能买到的现成零部件,配合极少的非标设计零件,在设计非标件的时候也尽量考虑加工工艺,降低加工成本,所有的机械相关东西将全部开源,并将在后面的博文中做详细介绍。

 

2.  嵌入式硬件。该机器人的嵌入式部分多采用比较流行的MCU和开发板组成,将全部开源并在后续博文中详细介绍。

 

3.  嵌入式软件部分。这部分可以视为底层驱动和硬件抽象层的结合,用于实时控制机器人执行最终的预定任务,如直流电机的PID控制、底层通信、信号采集等,这些程序将全部开源并分章节进行详细介绍。

 

4. ROS机器人操作系统部分。我将基于ROS对机器人进行多个方面的开发,如SLAM、机器视觉、语音交互等,这些程序也将全部开源并分博文进行详述。

 

tips: 设计文件的开源大部分将通过GitHub托管。

 

二、该开源项目适合谁?

本开源项目基本上是一个完整的轮式机器人开发过程,涉及结构设计、嵌入式软硬件和机器人操作系统以及简单的人工智能应用等,虽然整体简单,却也“麻雀虽小,五脏俱全”。市面上的各种类似平台也很多,动则几K甚至十几K的价格,本项目的初衷是在尽量少花钱的基础上了解和学习一个机器人从无到有的设计过程,因此适合以下人士分享:

 

1. 对机器人领域感兴趣的初学者。虽然说设计圈流行不要“重复造轮子”的说法,但是初学者还是需要从底层到上层了解机器人的全部设计过程,然后找到自己感兴趣或者擅长的某个方向深挖下去,成为专家(不是砖家哈)。

 

2. 想成为机器人或智能硬件产品经理的人。一个丝毫不懂技术的产品经理有可能会被开发人员打的(参考某安科技打人事件),因此有必要对机器人设计的全部过程都做了解,甚至自己动手实现一些功能,才能更深刻的定义一个好的产品。

 

3. 在机器人某一技术领域深耕,又对其他领域感兴趣的研发人员。虽说术业有专攻,开发人员需要有一技之长,但是对于和自己擅长的技术领域相关联的其他领域有所了解,看看这些领域解决问题的思想,也不失为一种开阔视野和思路的方法。

 

4. 闲得无聊想提高自己动手能力和学习能力的业余爱好者。(原因就不说了)

 

tips:如果你是机器人大牛,请呵呵一笑走开,不带走一片云彩。。。

 

三、为什么开源?

本人从事机器人领域工作很多年了,从上大学时期喜欢机器人领域以来,也看到这个领域的兴衰,希望更多的人了解和加入这个行业,不是靠资本的吹捧和炒作概念,而是让更多的人走进这个领域通过技术的提升让机器人真的走进千家万户,走上街头巷尾,为生活提供便利和保驾护航(哎呀,牛逼吹大了,有点收不住了),反正提倡分享精神吧,也算是打发业余时间的一种消遣。

 

总之,从本篇博文之后,将分多篇文章讲解整个项目的设计过程,权当抛砖引玉,有误之处还希望有心人留个言提醒一下,在此谢过了。

 

四、机器人通常由哪几部分组成?

常见的机器人主要有三个部分组成:机械结构;嵌入式(硬件+软件);上层系统,如图2所示。

 

ROS系统玩转自主移动机器人(1)–概述插图(1)

 

机械结构是机器人的机械本体部分,它是最后执行特定任务的载体,例如传动系统、执行机构等都属于机械结构,上乘的机械设计能让机器人降低硬件和软件开销的前提下获得更好的功能实现,例如,高明的机器人机械结构设计在不需要复杂算法的支持下就可以获得非常好的越障能力,优秀的结构设计可以让机器人不需要强大算法的前提下就获得很高的自平衡能力等等。

 

嵌入式部分(硬件+软件)可视为机器人底层驱动部分,例如电机驱动板+PID电机控制算法就可以直接驱动电机实现预定动作,再比如温度传感器+温度AD读取就可以实现环境温度的读取和显示。一般嵌入式硬件一般由核心MCU(如51单片机、ARM、STM32)以及相关外设(供电、I/O、AD/DA、RS232等)组成,成本较低且实时性较高,用于完成特定的如驱动、检测、通信等功能。很多简单的装置只需要机械结构+嵌入式两个部分而不需要上层系统就可以完成想要的功能了。

 

上层系统是指完成更高阶功能部分,它一般有上层硬件以及操作系统组成,上层硬件常见得的有x86架构也有ARM架构的,操作系统常见的有Windows系统、Linux系统等。上层系统一本具有较强的计算能力,例如机器视觉应用中上层系统除了CPU以外还可以包含GPU用于算法加速,总之它的作用是完成一些需要大量计算和复杂算法的功能然后得到结果后发送给嵌入式部分用于驱动和执行。

 

 

发表评论

后才能评论