【2024 DigiKey创意大赛】基于Raspberry Pi 5的三全向轮自动导航小车
本帖最后由 FFD8 于 2024-11-11 13:30 编辑# 【2024 DigiKey创意大赛】基于Raspberry Pi 5的三全向轮自动导航小车
## 一、作品简介
### 1.1 功能介绍:
利用Raspberry Pi 5、激光雷达等硬件,基于ROS系统,完成一款具有路径规划,自主导航的三轮小车。通过传感器技术和智能算法,实现室内外环境的自动导航和避障功能。
------------
本次项目计划通过软件仿真和实物设计两部分完成:
**1、仿真部分:**在ubuntu搭建机器人系统仿真环境,仿真实现涉及的内容主要有:
1.1. 对机器人建模(URDF)
2.2. 创建仿真环境(Gazebo)
3.3. 感知环境(Rviz)等系统性实现。
**2、实物部分:**搭建机器人实物系统,构建环境地图,驱动小车按照既定路径运动。
### 1.2 物料清单:
大赛经费购买部分:Raspberry Pi 5、BME280、BME680
自备物料部分:stm32、电机驱动、底盘车体等;导航激光:YDlidar X2L等
设计参考:http://www.autolabor.com.cn/book/ROSTutorials/
## 二、系统框图
### 2.1 软硬件设计:
### 2.2系统架构
机器人导航主要涉及:
1、全局地图 2、自身定位 3、路径规划 4、运动控制 5、环境感知
1. 全局地图
SLAM(simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建,或并发建图与定位。SLAM问题可以描述为: 机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和地图进行自身定位,同时在自身定位的基础上建造增量式地图,以绘制出外部环境的完全地图。
2. 自身定位
amcl(adaptiveMonteCarloLocalization)自适应的蒙特卡洛定位,是用于2D移动机器人的概率定位系统。它实现了自适应(或KLD采样)蒙特卡洛定位方法,该方法使用粒子过滤器根据已知地图跟踪机器人的姿态。
3. 路径规划
导航就是机器人从A点运动至B点的过程,在这一过程中,机器人需要根据目标位置计算全局运动路线,并且在运动过程中,还需要时时根据出现的一些动态障碍物调整运动路线,直至到达目标点,该过程就称之为路径规划。在 ROS 中提供了 move_base 包来实现路径规则,该功能包主要由两大规划器组成:
全局路径规划(gloable_planner):根据给定的目标点和全局地图实现总体的路径规划,使用 Dijkstra 或 A* 算法进行全局路径规划,计算最优路线,作为全局路线
本地时时规划(local_planner):在实际导航过程中,机器人可能无法按照给定的全局最优路线运行,比如:机器人在运行中,可能会随时出现一定的障碍物。本地规划的作用就是使用一定算法(Dynamic Window Approaches) 来实现障碍物的规避,并选取当前最优路径以尽量符合全局最优路径
全局路径规划与本地路径规划是相对的,全局路径规划侧重于全局、宏观实现,而本地路径规划侧重与当前、微观实现。
4. 运动控制
导航功能包集假定它可以通过话题“cmd_vel”发布geometry_msgs/Twist类型的消息,这个消息基于机器人的基座坐标系,它传递的是运动命令。这意味着必须有一个节点订阅“cmd_vel”话题, 将该话题上的速度命令转换为电机命令并发送。
5. 环境感知
感知周围环境信息,比如: 摄像头、激光雷达、编码器。摄像头、激光雷达可以用于感知外界环境的深度信息,编码器可以感知电机的转速信息,进而可以获取速度信息并生成里程计信息。
在导航功能包集中,环境感知也是一重要模块实现,它为其他模块提供了支持。其他模块诸如: SLAM、amcl、move_base 都需要依赖于环境感知。
------------
## 三、各部分功能说明
### 3.1 仿真部分实现
该部分将在仿真环境,简易实现小车的模型设计,slam建图,导航控制等功能。
仿真环境搭建于ubuntu1404系统,用到的相关组件有:urdf,rvize,gazebo等。
**URDF:**是 Unified Robot Description Format 的首字母缩写,直译为统一(标准化)机器人描述格式,可以以一种 XML 的方式描述机器人的部分结构。
**rviz:** 是 ROS Visualization Tool 的首字母缩写,直译为ROS的三维可视化工具。它的主要目的是以三维方式显示ROS消息,可以将 数据进行可视化表达。
**gazebo:**是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。
机器人的系统仿真是一种集成实现,主要包含三部分:
- 1、URDF 用于创建机器人模型
- 2、Gzebo 用于搭建仿真环境
- 3、Rviz 图形化的显示机器人各种传感器感知到的环境信息
### 具体环境搭建步骤如下(详情参考下方视频):
#### 1、虚拟机、ubuntu1404系统安装略;
#### 2、安装ros-melotic:wget http://fishros.com/install -O fishros && . fishros
#### 3、安装功能包:
安装 gmapping 包(用于构建地图):sudo apt install ros-melodic-gmapping
安装地图服务包(用于保存与读取地图):sudo apt install ros-melodic-map-server
安装 navigation 包(用于定位以及路径规划):sudo apt install ros-melodic-navigation
#### 4、编写launch文件(直接使用编写好的文件即可)
#### 5、实现slam建图:
5.0:环境配置:source ./devel/setup.bash
5.1:启动gazebo仿真环境:roslaunch urdf_gazebo demo03_env.launch
5.2:启动地图绘制launch:roslaunch nav_demo nav_01_slam.launch
5.3:启动键盘控制节点:rosrun teleop_twist_keyboard teleop_twist_keyboard.py
5.4:通过键盘控制仿真机器人在模拟环境中运动,直到探索完整个地图
5.5:保存地图:roslaunch nav_demo nav_02_map_save.launch ,成功运行后会再本地生成pgm地图
#### 6、定位:roslaunch nav_demo test_amcl.launch
#### 7、导航:roslaunch nav_demo nav_06_test.launch
**开始导航**
**导航中**
**完成导航**
### 3.2 实物部分实现
#### 3.2.1 树莓派串口通信
**1、修改配置文件,开启uart2,3,4,5:**
sudo vim /boot/firmware/config.txt#(ubuntu是这个,raspiberrypi是/boot/config)
在文件最后增加:
dtoverlay = uart2
dtoverlay = uart3
dtoverlay = uart4
dtoverlay = uart5
reboot重启后,dev中会增加相关设备名称:
**2、安装libmodbus库**
2.1 上传modbus.zip库文件到树莓派
2.2 解压缩源码压缩包:unzip modbus.zip
2.3 进入源码目录 cd libbodbus-master/
2.4 运行:./autogen.sh
2.5 新建install文件夹:mkdir install
2.6 运行:
```c
./configure --prefix=/home/ubuntu/libmodbus-master/install/
```
2.7 编译:make
2.8 安装:make install
2.9 拷贝共享库
**3、编译测试程序**
3.1 上传测试程序modbus-test.zip到树莓派
3.2 编译,生成可执行程序modus_test
3.3 树莓派引脚图如下:
各 UART 串口与 GPIO(对应的是BCM编码) 对应关系:
UART0: GPIO14 = TXD0 -> ttyAMA0 GPIO15 = RXD0 -> ttyAMA0
UART2: GPIO0= TXD2 -> ttyAMA1 GPIO1= RXD2 -> ttyAMA1
UART3: GPIO4= TXD3 -> ttyAMA2 GPIO5= RXD3 -> ttyAMA2
UART4: GPIO8= TXD4 -> ttyAMA3 GPIO9= RXD4 -> ttyAMA3
UART5: GPIO12 = TXD5 -> ttyAMA4 GPIO13 = RXD5 -> ttyAMA4
**4、测试方法:**
4.1 程序包含了RTU协议的主机和从机模式,可以启动程序后自由选择
4.2 选择待测试的两个串口(UART2、UART5),用杜邦线连接,UART2的Rx,Tx连接UART5的Tx,Rx;
4.3 开两个终端,启动程序./modus_test和./modus_test ttyAMA4,(程序后面带的参数是设备号)
4.4 程序启动后需要选择运行模式:主机、从机,一个程序选主机、另一个选从机
正常运行将如下打印:
#### 3.2.2 chassis_node节点
底盘控制节点与stm32通过串口,以modbus-rtu协议通信,实现各个电机的速度解算及反馈里程信息计算。
底盘全向轮安装示意图:
stm32接线定义:
#### 3.2.3 keycontrol_node节点
ros原本的键盘控制节点不太好用,根据实际情况重新写了键盘控制节点发布cmd_vel话题。
开启该节点后使用方法如下:
#### 3.2.4 ladir_node节点
参考官方使用手册,加载ros源码即可。
#### 3.2.5 底盘控制功能
1、启动底盘节点:rosrun chassis_driver chassis_driver_node
2、启动键盘控制节点:rosrun chassis_driver keypad_control_node
通过按键发布速度指令,控制小车移动,同时在rvize中可以添加小车模型,查看odom数据。
d8dce2b234987ffccf6b3652ab77bc43<br/>
#### 3.2.6 建图功能
1、启动gmapping建图:roslaunch mycar_description gmapping.launch
2、在rvize中查看实时扫描的地图
3、在环境中放置一个障碍物,控制小车运动,探索周围环境,开始建图。
e33a0aa8bb4fd8c27b3d633b9dc1ad05<br/>
#### 3.2.6 保存地图功能
1、启动保存建图:roslaunch mycar_description map_save.launch
2、在map文件夹下查看建好的地图pgm文件。
94318f034a920fbeb5c4b769f24187f6<br/>
## 四、作品源码
### 4.1 仿真部分:
### 4.2 实物部分:
stm32驱动:https://gitee.com/FFD8/STM32F100RBT_robot
树莓派ros系统:
## 五、作品功能演示视频
### 仿真部分:
70879fd8073f2359a644efe3f79ea899<br/>
### 实物部分:
21e976744e33865dbf7270466c6526f2<br/>
## 六、项目总结
非常有幸能够参加此次创意大赛,这不仅是一次展示自己创意的机会,更是一个宝贵的学习平台。在比赛的过程中,我通过与其他参赛者的交流与合作,不仅增强了团队协作能力,还提升了解决实际问题的技巧。同时,我深入了解了相关领域的最新技术和创新思路,进一步拓宽了自己的知识面。
通过这次经历,我更加明确了自己未来的学习方向和创新潜力,也收获了宝贵的经验,期待未来能有更多的机会参与此类活动。
再次感谢DigiKey、EEworld对“2024 DigiKey 创意大赛”的大力支持,希望越办越好。
------------
其他相关帖:
【2024 DigiKey 创意大赛】-1、物料开箱帖:https://bbs.eeworld.com.cn/thread-1290219-1-1.html
## 七、其他
------------
页:
[1]