Files
ros_contorl/devices/robots/flexiv/manifest.yaml
arm_dev 883ed6b0b9 P1:设备契约层收尾 + Flexiv 驱动适配器 + 触觉四路数据打通
新增包
- arm_kinematics:从 arm_application 提取几何雅可比 + DLS 逆解(纯 numpy)。
  它被应用层和驱动层共用,留在应用层会让驱动反向依赖应用层。
  arm_application/geom_ik.py 改为 re-export shim,现有 import 一行未改。
- arm_driver_flexiv:非夕驱动适配器。只补 manifest 声明而现有节点缺失的接口
  (/home /enable /clear_fault /switch_tool /soft_drag /compliant_descent),
  已有能力不重复实现。RDK 访问经 rdk_py310 下的长驻桥,本包不 import flexivrdk。

新接口
- arm_msgs/SwitchTool.srv、arm_msgs/CompliantDescent.action
- 合并 capabilities 里语义重复的 set_tool / switch_tool

修复(都是只在真机上暴露、且难以定位的问题)
- rdk_client 会永久挂死:select 的"可读"不等于"有完整一行",readline 遇到
  半行 JSON 会一直阻塞等换行符,超时机制完全失效。改用 os.read + 自己做行缓冲。
- CompliantDescent 行程少一步:descended + step > max 在浮点累加下会提前跳出,
  永远到不了标称行程。改用整数步数计数。
- CompliantDescentRunner 的 TF frame 退化成 _base_link:没继承节点已解析的 SN。
- resolve_orisys_config 仍指向旧路径;load_orisys_from_site 读的是旧键 config。

触觉四路数据打通
- 深度图 / 力矢量场原先被 tactile_worker 有意丢弃(注释写"图像不过队列"),
  从未发布到 ROS。新增 image_utils(数组→Image,编码自动判定)、独立的图像
  队列(maxsize=1 满则丢旧)与 /tactile/<side>/{image,vector}。
  默认关闭(tactile.image_hz=0),开启也不影响三力的 30fps 时序。
- mock 后端也会发图像,无硬件即可验证整条发布链路。

配置
- site.yaml 新增 tactile.image_hz;移除与 model 重复的旧键 tactile.config
- 型号配置从 src/arm_application/config/orisys/ 迁到
  devices/sensors/orisys/models/dd03/(随 SDK 一起放)

测试:198 个(原 139)
- arm_kinematics 24(雅可比/逆解的解析算例与不变量)
- arm_driver_flexiv 69(下压状态机 34 + RDK 协议层 35)
- arm_application 59(图像打包 36 + 矢量场探测 23)
2026-09-23 11:17:12 +08:00

116 lines
4.0 KiB
YAML

# =============================================================================
# devices/robots/flexiv/manifest.yaml
#
# 非夕机械臂(Flexiv Rizon / AICO)驱动清单。
# 框架启动时读这个文件,决定加载哪个适配器、校验哪些配置、检查哪些外部物料。
#
# 这里【不放现场数值】。SN / IP / 速度 / 悬高一律在 config/site.yaml。
# =============================================================================
id: flexiv
label: 非夕 Flexiv Rizon / AICO
kind: robot
vendor: flexiv
version: "RDK 1.9.x(与 flexiv_ros2 humble-v1 v1.9.1 配套)"
description: >
非夕七轴力控机械臂。当前项目使用 Rizon4 双臂(SN 尾号 89 / 91)。
上层通过 ros2_control + rizon_arm_controller 下发关节轨迹,柔顺下臂走 RDK 力控原语。
# --- 厂商物料放置要求 ------------------------------------------------------
# 每个条目会在框架启动时被检查;required: true 且文件缺失时直接报错。
assets:
- path: rdk
required: true
what: Flexiv RDK 源码或安装包
format: 厂商原始发布格式,不要转换、不要重新打包
naming: 保持厂商原目录名与文件名,一律不要改名
where_used: driver 通过此路径加载 RDK
notes: >
与 flexiv_ros2 humble-v1 配套的是 RDK 1.9.x。仓库外的已编译安装位于
~/flexiv_install(由 scripts/env.sh 与 run_real.sh 注入 LD_LIBRARY_PATH)。
离线安装库在 vendor/rdk_libs/。
# --- 适配器 ----------------------------------------------------------------
driver:
package: arm_driver_flexiv
executable: flexiv_arm_driver
build: colcon
# --- 能力声明 --------------------------------------------------------------
# 框架上层只会调用这里列出的能力。少写一项,上层用到时会启动即报错。
capabilities:
- get_arm_state
- follow_joint_trajectory
- set_named_pose
- servo_joint
- servo_cartesian
- compliant_descent
- switch_tool
- home
- enable
- clear_fault
- soft_drag # 软拖拽,手眼标定走点用
# --- 配置项声明 ------------------------------------------------------------
# 框架启动时按 site_path 去 config/site.yaml 取值,required 的键缺失即报错。
# unit 会打印在人读的错误信息里,避免「填了毫米但代码按米」这类问题。
config_schema:
- key: sn
site_path: robot.robots[].sn
type: str
required: true
doc: 机械臂完整 SN(如 Rizon4-063989)。必须与示教器上显示的一致。
- key: ip
site_path: robot.robots[].ip
type: str
required: true
doc: 控制柜 IP。同一网段的工控机地址填 pc_ip。
- key: pc_ip
site_path: robot.robots[].pc_ip
type: str
required: true
doc: 工控机在本网段的地址,RDK 白名单用。
- key: iface
site_path: robot.robots[].iface
type: str
required: true
doc: 连接控制柜的网卡名(如 enp4s0)。
- key: tool_name
site_path: robot.tool_name
type: str
required: false
default: ""
doc: 示教器 Studio 里的工具坐标系名。留空表示不切换。
本项目要求 tool1 全程保持垂直向下且位姿锁定,需在此指定。
- key: tool_z_extend_m
site_path: robot.tool_z_extend_m
type: float
unit: m
required: false
default: 0.0
doc: >
工具坐标系沿 Z 的延长量。用于补偿「夹具 + 夹持物」超出原质心的距离。
当前 tool1 质心在未装夹具的平行夹爪末端,装上夹具并夹持通止规后需沿 Z 延长。
标定方法见 docs/TOOL_FRAME.md。
- key: ee_z_m
site_path: robot.robots[].servo.ee_z_m
type: float
unit: m
required: true
doc: 视觉跟踪锁高 —— 法兰相对基座系的 Z。
注意与悬高(相对工具系)区分,两者是不同概念。
- key: safe_z_m
site_path: robot.robots[].servo.safe_z_m
type: float
unit: m
required: true
doc: 防撞安全高度。启动归位时先抬到这个高度再水平移动。