Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于树莓派 4B 和 STM32 的 ROS 差速机器人

Raspberry Pi 4B + STM32 differential-drive ROS robot

ROS differential-drive robot prototype

v1 实物原型图。v2 延续 2WD 差速底盘思路,并更新为 ROS Noetic、STM32F1 和 YDLIDAR-X2。

ROS_DIFF 是本仓库名称,其中 DIFF 表示 differential drive,即双轮差速驱动。项目记录了一台基于 Raspberry Pi 4B 和 STM32 的 ROS 小车从早期版本到 v2 的重构过程,包含 ROS 上位机、STM32 下位机、URDF、建图导航配置和部署文档。

当前主线版本:v2.2.0

Features

  • 自定义 STM32 底盘串口协议,使用 CRC-8/MAXIM 校验。
  • ROS Noetic 上位机节点,支持 /cmd_vel、里程计、TF、IMU、BatteryState 和 /car_state 底盘状态话题。
  • YDLIDAR-X2 激光雷达接入,面向 gmapping、AMCL 和 move_base。
  • 差速底盘 URDF、costmap footprint、gmapping、AMCL、move_base 和 DWA 配置。
  • STM32 端包含电机闭环、编码器累计计数、MPU6050、底盘测试接口和电池电压检测。
  • 平板/手机网页控制台,支持触摸遥控、地图显示、建图保存、初始位姿和导航目标操作。
  • 配套 PID 调试网页和 URDF 参数编辑器,便于底盘移植和参数维护。

Software Architecture

flowchart LR
  subgraph UI["Operator devices"]
    RViz["RViz / teleop"]
    Tablet["Tablet web control"]
  end

  subgraph RPI["Raspberry Pi 4B · ROS Noetic"]
    Bringup["bringup.launch"]
    Base["base_controller"]
    SLAM["gmapping"]
    Nav["AMCL + move_base"]
    URDF["robot_state_publisher"]
    Web["myrobot_web + rosbridge"]
  end

  subgraph MCU["STM32F103"]
    Serial["CRC serial protocol"]
    Control["motor PID"]
    Sensors["encoders / MPU6050 / battery ADC"]
  end

  Lidar["YDLIDAR-X2"] -->|/scan| SLAM
  Lidar -->|/scan| Nav
  RViz -->|/cmd_vel / goals| RPI
  Tablet <-->|WebSocket| Web
  Web -->|mode control| Bringup
  Web -->|/cmd_vel| Base
  Web -->|goals| Nav
  Bringup --> Base
  Base <-->|rpm command / feedback| Serial
  Serial --> Control
  Sensors --> Serial
  Base -->|/odom / TF / imu / battery| RPI
  URDF --> RPI
Loading

Tablet Web Control

ROS_DIFF v2 tablet web navigation interface

平板浏览器中的实车导航界面:地图、触摸遥控、电池状态、初始位姿和导航目标集中在同一页面。

Hardware Overview

项目 当前配置
底盘 2WD 差速底盘,前万向轮
上位机 Raspberry Pi 4B 2GB,Ubuntu 20.04 Server,ROS Noetic
下位机 STM32F103,HAL/Keil 工程
雷达 YDLIDAR-X2,默认设备 /dev/ydlidar
底盘串口 默认设备 /dev/chassis,115200 8N1
驱动轮 直径 48 mm,轮宽 19 mm
有效轮距 初值 129 mm
有效轮周长 0.144764589 m,由底盘标定得到
雷达位姿 x=+0.080 m, y=0, z=+0.130 m, yaw=pi
IMU MPU6050,可通过 launch 参数切换是否参与 yaw 融合

完整尺寸、引脚和坐标说明见 ros_diff_v2/docs/hardware_v2.md

Repository Layout

路径 说明
ros_diff_v1/ 早期 ROS/STM32F4 版本,作为历史参考保留。
ros_diff_v2/ 当前主线版本,面向 Raspberry Pi 4B、ROS Noetic、STM32F1 和 YDLIDAR-X2。
ros_diff_v2/catkin_ws/ ROS Noetic 工作空间。
ros_diff_v2/catkin_ws/src/myrobot_web/ 平板网页控制台和运行模式管理节点。
ros_diff_v2/stm32f1/ STM32F103 下位机工程。
ros_diff_v2/docs/ v2 部署、协议、硬件、建图导航和排错文档。
VERSION 当前公开版本号。
CHANGELOG.md 版本变更记录。

Quick Start

cd ~
git clone https://github.com/NishimiyaShoukou/ROS_DIFF.git
cd ~/ROS_DIFF/ros_diff_v2/catkin_ws
rosdep install --from-paths src --ignore-src --rosdistro noetic -r -y --skip-keys="ydlidar_ros_driver rviz usb_cam"
catkin_make
source devel/setup.bash

启动底盘和雷达:

roslaunch myrobot bringup.launch enable_lidar:=true use_imu_yaw:=false

也可以由平板网页统一启动和操作:

sudo apt install ros-noetic-rosbridge-server
roslaunch myrobot_web mobile_control.launch

平板连接同一 Wi-Fi 后访问 http://<raspberry-pi-ip>:8080

建图:

roslaunch myrobot mapping_v2.launch use_imu_yaw:=false use_ekf:=false rviz:=false

键盘遥控:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py _speed:=0.08 _turn:=0.35 _repeat_rate:=10.0 _key_timeout:=0.5

导航:

roslaunch myrobot navigation_v2.launch map_file:=/home/ubuntu/maps/home.yaml use_imu_yaw:=false use_ekf:=false rviz:=false

树莓派 4B 2GB 不建议本机运行 RViz。推荐树莓派只运行 ROS 节点,在 PC 或虚拟机中远程查看 RViz。

Documentation

Versioning

仓库采用简单的版本管理方式:

  • main 保持当前可运行主线。
  • ros_diff_v1/ 作为历史版本参考。
  • ros_diff_v2/ 作为当前开发和调试主线。
  • v2.x.y Git tag 标记功能相对完整的版本。
  • 发布时同步更新 VERSIONCHANGELOG.md 和 ROS package.xml

About

基于树莓派4B和stm32的ros机器人

Resources

Contributing

Stars

52 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages