Files
ros_contorl/docs/QUICKSTART.md
T
arm_dev 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>
2026-09-28 10:42:56 +08:00

91 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 快速上手
更完整的目录说明:[WORKSPACE.md](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)
每次新开终端:
```bash
conda activate ros_flexiv
source ~/ros2/scripts/env.sh
```
## 配置
```bash
cp ~/ros2/config/site.example.yaml ~/ros2/config/site.yaml
```
必填:`robot.sn`、`robot.robots[].ip`、`camera.serial`(多相机时)、`paths.yolo_weights`。
查看解析结果:
```bash
bash ~/ros2/scripts/show_site_config.sh
```
## 编译
```bash
cd ~/ros2
./scripts/build_all.sh
source scripts/env.sh
```
只改 Python 应用时,develop 安装会直接读 `src/`。改了 `setup.py` 的 `console_scripts` 后需要再编一次 `arm_application`。
## 第一次实机
**开工前先体检**(不需要机械臂能动,只读):
```bash
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、腕部相机)会让后面每一步
都以别的样子失败。
然后是常规步骤:
1. 示教器:AUTO + Remote Ethernet,清故障。关 Studio。
2. `bash ~/ros2/scripts/test_rdk_python.sh`(可选)
3. T1 `run_real.sh`,T2 `run_camera_d405.sh --preview`
4. 手眼:见 [HANDEYE.md](HANDEYE.md)
5. T3 `run_visual_servo_rt.sh` 先观察,再 `--control`
回零:
```bash
bash ~/ros2/scripts/go_home.sh
```
会先杀掉 perception/servo,避免轨迹抢臂。
## Mock(无机器人)
```bash
bash ~/ros2/scripts/run_sim.sh
ros2 run arm_application demo_named_poses
```