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

2.7 KiB
Raw Blame History

快速上手

更完整的目录说明: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、腕部相机)会让后面每一步 都以别的样子失败。

然后是常规步骤:

  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
  5. 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