ROS机器人构建探讨

ROS机器人构建探讨

本文主要针对于机器人下位机或相关联部分进行探讨

自ROS在2007年诞生于斯坦福大学至今已经走过了十多年的时间,如今ROS已经成为了机器人行业的普遍标准。ROS的分布式应用大大提高了代码的可复用性。

一、机器人商用应具备那些能力

人脸识别,语音交互等都是单纯PC端的应用,我们暂且不谈。

  1. 底层单片机的在线升级,最好可以具备网络升级能力(每次升级机器人都要拆开?)
  2. 自动充电功能(没有电的机器人?)
  3. 自身状况的检测功能(机器人行走过程中撞墙了,还在走?)

二、如何构建下位机与上位机之间的关联

ROS的大部分应用都是基于PC端的,而对于机器人底盘的控制大都是基于MCU端的。因而搭建一个完整的机器人应用便需要PC端和MCU端的配合,那又如何建立这样的配合关系呢?

  1. 可以自定义通信协议通过串口、CAN总线等方式和PC端通信,再将消息解析并发布到ROS中。

    优点:MCU端负载小、通信协议制定更加灵活

    缺点:没有固定的消息格式,随着传感器的变多,通信协议会变得很臃肿。

  2. 通过rosserial协议,使MCU端成为ROS的一个节点,直接与ROS建立通信关系。

    优点:可以直接使用ROS标准的信息格式通信

    缺点:对MCU的性能有一定的要求

上面两种方式都可实现最终的目的,但也各有利弊,可以根据实际情况来选择。

我在实际应用中采用了第二种方式搭建ROS与MCU端的通信模板:

这里实际使用的是STM32F103C8T6芯片移植rosserial通过USB虚拟串口和PC端ROS系统通信。

  1. 若通过串口通信的方式,只能满足低频率的小信息量的消息通信,消息量一多、频率一提高连接便会出错。
  2. 通过该方式建立的通信,基本可以满足各种传感器发布频率的要求。
  3. 限于STM32F103的性能,实际的发布频率会略低与设定的发布频率,但基本没什么影响。
  4. 连接稳定,不会出现自动断开连接的问题

像上面介绍的一样,之前我一直认为搭建ROS机器人一定需要一个中控单片机建立ROS系统和其他传感器驱动芯片的的联系,因此在后面看到机器人我一定在想他们会用什么样的中控单片机呢?ROS系统到底是如何和底层之间做通信的呢?直到一次展会上,我对这个问题又有了新的认识。当时询问了一家做无人驾驶的展商的工作人员:如何实现对汽车的控制的(大概是这个意思,具体问题我忘了),他的回答是:汽车厂家向他们开放了该车的线控协议(大概是这么说的)。这个中控单片机是什么有没有其实都是无所谓的,如果有中控单片机是更便于的底层之间的管理,没有底层和顶层之间也照样可以通过通信协议建立关联。

总结

基于上面的介绍,真正的机器人构建,是需要很多方面的知识的,不是只了解一方面知识就可以完成整个机器人系统搭建的,非常希望大家可以将自己擅长的那部分知识分享一下:

基于我的认识,机器人的的构建过程也完全可以采用无人驾驶汽车的这种模式,通过通信协议完成传感器消息的获取,电机控制指令的下发等。假设我们采用CAN协议,但在实际应用过程中自定义的CAN协议没有总体的考量可扩展性和可维护性都很差,因此我们需要一种类似与CANOpen的协议来放到实际应用中。可以将不同的传感器采集模块开发成不同的CANOpen从站,将中控单片机部分开发成CANOpen主站来和ROS系统通信。

问题一:如何开发这样的CANOpen从站和主站呢?

中控单片机部分若果采用实时操作系统会不会提升整个系统的性能呢!

问题二:有没有必要在这样的控制系统中加入实时操作系统,加入后会有那些优势呢?

之前说道了,ROS系统和中控之间的通信速度问题,如果应用以太网通信是不是又可以进一步提升性能!

问题三:有没有必要采用lwip以太网通信建立ROS和单片机之间的联系?

你可能感兴趣的:(ROS)