安徽省住房城乡建设厅网站公示,个人网站建设规划案例,化州+网站建设,食品电子商务网站建设规划书【 声明#xff1a;版权所有#xff0c;欢迎转载#xff0c;请勿用于商业用途。 联系信箱#xff1a;feixiaoxing 163.com】 学过Ros的同学#xff0c;一般对subscribe、publish、话题、服务这些内容都比较熟悉。如果再熟悉一点的话#xff0c;还会知道slam、move_base、…【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】 学过Ros的同学一般对subscribe、publish、话题、服务这些内容都比较熟悉。如果再熟悉一点的话还会知道slam、move_base、moveit这些框架。再了解多一点的呢会对框架里面的算法比如和hector slam、gmapping、amcl、迪杰斯特拉、a*算法比较熟悉。但是对机器人底盘的知识尤其是Ros和stm32怎么通信的很多人却是不算太了解的。 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对象在进行析构的时候一定要让底盘停止发送最后一次停止命令报文。这样整个工作环境才是安全的这一点务必要牢记在心。做工业自动化、或者汽车自动驾驶的同学这方面尤其要注意。 7、其他 上面描述的都是正常情况。大家有没有想过如果ros发送的cmd_vel底盘做不了怎么办比如一些robot做不来原地旋转。那么这个时候改哪个程序呢毫无疑问就是publish cmd_vel的程序local_planner。