本文直接进入实战部署流程。我们的目标很明确:把 ros2_buker_xarm6_oak4 从仓库拉到本地,完成配置、编译,并把导航链路和抓取链路跑通。
项目地址:
https://github.com/chendageshuonipangle/ros2_buker_xarm6_oak4
一、项目全景:先明确我们要跑通什么
这个项目包含两条主链路,我们按顺序推进:
-
移动底盘导航链路
- Bunker Mini + RPLIDAR + SLAM/Nav2
- 目标:机器人可以建图、定位、导航
-
机械臂视觉抓取链路
- OAK 检测 → 坐标转换 → xArm6 MoveIt2 抓取
- 目标:检测目标后可执行抓取动作
执行策略:先跑通导航,再接入抓取。
二、部署前检查:先把硬件和环境打平
我们先把基础条件确认完,避免后面反复返工。
1) 硬件条件
- Bunker Mini 底盘(CAN 正常)
- RPLIDAR(USB 正常)
- OAK 相机(USB 正常)
- xArm6(网络可达)
2) 软件条件
- Ubuntu + ROS2(与依赖匹配)
- 已安装:
git、colcon、rosdep
- 使用标准工作区:
~/ros2_ws
3) 立即执行的检查命令
printenv | grep -E "ROS_DISTRO|ROS_VERSION"
ls -l /dev/rplidar
ip link show can0
ping -c 4 192.168.1.242
结论标准:四项检查至少要保证“设备可见 + 网络可达”。
三、拉取代码:按标准工作区落地
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/chendageshuonipangle/ros2_buker_xarm6_oak4.git
该仓库内部自带 src/,我们做一次标准化整理:
cd ~/ros2_ws
rsync -a src/ros2_buker_xarm6_oak4/src/ src/
cp src/ros2_buker_xarm6_oak4/start_bunker_navigation.sh ~/ros2_ws/
chmod +x ~/ros2_ws/start_bunker_navigation.sh
到这里,目录结构应是标准 ROS2 形态:
~/ros2_ws/src/...
~/ros2_ws/start_bunker_navigation.sh
四、安装依赖并编译
cd ~/ros2_ws
rosdep update
rosdep install --from-paths src --ignore-src -r -y
colcon build
source ~/ros2_ws/install/setup.bash
把环境加载写入 ~/.bashrc:
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
验收标准:colcon build 无致命错误,能正常 source。
五、部署导航链路(先完成这条)
入口脚本:~/ros2_ws/start_bunker_navigation.sh
步骤 1:启动底层 bringup
cd ~/ros2_ws
./start_bunker_navigation.sh bringup
如果脚本询问 CAN 初始化,按提示完成。
步骤 2:启动 SLAM 建图
新开终端执行:
cd ~/ros2_ws
source install/setup.bash
./start_bunker_navigation.sh slam
步骤 3:保存地图
./start_bunker_navigation.sh save_map
步骤 4:加载地图做导航
./start_bunker_navigation.sh nav /home/你的用户名/ros2_ws/maps/my_map.yaml
可选模式:边建图边导航
./start_bunker_navigation.sh slam_nav
导航链路验收标准:RViz 可见稳定 TF,机器人能接受目标点并执行移动。
六、部署抓取链路(导航稳定后再执行)
我们按 4 个终端并行启动:
终端 1:xArm6 MoveIt2
ros2 launch xarm_moveit_config xarm6_moveit_realmove.launch.py robot_ip:=192.168.1.242 add_gripper:=true
终端 2:OAK 检测节点
source ~/ros2_ws/install/setup.bash
ros2 run oak_yolo_py oak_yolo_node
终端 3:坐标转换节点
source ~/ros2_ws/install/setup.bash
ros2 launch oaktf_trantoarm transform.launch.py target_label:=orange
终端 4:抓取执行节点
source ~/ros2_ws/install/setup.bash
ros2 run armtodeprition motion_planner_node
手动触发一次抓取:
ros2 service call /execute_grasp std_srvs/srv/Trigger
抓取链路验收标准:/target_pose_in_base 持续有目标位姿,服务调用后机械臂执行动作。
七、现场排障流程(按顺序执行)
出现异常时,按以下顺序排:
-
先看节点是否都在:
ros2 node list
-
再看关键话题是否有数据:
ros2 topic list
ros2 topic hz /scan
ros2 topic echo /odom --once
ros2 topic echo /target_pose_in_base --once
-
最后看 TF:
ros2 run tf2_tools view_frames
典型问题快速处理:
- CAN 异常:重走 bringup 初始化流程
- 雷达无数据:检查
/dev/rplidar 和进程占用
- 检测有结果但不抓:核对
target_label、目标位姿话题、MoveIt2 连接状态
八、收尾标准:我们判定“部署完成”的条件
满足以下四项,即可判定部署成功:
- 工作区可稳定编译并加载
- 导航链路可完成建图与导航
- 抓取链路可输出目标位姿并触发执行
- 常见故障可按排障流程快速定位
到这一步,项目就进入可持续调参与迭代阶段。