差分底盘与 ROS 上位机对接产品系统

我要开发同款
全栈开发Xeno2026年07月14日
5阅读

技术信息

语言技术
C++CEmbeddedSystemIoT
系统类型
嵌入式硬件Linux
行业分类
智能硬件物联网

作品详情

行业场景

立项原因:公司原有老款差分底盘采用老旧主控方案,编码器精度不足、IMU 数据未融合、上位机协议杂乱,导致视觉小车底盘走不直、里程计漂移大、与 ROS 导航栈对接困难,无法支撑后续视觉导航产品的落地。本项目的目标是把底盘主控统一换成 STM32F103、加装 500 线编码器与 MPU9250 九轴 IMU、重新设计一套带 CRC 校验的 5A 串口协议,让底盘能被 ROS 的 /cmd_vel 话题稳定驱动,并把里程计和 IMU 数据回传给导航栈,解决老底盘走不直、位姿估算不准、协议不可靠三个核心问题。

行业场景:服务机器人/视觉导航小车底盘,属于机器人移动平台底座层,是上层视觉、SLAM、导航算法的硬件承载层。差分底盘是两轮差速驱动结构,通过左右轮速差实现转向,是室内服务机器人最常用的底盘形态,广泛用于送餐、清洁、巡检等场景。

功能介绍

1、编码器测速模块:利用 STM32 定时器编码器模式(TI1+TI2 四倍频)实时采集 500 线编码器脉冲,换算成左右轮线速度,作为 PID 调速和里程计解算的输入。

2、IMU 九轴姿态解算模块:读取 MPU9250 的加速度计、陀螺仪、磁力计数据,用互补滤波算法融合六轴姿态,并对磁场干扰做屏蔽处理,输出稳定的航向角、俯仰角、横滚角。

3、5A 串口协议模块:自主设计的一套面向底盘的串口通信协议,包含速度指令、IMU 数据、电池电压、里程计、版本号、重启等全套命令码,每个数据帧带 CRC-8/MAXIM 校验保证可靠性。

4、ROS 上位机对接模块:接收 ROS 下发的 /cmd_vel 速度指令(线速度+角速度),解算成左右轮目标 PWM;同时把里程计(/odom)和 IMU 数据(/imu/data)按 ROS 标准话题格式回传,供导航栈使用。

5、直线走直线补偿模块:针对两轮机械误差导致的走偏,加入线速度/角速度补偿算法,让底盘在收到直行指令时能保持直线运动。

6、开机 PWM 安全初始化模块:上电时先把电机 PWM 引脚置为安全状态,避免上电瞬间电机乱转。

项目实现

我负责的具体任务:主控芯片选型(STM32F103)、编码器硬件加装与四倍频测速算法实现、MPU9250 九轴 IMU 读取与互补滤波姿态解算算法实现、5A 串口协议全套命令码设计与编码实现、ROS 上位机话题对接联调、直线走直线补偿算法、整机调试与问题排错、开发日志编写。

技术栈与架构亮点:底层用 STM32F103 裸机 C 开发,定时器编码器模式实现四倍频测速,精度比普通外部中断计数提升 4 倍;IMU 部分用互补滤波而非卡尔曼,兼顾实时性和算力开销,并对磁场做屏蔽处理避免金属干扰;通信层自研 5A 协议,每个数据帧带 CRC-8/MAXIM 校验,相比裸串口传输大幅降低误码率;与 ROS 对接时严格遵循 /cmd_vel、/odom、/imu/data 标准话题格式,让底盘可直接接入 gmapping、move_base 等主流导航栈。

难点:1)编码器四倍频在高速时脉冲丢失问题,通过调整定时器分频和中断优先级解决;2)MPU9250 磁力计在金属底盘附近受干扰严重,最终弃用磁场只用六轴,靠陀螺仪长期积分补偿;3)5A 协议与 ROS 联调时里程计坐标系对齐问题,反复标定底盘参数表才把走直线误差压到可接受范围。

示例图片

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论