(6)ROS与STM32之间的联系

简介

1、 如何实现ROS与stm32之间的通信,ROS对stm32发送过来的数据做了哪些处理

2、在ROS小车里面有两个核心控制器,一个是ROS主控,一个是stm32控制器

3、ROS主控是树莓派等,只要能在ROS上面将ROS系统跑起来都可以作为ROS主控

4、ROS主控主要实现的功能有以下三点:

  • 采集雷达信息
  • 摄像头信息采集
  • 路线规划
  • ① 比如建图导航需要用到激光雷达,色觉巡线、色块跟踪的时候就需要用到摄像头
    ② 最终实现都是ROS系统可以根据外界环境和目标地点自动规划路径

5、STM32控制器主要实现的功能有以下三点:

  • 采集里程信息(转速)
  • 采集陀螺仪信息(三轴加速度计和角速度的信息)
  • 电机控制(控制底盘运动)

两者之间的关系

1、ROS主控负责接收stm32发送过来的传感器数据
2、STM32接收ROS主控返回的底盘目标速度
3、ROS主控和STM32控制器之间需要做双向的数据传输
4、所以会涉及到两个控制器之间的通信问题

两者之间的通信

一、硬件连接
1、用USB线连接
2、两者之间需要一个逻辑转化器CP2102(相当于两个不同国家的人之间的交流的一个翻译官)

二、软件设置
1、更改cp2102芯片的serial:
①一般用到两个这样的芯片

  • 一个用于ROS与STM32之间的通信 (0002)
  • 另个是用于激光雷达和ROS主控通信 (0001)

2、更改cp2102芯片的serial的步骤

扫描二维码关注公众号,回复: 12852865 查看本文章
  • ①打开更改serial的软件cb21xx
  • ② 将usb线连接cp2102芯片的一个usb接口,另一边就连接上我们的电脑
  • ③ 刷新一下,再更改

3、创建设备别名

  • 为什么需要设备别名:在运行一个ros程序的时候,需要提供一个端口号(一般是 ttyUSBx),设备每次插拔对应的端口名都会不一样,所以需要一个设备别名来将这个端口号给它固定住
  • 有固定操作步骤

ROS如何在代码层面去接收stm32发送过来的数据

1、整体框架

1、构造函数:在每次创建新对象时执行
2、主函数:主要运行的函数

  • Get_Sensor_Data():获取stm32数据
  • Quaternion_Solution():计算四元素
  • Publish_Odom():发布odom话题
  • Publish——ImuSensor():发布imu话题
  • Publish_Voltage():发布电压话题

3、析构函数:在每次删除所创建对象时执行
4、功能函数:减少代码的重复性
5、回调函数:订阅机器人的目标速度话题,将机器人的目标速度通过串口发给stm32
在这里插入图片描述

2、机器人底盘类

相当于结构体,但成员是函数
在这里插入图片描述

3、构造函数

1、相当于初始化函数,在程序整体运行时,先初始化 变量参数服务器发布者化订阅者串口等。
2、是由主函数自动调用析构函数初始化
在这里插入图片描述

4、主函数

1、ros::init():作用是向rosmaster注册一个节点
2、ROS_INFO():打印信息
3、tuen_on_robot Robot_Control:用这个类来注册对象robot_control
4、control():像一些发布话题、订阅话题都是在这个函数中循环执行
在这里插入图片描述

5、循环功能函数

在这里插入图片描述

6、析构函数

在按Ctrl+c 或者 一些意外退出这个节点的时候,它会运行的一个函数
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46278925/article/details/115008464