a89250d05df24901d2b63c6ddadf7eef64aa9a9d
在此之前,仓库里所有 Gazebo 相关的东西都是"声明"而非"事实": arm.gazebo.xacro 零引用、stack.launch.py 的 isaac 分支只打印日志、 没有 world 文件、devices/sim/gazebo 下的目录全是空占位。 更关键的是:**这台机器上根本没装 Gazebo**,而 ROS 在 conda 里,没有 /opt/ros, apt 的 ros-humble-gazebo-* 装了也不会被 conda 的 ROS 认到。 环境(与真机环境物理隔离) - 新建 conda 环境 ros_gz_sim,**不碰能跑真机的 ros_flexiv**。 仿真要往环境里塞 Gazebo 及 protobuf/ignition/渲染一整条链, 和真机环境混装随时可能把它弄坏,代价远大于仿真带来的便利。 - 频道组合照抄 ros_flexiv 的安装记录(robostack-staging + conda-forge), 那是本机已经证明可用的搭配。 两个实测踩到的坑(都写进了脚本注释,避免下次重踩) 1. empy 版本:conda 默认给 empy 4.x,而 Humble 的 rosidl_adapter 用的是 3.x 的 API。症状是构建自定义消息包时报 `_interpreter.shutdown()` 的 AttributeError, 报错点在 rosidl_adapter 内部,完全看不出跟 empy 有关。必须钉 empy=3.3.4。 2. conda 激活是**堆叠**的:同一 shell 里从 ros_gz_sim 切到 ros_flexiv 后, `which python` 指向 ros_flexiv,但 `python -m pip` 却解析到 ros_gz_sim 的 pip, 导致 colcon --symlink-install 报 "option --editable not recognized"。 这个报错和真实原因毫无关系,极易误判成"环境被搞坏了"。 现在 scripts/lib/conda_switch.sh 会在切换前退到 base,两个 env 脚本共用。 仿真用独立构建产物 - build_sim/ + install_sim/(scripts/build_sim.sh)。工作区只有一份源码, 若仿真也写 install/,就会覆盖真机的构建产物。 - 排除 11 个真机专属包(flexiv_hardware 需要 Flexiv RDK C++ SDK,根本装不上; 另有真机驱动/GPIO/MoveIt 配置/真机 bringup),每个都在脚本里写了理由。 已验证(不是只看退出码) - Gazebo Fortress 6.16 无头启动正常,物理初始化完成 - /clock 桥接到 ROS 成功收到仿真时间;ros_gz_sim create 成功往世界里建物 - 真机构建 18 包通过、233 项测试通过,build/ install/ 时间戳未变(没被覆盖) - 仿真侧 7 包构建通过;两环境互切后各自都能正常构建 注:Humble 配的是 Gazebo Fortress(ignition-gazebo6,命令行 `ign gazebo`), 不是现代的 gz-sim —— 后者要 libprotobuf>=6.31,与 RoboStack Humble 钉住的 5.29.3 解不开依赖。Fortress 属于新 Gazebo 家族(非已 EOL 的 Classic), 且是 Humble 的官方配对版本。 Co-authored-by: Cursor <cursoragent@cursor.com>
Flexiv Rizon 视觉伺服(~/ros2)
独立工作空间:腕部 D405 眼在手上、手眼标定、YOLO 找工件、法兰悬停跟踪、DH 夹爪、入孔检测。
一份仓库即可跑完整跟踪与检测,不依赖 camera_test 或装配 HMI。
工作目录必须是 ASCII 路径(推荐克隆到 ~/ros2)。
| 项 | 值 |
|---|---|
| 配置 | config/site.yaml(从 example 复制,不进 git) |
| 操作 | scripts/ |
| 目录说明 | docs/WORKSPACE.md(每个文件夹做什么) |
| Conda | ros_flexiv |
| ROS | Humble |
克隆后
cd ~/ros2
cp config/site.example.yaml config/site.yaml
# 编辑 site.yaml:robot.sn / robots[].ip / camera.serial / paths.yolo_weights
# 权重文件放到 models/yolo/(二进制不在 git 里)
conda activate ros_flexiv
source scripts/env.sh
./scripts/build_all.sh
source scripts/env.sh
示教器:AUTO + Remote Ethernet,关掉 Flexiv Studio(RDK 独占)。
# 三个终端必须带同一个 --arm(89=左 91=右)
bash ~/ros2/scripts/run_real.sh --arm 89
bash ~/ros2/scripts/run_camera_d405.sh --arm 89 --preview
bash ~/ros2/scripts/run_visual_servo_rt.sh --arm 89 --control
改 site.yaml:锁高 / YOLO / 伺服 → 重启第三终端;分辨率 / 曝光 → 重启相机。
功能入口
| 功能 | 命令 |
|---|---|
| 实机 | scripts/run_real.sh --arm 89|91 |
| 腕部相机 | scripts/run_camera_d405.sh --arm … --preview |
| 顶视 D435 | scripts/run_camera_d435.sh --preview |
| 列出相机 | scripts/list_realsense.sh |
| 跟踪 | scripts/run_visual_servo_rt.sh --arm … [--control] |
| 回 home | scripts/go_home.sh --arm … |
| 手眼 | scripts/run_handeye.sh --arm … teach → merge → calibrate |
| PGEA / RGI 夹爪 | scripts/run_gripper.sh --arm 89|91 --cli … |
| 双爪 ROS | scripts/run_dual_gripper.sh |
| 入孔检测 | scripts/run_hole_detect.sh --arm … --preview |
| Orisys 触觉 | scripts/run_tactile.sh [--cli] |
| 看配置 | scripts/show_site_config.sh |
89 与 91 各有 手眼、相机序列号、锁高、named poses,禁止混用。
文档
| 文档 | 内容 |
|---|---|
| docs/WORKSPACE.md | 每个目录 / 脚本 / 包 |
| docs/QUICKSTART.md | 环境与第一次跑通 |
| docs/ARCHITECTURE.md | 进程与几何 |
| docs/SITE_CONFIG.md | site.yaml 字段 |
| docs/HANDEYE.md | 手眼标定 |
| docs/TRACKING.md | 视觉伺服 |
| docs/GRIPPER.md | PGEA + RGI |
| docs/HOLE_DETECT.md | 入孔检测 |
| docs/TACTILE.md | Orisys 视触觉 |
| docs/INTERFACES.md | ROS / 脚本接口 |
| docs/TRAJECTORIES.md | 轨迹回放 |
上传 git 时
- 要提交:
src/scripts/docs/config/site.example.yamlmodels/yolo/README.mdmodels/hole_insert/README.md - 不要提交:
config/site.yaml(含本机 IP/序列号)、build/install/log/、YOLO.pt/.onnx/.engine、thirdparty/vendor/ - 规则已写在
.gitignore
别人克隆后必须自己 cp site.example.yaml site.yaml 并重新手眼标定(不要直接用仓库里某台现场的 T_4x4 当真值)。
Description
Languages
Makefile
34.3%
Python
24.2%
C
20%
C++
14.6%
CMake
5.2%
Other
1.7%