4

SLAM从入门到精通(ROS和底盘Stm32的关系)

 11 months ago
source link: https://blog.csdn.net/feixiaoxing/article/details/133691227
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

SLAM从入门到精通(ROS和底盘Stm32的关系)

original.png
嵌入式-老费 newUpTime2.png 已于 2023-10-09 00:28:28 修改 articleReadEyes2.png 116

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        学过Ros的同学,一般对subscribe、publish、话题、服务这些内容都比较熟悉。如果再熟悉一点的话,还会知道slam、move_base、moveit这些框架。再了解多一点的呢,会对框架里面的算法,比如和hector slam、gmapping、amcl、迪杰斯特拉、a*算法比较熟悉。但是,对机器人底盘的知识,尤其是Ros和stm32怎么通信的,很多人却是不算太了解的。

ddab5939a12c4489a223ceeda4a47437.png

1、Ros和Stm32的物理连接

        一般来说,Ros和Stm32会通过串口进行通信。就算两者通信的是usb,也会在stm32开发板上面通过芯片把usb信号转换成串口信号。

2、操作系统不同

        通常Ros都是运行在linux系统之上的,如果需要界面的话,还会搭载一个ubuntu系统。而stm32开发板上面一般不会安装操作系统,就算有操作系统,也会是一个简单的rtos,比如开源的freertos之类的。在这个板子上面,会根据不同的运动类型,实现不同的控制算法。简单的运动控制算法用pid实现就可以。

3、报文协议

        既然Ros和Stm32之间需要进行通信,那么不管是Ros读数据,还是Ros写数据,都需要按照一定的报文格式进行。通常会采用0x55 0xaa这样的报文头,还会有报文长度、报文内容、校验码,这些都是常规的报文协议格式。

4、Ros从底盘获取的数据

        Ros系统从底盘获取的数据主要有这么几种。第一,里程计数据。这个数据一般是底盘根据轮速和底盘模型计算出来的。第二,imu数据。imu这类传感器,一般也是直接由底盘负责处理的。好一点的底盘程序,会直接融合里程计和imu的数据。第三,避障、电量、电机转速这些原始数据。电量比较好理解,比如机器人没电了,就可以直接发命令让机器人去自动充电。电机转速这些很多情况不一定需要,但是如果机器人需要做功能安全的话,是需要的。

5、Ros发送给底盘的命令数据

        Ros发送给底盘的数据其实就比较简洁了,主要就是cmd_vel数据。这里面包含了x/y/z的线速度,还有围绕x/y/z的角速度。

6、底盘厂家提供的Ros包

        很多时候,底盘厂家会直接提供一个Ros包给Robot开发厂家。这样Robot开发企业就可以专注在算法领域和业务领域,不用关于底盘这些操作细节了。Ros包实现的内容就是上面提及的3、4、5中描述的工作。此外,Ros包还要把从底盘获得数据publish出去,当然对于需要发送给底盘的速度要求也要提前向roscore subscribe一下。

        最后还有一个要注意的就是,如果Ros包退出,相关的class对象在进行析构的时候,一定要让底盘停止,发送最后一次停止命令报文。这样整个工作环境才是安全的,这一点务必要牢记在心。做工业自动化、或者汽车自动驾驶的同学,这方面尤其要注意。

        上面描述的都是正常情况。大家有没有想过,如果ros发送的cmd_vel,底盘做不了怎么办?比如,一些robot做不来原地旋转。那么这个时候改哪个程序呢?毫无疑问,就是publish cmd_vel的程序,local_planner。

69a095d122404728875d315ee0dac64d.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK