• 3
    回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【 2025 DigiKey 杯】基于树莓派搭建的小车自动行驶系统

一、介绍

         本项目设计的系统能够实现小车自主行驶到目标点。该系统融合了上层导航定位模块、轨迹跟踪控制模块以及下层的小车硬件驱动模块。其中导航定位模块是基于小编上届“DigiKey DIY原创大赛”参赛设计进行拓展开发得到的,能够利用双天线的卫星信号数据解算得到小车当前的位置,核心处理器搭载于上次比赛时设计的开发板上。轨迹跟踪控制模块是本次的核心设计,其功能为 i) 接收导航定位模块的发送的小车的实时位置信息,进行坐标系转换并计算实时航向角;ii) 根据ILOS制导律提供小车自动行驶过程中的期望航向角,根据航向角的期望值与实际值的偏差输出控制值;iii) 将控制值下发小车硬件驱动模块,以驱动小车自动行驶至目标点附近,该模块位于基于树莓派搭建的小车上位机上。小车硬件驱动模块搭载于WHEELTEC的小车上,仅使用其基本的小车底层驱动模块。

二、功能框图

三、功能说明

(一)导航定位模块

         导航定位模块展示:

其中, I.MX6ULL 核心板在上届“DigiKey DIY原创大赛”中仅使用了其存储功能。要实现双天线卫星数据的实时解算,需要在开发板上额外编译运行 rtklib 的 rtkrcv 软件,具体步骤与 str2str 软件类似,这里不再赘述。

         rtkrcv 软件详细使用步骤见 rtklib 官网文件。输出的数据传入上位机(树莓派)中,下面为上位机接收到的小车实时位置与航向角的数据展示:

其中,gps_serial_to_utm_node 为上位机中搭建的 ROS2 系统的一个节点,用于实现坐标系的转换与实时航向角的计算(具体见轨迹跟踪控制模块介绍),Lat 表示经度坐标,Lon 为纬度坐标,Alt 为海拔高度,→ UTM 表示将经纬度坐标系转化为 UTM 坐标系,x 和 y 为对应的 UTM 坐标值,Heading 为对应 UTM 坐标系下的航向角。

(二)轨迹跟踪控制模块

         轨迹跟踪控制模块的构建过程如下:

STEP 1: 上位机环境搭建

硬件准备:树莓派 5(8 GB),

                         SD 卡(32 GB),

                      数据线,屏幕线。

软件准备:烧录 Ubuntu 系统

         首先,下载树莓派烧录器 Raspberry Pi lmager,点击下载,

然后,电脑上插入空的SD卡,打开烧录器软件,选择 Raspberry Pi 5→ Other general-purpose OS → Ubuntu,

选择Ubuntu Desktop 24.04.3 LTS(64-bit),

选择SD卡对应位置,

开始写入,写入完成后会开始自动校验,

Ubuntu 系统烧录完成。

注*:如果烧录过程中出错或者断联,再次烧录时需要格式化SD卡后重新烧录,这里小编踩过坑,所以顺手记录了一下解决方法。

·遇到的问题:SD 卡烧录断联,再次插入电脑后显示需要对其格式化的提示,但按照提示点击后显示“Windows无法格式化U盘”的报错。

·解决方法:将U盘连接到电脑,并确定它被电脑检测到,然后单击“开始”并搜索“命令提示符”,右键单击“命令提示符”并选择“以管理员身份运行”,

然后在运行对话框中,输入“diskpart”并按“回车”,之后依次输入以下执行命令,一步一步执行,

list disk
select disk n
clean
create partition primary
format fs=fat32 quick

注意 ,n为U盘对应的磁盘数字,如下图所示,我的U盘对应的是磁盘 2,因此用2代替 n。

将烧录好后的 SD 卡插入树莓派背面卡槽,连接电源给树莓派供电,同时连接屏幕、鼠标、键盘等外设,

开机后,就进入 Ubuntu 系统界面,设置相关信息

全部设置好后,输入密码进入系统,至此上位机基本环境准备完毕。

STEP 2: ROS2 系统搭建与节点编写

         准备好 Ubuntu 24.04 系统之后,就可以着手 ROS2 系统的搭建与配置了,具体搭建过程参考鱼香ROS社区。下面为编写的节点架构:

其中,各节点简介如下

gps_serial_to_utm_node:经纬度坐标转换为UTM坐标,同时解算UTM坐标系下的航向角;

gps_utm_subscriber:获取UTM坐标系下小车的实时位置信息;

imu_publisher:获取UTM坐标系下小车的实时姿态信息;

los_node:根据ILOS制导律计算出小车的期望航向角,结合跟踪控制器输出控制值;

tarkbot_robot:上位机与小车硬件驱动模块的通信节点。

STEP 3: 节点调试运行

编写好节点后,在对应的工作空间下打开终端,输入指令:

source install setup.bash

完成后输入指令开始编译:

colon build

编译完成后,工作空间会自动形成三个文件夹——build、install、log,

启动节点 gps_serial_to_utm_node,输入

ros2 run gps_serial gps_serial node

打印如下信息表示节点顺利启动。

再启动节点 gps_utm_subscriber,输入

ros2 run gps_utm subscriber gps utm_subscriber

可以看到打印的位置信息,

启动节点 imu_publisher,输入

ros2 run imu publisher imu publisher

可以看到打印的姿态信息,

根据上述节点的打印信息,导航定位模块运行调试成功,且与上位机数据传输正常。

下面开启节点 tarkbot_robot,输入

ros2 run tarkbot robot tarkbot robot

运行成功后在终端打印成功连接USB0,波特率为230400:

没有报错提示,说明上位机与小车硬件驱动模块通信正常。

三个模块可以正常通信后,开启节点 los_node,输入

ros2 run los los_node

新开一个终端,配置 los_node 节点,输入

ros2 lifecycle set /los_node configure

显示“Transitioning successful”,且上一个终端显示初始化提示

在新开的终端,继续激活 los_node 节点,输入

ros2 lifecycle set /los_node activate

显示“Transitioning successful”,且上一个终端显示节点激活

输入指令行,设置目标点位置

ros2 param set /los_node wpt_pos "[238791,3987731]"

此时,自动行驶模式开启,对应的 los_node 节点显示如下。

(三)小车硬件驱动模块

         小车硬件驱动模块的核心驱动板如下:

与上位机通信的串口 3 如下图所示:

小车驱动板接收的上位机的数据格式如下图所示:

(1)帧头:固定值 0x7B,标识数据包的开始,占一个字节;

(2)预留位:第 2、3 个字节均为预留位,无意义,各占一个字节;

(3)X 轴目标速度:期望速度的前进分量,单位 mm/s,占两个字节;

(4)Y 轴目标速度:期望速度的横移分量,单位 mm/s,占两个字节;

(5)Z 轴目标速度:期望偏航角速度的1000 倍,单位 rad/s,占两个字节;

(6)数据校验位:前 9 个字节异或校验(BCC 校验)的结果,占一个字节;

(7)帧尾:固定值 0x7D,标识数据包的结束,占一个字节。

对应上述提供的数据帧格式,上位机下发的速度控制命令应由 11 个字节组成,每个字节包含 8 位数据。小车自动行驶过程中,速度设置为恒定值 0.2 m/s,期望航向角由 ILOS 算法给出,根据几何分解得到 X 和 Y 轴的速度分量,控制值转化为对应的数据格式下发到小车驱动板中,从而驱动小车运动。

四、演示视频

【 2025 DigiKey 杯】基于树莓派搭建的小车自动行驶系统——成果展示_哔哩哔哩_bilibili

五、花絮

上位机系统展示:

涉及的节点文件展示:

(1)节点 gps_serial_to_utm_node 所在文件夹为 gps_serial

(2)节点 gps_utm_subscriber 所在文件夹为 gps_utm_subscriber

(3)节点 imu_publisher 所在文件夹为 imu_publisher

(4)节点 los_node 所在文件夹为 los

(5)节点 tarkbot_robot 所在文件夹为 tarkbot_robot_serial

最终设备展示(小车行驶过程中,为了避免树莓派滑落,安置在夹板中间空隙处):

调试过程中遇到的问题:

初始设备搭载的天线如下,

搭载该天线时,获取到的小车位置精度较低,因此解算出的实时航向角误差较大,这导致小车在自动行驶时,实施航向角与期望航向角之间的误差较大且跳变频繁,出现下面视频中轮子左右摇摆前进的情况,因此后续替换为上图最终的大蘑菇头天线。

调试花絮_哔哩哔哩_bilibili

六、物料清单

(1)树莓派 5(8 GB)

(2)和芯星通板卡 UB482

(3)核心板 I.MX6ULL

(4)32GB SD卡

(5)WHEELTEC R550 PLUS 小车

(6)便携式显示屏

(7)电源

(8)数据线、网线、屏幕连接线若干

七、视频展示:

 

全部回复(3)
正序查看
倒序查看
03-07 11:31

【DigiKey杯点评】+基于树莓派搭建的小车自动行驶系统项目,它采用了采用双天线RTK-GPS导航+树莓派轨迹跟踪控制的分层架构。双天线RTK-GPS(载波相位差分技术),定位的精度我查了下,行难呢过好一点的,定位精度可达厘米级,可以说是远远够用的。相比普通GPS(普通的精度大概在5-10米),实现了质的飞跃,可以说完胜。而且双天线不仅能定位,还能解算航向角,无需磁力计,这个也算是另一个优点,可以在后期拐弯上节省传感器。

但是目前的方案系统仅有定位和控制,无任何环境感知能力,对于路障之类的识别和避让,还存在缺失,在复杂的现实环境中极易发生碰撞,所以还后期再继续完善,否则就只能停留在样机阶段。

另外RTK需要基站差分数据,在无基站区域退化为单点定位,精度骤降,还可能丢失数据,在室内等遮挡环境下,就没办法正常工作了。也算是另一个遗憾吧

0
回复
fzwwj95
LV.7
3
03-24 17:19

【DigiKey杯点评】这不是简单的“会跑小车”,而是把导航定位、航向解算、轨迹跟踪和底盘控制整合到了一起。尤其引入 ILOS 制导律这一点,说明作者在算法层面也有认真下功夫,作品整体技术深度比普通巡线避障类项目更高。

0
回复
only one
LV.8
4
03-26 00:02

ii) 根据ILOS制导律提供小车自动行驶过程中的期望航向角,根据航向角的期望值与实际值的偏差输出控制值;iii) 将控制值下发小车硬件驱动模块,以驱动小车自动行驶至目标点附近,真的假的?

0
回复