02c26cfb86
scripts/run_unit_tests.sh
用法注释里写的是「bash run_unit_tests.sh src/<pkg>/test/test_x.py -x」,但实现是
`pytest "${test_dirs[@]}" "$@"` —— 传进来的路径只是被**追加**到「全部测试目录」
后面,实际仍然跑整仓库。用法示例就是承诺,它不成立会让人以为「我只改了 x,
怎么蹦出别的包的失败」。改成:位置参数里**存在的路径**当作「只跑这些」,
其余(-k / -x / --tb=… 及其取值)原样透传。
docs/HANDBOOK.md §4.3
原文让人逐个包手敲 `python3 -m pytest src/xxx/test`。这条命令在本仓库**会失败**,
而且是两种最容易被误读的失败:
· 少挂一个 src 包 → 收集阶段 ModuleNotFoundError,现象是「0 个测试 / 1 个 error」,
像测试环境坏了;
· 更隐蔽:install/ 里那份**旧的**同名模块会先被找到。实测直接跑
src/arm_sim_gazebo/test 报 `cannot import name 'RESET_GIVE_UP'`,导的是
install/ 里的旧副本,源码里明明有这个符号 —— 测的根本不是你改的那份。
改为统一用 run_unit_tests.sh(它把 src/* 挂到 PYTHONPATH 最前面),并把这段
原因写进文档。顺带把过期的统计数字更新为实测值:608 → 1118 项,
分项 arm_application 233→547、arm_sim_gazebo 236→400、arm_interfaces 46→78。
实测:src/arm_sim_gazebo/test 直跑 = 2 个收集错误;经运行器 = 400 passed。
单文件 28 passed;-k real_preflight = 28 passed / 1 skipped;
无参数全量 = 1118 passed / 1 skipped。
docs/QUICKSTART.md
「第一次实机」以体检开场(它只读、不需要机械臂能动),并列出四项判据各抓什么,
免得现场跳过它直接起栈。
Co-authored-by: Cursor <cursoragent@cursor.com>
2.7 KiB
2.7 KiB
快速上手
更完整的目录说明:WORKSPACE.md。
依赖
- Ubuntu 22.04 + ROS 2 Humble
- Conda 环境
ros_flexiv(本仓库脚本默认这个名字) - Flexiv RDK Python:
/home/cc/rdk_py310/bin/python(flexivrdk 1.9.x) - 工控机与机器人在同一网段(例:
192.168.2.10↔192.168.2.101) - Intel RealSense D405,
pyrealsense2 - YOLO:
ultralytics;TensorRT:tensorrt-cu12(不要装 meta 包tensorrt) - 夹爪:
pyserial,USB–RS485 →/dev/ttyUSB0(PGEA)/dev/ttyUSB1(RGI)
每次新开终端:
conda activate ros_flexiv
source ~/ros2/scripts/env.sh
配置
cp ~/ros2/config/site.example.yaml ~/ros2/config/site.yaml
必填:robot.sn、robot.robots[].ip、camera.serial(多相机时)、paths.yolo_weights。
查看解析结果:
bash ~/ros2/scripts/show_site_config.sh
编译
cd ~/ros2
./scripts/build_all.sh
source scripts/env.sh
只改 Python 应用时,develop 安装会直接读 src/。改了 setup.py 的 console_scripts 后需要再编一次 arm_application。
第一次实机
开工前先体检(不需要机械臂能动,只读):
bash ~/ros2/scripts/run_real_preflight.sh --arm 89
它按"现场该处理的顺序"给结论,最后汇总要人工做的事。它专门盯这几类 "报错的地方不是坏的地方"的问题:
| 检查项 | 抓的是 |
|---|---|
| 现场配置 | 这一轮到底在读哪份 site.yaml、认哪台臂 |
| 遗留进程 | 上一轮没退干净的 ros2_control(它占着 RDK,会让 RDK 报"连不上") |
| 机器人在网 | ping 不通;以及两个 IP 指向同一个 MAC(两台臂出厂 MAC 相同时会互相抢转发) |
| 机械臂 RDK | 连不上 / 示教器在 Manual(这个 SW 切不了,只能人到现场拨) |
| 腕部相机 | 本臂配置的那只 D405 在不在 USB 上 —— 它掉了以后报错会变成"点云为空" |
| 触觉 / USB / 几何 | 触觉是"没插"还是"内核卡死"、RealSense 协商速率、手眼矩阵与悬停高度 |
结论是 NO-GO 时不要往下走:硬阻断项(RDK、腕部相机)会让后面每一步
都以别的样子失败。
然后是常规步骤:
- 示教器:AUTO + Remote Ethernet,清故障。关 Studio。
bash ~/ros2/scripts/test_rdk_python.sh(可选)- T1
run_real.sh,T2run_camera_d405.sh --preview - 手眼:见 HANDEYE.md
- T3
run_visual_servo_rt.sh先观察,再--control
回零:
bash ~/ros2/scripts/go_home.sh
会先杀掉 perception/servo,避免轨迹抢臂。
Mock(无机器人)
bash ~/ros2/scripts/run_sim.sh
ros2 run arm_application demo_named_poses