# ChiBot **Repository Path**: starpick/ChiBot ## Basic Information - **Project Name**: ChiBot - **Description**: bjtu26年大创软件库,一种四足履带异构式的室内环境机器人。 - **Primary Language**: C - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-22 - **Last Updated**: 2026-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ChiBot BJTU 2026 年机电学院大学生创新创业训练计划项目软件库(做得有点烂。。。。主要还是搭了一个硬件框架,软件还有很多可以优化的。。。 ## 项目简介 ChiBot 是一款基于 **ROS2 Humble** 的四足履带式救援机器人平台,集成激光雷达、IMU、多路摄像头等多种传感器,支持 SLAM 实时建图、自主导航、远程 MQTT 控制和人体跟随等功能,可应用于危险环境探测、搜索救援等场景。 ### 硬件平台 | 组件 | 型号 | 参数 | | ---- | ------------------ | -------------------------- | | 主控板 | RDK X5 旭日X5 | 8核 ARM Cortex-A76, 8GB RAM | | 激光雷达 | Bluesea LDS-E200-R | 360°扫描, 0.1\~8m, 10Hz | | IMU | BNO055 | 九轴, 100Hz, I2C接口 | | 摄像头1 | USB摄像头 (前置) | MJPEG, 1280×720\@30fps | | 摄像头2 | MIPI摄像头 (后置) | NV12, 1280×720 | | 摄像头3 | MIPI摄像头 (前置) | NV12, 1280×720 | | 电机驱动 | 串口通信 | 115200bps, 4路编码电机 | | 舵机驱动 | 串口通信 | 115200bps,8路舵机 | ### 主要功能 - **环境感知**: 激光雷达障碍物检测、IMU姿态测量、多路摄像头图像采集 - **定位建图**: 2D SLAM 实时建图、EKF 多传感器融合定位 - **自主导航**: 路径规划、障碍规避、目标点导航 - **远程控制**: MQTT 协议远程控制、状态监控、图像回传 - **任务控制**: 手动/自动模式切换、探索建图、回起点、人体跟随 - **云台控制**: 2自由度云台 (偏航+俯仰) ### TF 坐标变换树 ``` map (slam_toolbox 发布) └── odom (slam_toolbox 发布) └── base_link (EKF 融合后发布) ├── laser_frame (static_transform_publisher) ├── imu_link (static_transform_publisher) ├── camera1_link (static_transform_publisher) ├── camera2_link (static_transform_publisher) └── camera3_link (static_transform_publisher) ``` ## 项目结构 ``` hobot/ ├── src/ │ ├── bluesea2/ # 蓝海激光雷达驱动 (C++) │ │ ├── include/ # 头文件 │ │ ├── src/ # 源文件 (TCP/UDP/UART 通信、数据解析) │ │ ├── launch/ # 启动文件 │ │ └── params/ # 各型号激光雷达参数配置 │ │ │ ├── bno055_imu/ # BNO055 IMU 传感器驱动 (C++) │ │ ├── include/bno055_imu/ # BNO055 驱动头文件 │ │ ├── src/ # ROS2 节点实现 │ │ └── test/ # 单元测试 │ │ │ ├── hobot_robot_control/ # 机器人控制 (Python + ament_cmake) │ │ ├── config/ # URDF模型 + EKF配置 │ │ ├── launch/ # 启动文件 (电机/舵机/云台) │ │ ├── meshes/ # STL 3D模型 │ │ ├── motor_driver_node.py # 电机驱动节点 │ │ ├── servo_controller.py # 舵机控制器 │ │ ├── gimbal_controller.py # 云台控制器 │ │ └── eskf_fusion_node.py # ESKF 里程计融合 │ │ │ ├── hobot_slam/ # SLAM 与导航 (ament_cmake) │ │ ├── config/ # Nav2 + SLAM Toolbox 配置 │ │ ├── launch/ # 启动文件 │ │ └── DOC/ # 文档 │ │ │ ├── hobot_mqtt/ # MQTT 远程通信 (ament_python) │ │ ├── hobot_mqtt/ # Python 模块 │ │ │ ├── mqtt_client.py # MQTT 客户端 │ │ │ ├── subscriber.py # 订阅节点 (遥控指令) │ │ │ ├── image_publisher.py # 图像发布 │ │ │ ├── map_publisher.py # 地图发布 │ │ │ ├── status_publisher.py# 状态发布 │ │ │ └── nav_publisher.py # 导航状态发布 │ │ ├── launch/ # 启动文件 │ │ └── test/ # 测试 │ │ │ ├── body_tracking/ # 人体检测与跟随 (C++) │ │ ├── include/ # 头文件 │ │ ├── src/ # 源文件 │ │ └── launch/ # 启动文件 │ │ │ └── RescueRobot.SLDASM/ # URDF 机器人模型 (ament_cmake) │ ├── config/ # 关节配置 │ ├── meshes/ # STL 模型文件 │ └── urdf/ # URDF 描述文件 │ └── doc/ # 项目文档 ├── ChiBot技术方案.md # 完整技术方案 ├── 系统架构文档.md # 系统架构说明 ├── 软件框图说明书.md # 软件框图详细说明 ├── EKF.md # EKF 融合算法说明 ├── MQTT_PROTOCOL.md # MQTT 通信协议 ├── 云台节点使用说明.md # 云台控制说明 └── 跟随模式对接说明.md # 人体跟随模式说明 ``` ## 快速开始 ### 环境要求 - **操作系统**: Ubuntu 22.04 (RDK X5 平台) - **ROS2 版本**: Humble - **依赖包**: - `slam_toolbox` - SLAM 建图 - `nav2_*` - 导航栈 - `robot_localization` - EKF 里程计融合 - `hobot_usb_cam` - USB 摄像头驱动 (TROS 自带) - `hobot_shm` - 共享内存 FastDDS 配置 (TROS 自带) - `hobot_codec` - 硬件编解码器 (TROS 自带) - `mipi_cam` - MIPI 摄像头驱动 (TROS 自带) ### 构建 ```bash cd hobot colcon build --symlink-install source install/setup.bash ``` ### 运行 #### 主程序启动 ```bash ros2 launch hobot_slam robot.launch.py ``` #### 常用启动参数 ```bash # 仅建图 (无导航) ros2 launch hobot_slam robot.launch.py nav2_enabled:=False # 加载已有地图导航 (无建图) ros2 launch hobot_slam robot.launch.py slam_enabled:=False nav2_enabled:=True map:=/path/to/map.yaml # 启用多路摄像头 ros2 launch hobot_slam robot.launch.py mipi2_enabled:=True mipi3_enabled:=True # 自定义 MQTT broker ros2 launch hobot_slam robot.launch.py mqtt_broker:=192.168.1.100 mqtt_port:=1883 # 禁用传感器 (调试模式) ros2 launch hobot_slam robot.launch.py sensors_enabled:=False # 仅启动电机控制 ros2 launch hobot_robot_control motor_control.launch.py ``` #### 启动参数说明 | 参数 | 默认值 | 说明 | | ----------------- | ------------- | --------------- | | `sensors_enabled` | True | 是否启用所有传感器节点 | | `lidar_enabled` | True | 是否启用激光雷达 | | `imu_enabled` | True | 是否启用 IMU | | `motor_enabled` | True | 是否启动电机驱动及里程计 | | `servo_enabled` | True | 是否启动舵机控制板 | | `gimbal_enabled` | True | 是否启动云台控制 | | `slam_enabled` | False | 是否启用 SLAM 建图 | | `nav2_enabled` | False | 是否启用 Nav2 导航 | | `mqtt_enabled` | True | 是否启用 MQTT 通信 | | `mqtt_broker` | 100.103.55.87 | MQTT Broker 地址 | | `usb1_enabled` | True | 是否启用前置 USB 摄像头 | | `mipi2_enabled` | False | 是否启用后置 MIPI 摄像头 | | `mipi3_enabled` | False | 是否启用顶部 MIPI 摄像头 | ## 核心模块 ### 1. 激光雷达驱动 (bluesea2) 驱动 Bluesea LDS-E200-R 激光雷达,支持 TCP、UDP、UART 三种通信方式。 - **扫描角度**: 360° - **测距范围**: 0.1\~8.0 m - **扫描频率**: 10 Hz - **发布话题**: `/scan` (sensor\_msgs/LaserScan) ### 2. IMU 驱动 (bno055\_imu) 驱动 BNO055 九轴 IMU 传感器,通过 I2C 总线通信。 - **发布频率**: 50 Hz - **发布话题**: - `/imu/data` - IMU 数据 (加速度、角速度) - `/imu/mag` - 磁力计数据 - `/imu/temp` - 温度数据 ### 3. 机器人控制 (hobot\_robot\_control) 机器人硬件接口和控制逻辑,通过串口与下位机通信。 - **电机驱动**: 串口通信,115200bps,4路电机 - **舵机控制**: 24路舵机控制板,支持单舵机/多舵机同步/动作组 - **云台控制**: 2自由度云台 (偏航+俯仰) - **里程计融合**: EKF 融合 `/odom_raw` + `/imu/data` → `/odom` ### 4. SLAM 与导航 (hobot\_slam) 基于 SLAM Toolbox 实现 2D SLAM 建图,Nav2 实现自主导航。 - **建图模式**: 同步/异步 SLAM - **回环检测**: 支持 - **导航功能**: 全局路径规划 + 局部避障 ### 5. MQTT 通信 (hobot\_mqtt) 实现机器人与远程服务器的 MQTT 通信桥接。 - **控制指令**: 接收远程速度指令 → `/cmd_vel_mqtt` - **状态上报**: 里程计、IMU 数据 → `robot/status` - **图像传输**: 多路摄像头图像 → `robot/camera` - **地图传输**: SLAM 地图 → `robot/map` ### 6. 人体检测与跟随 (body\_tracking) 基于地平线 BPU 的人体检测与跟随功能。 - **人体检测**: 利用 RDK X5 BPU 加速推理 - **跟随模式**: 根据人体位置生成速度指令 ## 话题列表 | 话题 | 类型 | 频率 | 说明 | | -------------------------- | ---------------------------- | ----- | ----------- | | `/scan` | sensor\_msgs/LaserScan | 10Hz | 激光扫描数据 | | `/imu/data` | sensor\_msgs/Imu | 50Hz | IMU 数据 | | `/imu/mag` | sensor\_msgs/MagneticField | 50Hz | 磁力计数据 | | `/imu/temp` | sensor\_msgs/Temperature | 10Hz | 温度数据 | | `/odom_raw` | nav\_msgs/Odometry | 20Hz | 轮式里程计 | | `/odom` | nav\_msgs/Odometry | 50Hz | 融合后里程计 | | `/map` | nav\_msgs/OccupancyGrid | 0.2Hz | 占据栅格地图 | | `/cmd_vel` | geometry\_msgs/Twist | 20Hz | 速度控制指令 | | `/cmd_vel_mqtt` | geometry\_msgs/Twist | - | MQTT 遥控指令 | | `/cmd_vel_nav2` | geometry\_msgs/Twist | - | Nav2 导航指令 | | `/camera1/image_raw` | sensor\_msgs/Image | 30Hz | 前置 USB 摄像头 | | `/camera2_mipi_image_jpeg` | sensor\_msgs/CompressedImage | 30Hz | 后置 MIPI 摄像头 | | `/camera3_mipi_image_jpeg` | sensor\_msgs/CompressedImage | 30Hz | 顶部 MIPI 摄像头 | ## 测试 ```bash # 构建并测试 colcon build --symlink-install colcon test colcon test-result --verbose # 单包测试 colcon test --packages-select hobot_mqtt colcon test-result --verbose # C++ 包 lint cd src/bluesea2 && ament_cpplint # Python 包 lint cd src/hobot_mqtt && python3 -m flake8 hobot_mqtt/ ``` ## 文档 详细技术文档请参考 `doc/` 目录: - [ChiBot技术方案](doc/ChiBot技术方案.md) - 完整技术方案 - [系统架构文档](doc/系统架构文档.md) - 系统架构说明 - [软件框图说明书](doc/软件框图说明书.md) - 软件框图详细说明 - [EKF融合算法](doc/EKF.md) - EKF 里程计融合算法 - [MQTT通信协议](doc/MQTT_PROTOCOL.md) - MQTT 通信协议定义 - [云台节点使用说明](doc/云台节点使用说明.md) - 云台控制使用说明 - [跟随模式对接说明](doc/跟随模式对接说明.md) - 人体跟随模式对接说明 ## 许可证 本项目采用 MIT 许可证。