Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unitree B2 垃圾巡检与自动抓取系统

这是一个面向实地部署的 ROS 2 工程:Unitree B2 在外部导航系统控制下完成建图、重定位和巡航;本仓库负责发现垃圾后的视觉接近、停车、下蹲、机械臂抓取、垃圾桶投放以及恢复巡航。

硬件安全提示

当前版本包含真实底盘、机械臂和串口执行代码。机械臂节点启动时可能连接控制器、打开垃圾桶并移动到待机位;use_sim_time 不是硬件仿真开关。首次迁移到新机器狗或新主机时,不要直接运行完整 launch。请先完成 迁移指南验收清单

系统边界

Unitree 外部导航(建图 / 重定位 / 巡航)
                    │
                    ▼
前视相机 → YOLO 感知 → 视觉伺服接近 → 目标进入 ROI
                    │
                    ▼
停车 → 暂停外部导航 → 下蹲 → 关闭巡航感知
                    │
                    ▼
末端 RGB-D 重检测 → 三维定位 → 机械臂抓取 → 垃圾桶投放
                    │
                    ▼
站起 → 恢复行走模式 → 恢复外部导航

本仓库不包含地图构建、定位算法、巡航航点或 Nav2 路线。外部 Unitree 导航必须在任务启动前完成建图、重定位并进入巡航状态。

主要 ROS 2 包

职责
b2_perception 前视相机、YOLO 推理、目标选择、ROI 和视觉伺服
b2_mission_planner 任务状态机,协调导航、底盘、感知和机械臂
b2_motion_control Unitree B2 Sport API、姿态/移动服务、无线遥控器入口
b2_arm_grasp_service 末端 RGB-D、坐标变换、RealMan 机械臂、夹爪和垃圾桶
b2_yolo_detection 未接入当前主链的旧版通用检测包
unitree_api / unitree_go / unitree_hg Unitree ROS 2 消息定义,不包含机器人驱动

当前主数据流:

/camera3/camera3/color/image_raw
  → /b2_perception/front_detections
  → tracking_controller
  → /tracking/target_in_roi
  → mission_planner
  → /b2_arm_grasp_service/front_grasp

目标运行环境

  • Ubuntu 22.04
  • ROS 2 Humble
  • CycloneDDS / rmw_cyclonedds_cpp
  • Unitree B2 与匹配固件版本的 unitree_ros2/消息定义
  • RealMan 机械臂及匹配的 Python SDK
  • Intel RealSense、librealsense、realsense2_camera
  • Ultralytics、PyTorch、OpenCV、NumPy、PyYAML、pyserial、tf_transformations
  • 垃圾桶串口设备(当前默认 /dev/trash,115200)

项目的 package.xml 尚未覆盖全部非 ROS 依赖。迁移时必须按 迁移清单模板 固定旧主机版本,不要在验收窗口内直接升级到最新依赖。

获取与构建

模型权重使用 Git LFS 管理:

git lfs install
git clone https://github.com/Junzhe/unitree-b2-trash-pickup.git
cd unitree-b2-trash-pickup
git lfs pull

source /opt/ros/humble/setup.bash
rosdep install --from-paths src --ignore-src -r -y
mkdir -p src/b2_motion_control/config
colcon build --symlink-install
source install/setup.bash

如果同时 source 了官方 unitree_ros2 工作区和本仓库中的同名消息包,必须确认消息版本完全一致,并避免两套 unitree_api/unitree_go 互相覆盖。

检查关键 Python 依赖:

python3 -c "import cv2, numpy, yaml, serial, pyrealsense2, ultralytics, tf_transformations"
python3 -c "from Robotic_Arm.rm_robot_interface import RoboticArm; print('RealMan SDK OK')"

检查模型及类别:

python3 -c "from ultralytics import YOLO; m=YOLO('src/b2_arm_grasp_service/models/best.pt'); print(m.task); print(m.names)"

随仓库模型为 YOLO 分割模型,类别为:PET bottle、Can、Carton、glass bottle、cigarette、Plastic bag、paper、cigarette case。当前默认任务配置启用类别 0–6,类别 7 未启用。

新机器狗 / 新主机迁移

把当前已运行平台记为 A 机,目标平台记为 B 机。迁移要求先达到 A 机行为基线,再进入抓取优化:

  1. 冻结 A 机源码、依赖、固件、模型、参数、地图和 rosbag。
  2. 建立 A/B 两套机器配置,不覆盖 A 机基线。
  3. 在 B 主机干净编译,不复制 A 主机的 build/install/log
  4. 先验证只读 DDS、外部导航和独立停止能力。
  5. 重新确认相机序列号、ROI、手眼、工具坐标、固定 Z 和垃圾桶 waypoint。
  6. 按“感知 → 底盘 → 机械臂 → 完整任务”逐级放行。
  7. 完成连续运行与故障注入后,才允许修改抓取算法。

详细步骤见 MIGRATION_GUIDE.md

首次分模块启动

1. 只启动感知

ros2 launch b2_perception perception.launch.py \
  safe_mode:=true \
  enable_tracking:=false \
  launch_motion_control:=false \
  model_path:=best.pt
ros2 topic hz /camera3/camera3/color/image_raw
ros2 topic echo --once /b2_perception/front_detections
ros2 run rqt_image_view rqt_image_view /b2_perception/debug_image

2. 本地回环验证底盘服务

在未连接机器狗的主机上使用 Unitree setup_local.sh

source ~/unitree_ros2/setup_local.sh
source install/setup.bash
ros2 launch b2_motion_control b2_motion_control.launch.py safe_mode:=true

当前 safe_mode 尚不能作为完整硬件保护:它没有覆盖所有姿态服务,而且可能屏蔽 StopMove。修复前不要在连接真机时调用 stand_downlean_backpitch_lean 等服务。

3. 完整任务入口

当前整机入口为:

ros2 launch b2_mission_planner simplified_mission.launch.py \
  network_interface:=<实际网卡>

人工门控服务:

ros2 service call /mission/start_full_chain_grasp std_srvs/srv/Trigger "{}"

该完整入口只能在迁移验收清单全部通过后运行。 仅启动 launch 就可能初始化并移动机械臂。

当前硬件相关默认值

以下值来自 A 机代码,只能作为 B 机迁移的参考:

项目 当前值
感知相机序列号 215222079843
抓取相机序列号 828112072877
RealMan 控制器 192.168.123.200:8080
垃圾桶串口 /dev/trash,115200
感知置信度 0.60
ROI 中心约 (320,410),大小 220×120
固定 Z 当前代码为启用;B 机标定前必须关闭
单次下蹲抓取周期 默认最多 6 次

遥控器入口

按键 当前行为
L1 + Down 打开完整任务人工门
L1 + Up 直接触发一次抓取,绕过任务状态机
L1 + Y best-effort 全系统停止链
L2 + R2 当前代码未真正下发停止,不能作为急停

现场必须使用原厂独立急停或可靠的硬件停止手段,不能只依赖上述 ROS 按键。

仓库约定

  • src/:ROS 2 源码。
  • docs/MIGRATION_GUIDE.md:A→B 迁移流程和两周计划。
  • docs/ACCEPTANCE_CHECKLIST.md:分阶段实地验收清单。
  • docs/MIGRATION_MANIFEST_TEMPLATE.md:旧机/新机版本与硬件记录模板。
  • docs/legacy-*:原工程简要工作流,仅供历史比对。
  • docs/assets/:历史调试画面。
  • build/install/log/、rosbag 和缓存不进入 Git。

发布与回滚

  • 所有现场版本必须有 Git tag、模型哈希和对应机器配置。
  • A 机基线与 B 机候选版本分开保存。
  • 参数修改必须进入版本控制,不在机器人上只改不提交。
  • 任意一次漏停、双控制源、无导航 ACK 继续执行或机械臂碰撞都应立即回滚到上一验收 Gate。

本仓库暂未声明对外开源许可证。模型检查点包含独立许可元数据;在将仓库改为公开或对外分发前,需要完成代码、模型及第三方 SDK 的许可证核查。

About

ROS 2 system for Unitree B2 trash detection, visual approach, robotic grasping, disposal, and A/B robot migration

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages