6edb8d39ab
在开始'设备契约层 + 目录重构 + 通止规装配'改造之前,先钉住当前可运行状态, 使后续任何删除/重构都可回退。 本基线包含: - 现有 ROS 2 工作区全部源码(arm_application / arm_control / arm_bringup 等) - 官方 flexiv_ros2 栈(含 flexiv_hardware / flexiv_controllers 等符号链接) - 设备契约层 src/arm_interfaces(新增,46 项单测通过) - devices/ 设备选型与品牌清单(新增) - scripts/gen_site_example.py 与由它生成的 config/site.example.yaml 按 .gitignore 排除:build/ / install/ / log/ / config/site.yaml / 模型权重二进制。
5.9 KiB
5.9 KiB
对外接口
三层:操作员脚本、ROS 话题/服务、可 import 的 Python。业务代码不要直接调 rizon_arm_controller。
1. 操作员脚本(推荐)
所有脚本在 scripts/。先 source scripts/env.sh。
| 脚本 | 输入 | 输出 / 行为 |
|---|---|---|
env.sh |
— | conda + Humble + install/setup.bash + SITE_* |
build_all.sh |
源码 | colcon 编 arm_* + flexiv_* |
run_real.sh [--sn SN] |
site.yaml robot |
实机 stack,backend:=real |
run_camera_d405.sh [--preview] |
camera.* |
发布图像;可选 Qt 四宫格 |
run_visual_servo_rt.sh [--control] |
paths yolo servo |
perception + servo + 手眼 TF |
go_home.sh |
go_home.* |
杀伺服后 /set_named_pose |
run_handeye.sh teach|merge|calibrate|show |
handeye.* |
示教 / 写入 poses / 解 T |
run_gripper.sh --arm 89|91 --cli … |
robots[].gripper + gripper.* |
PGEA / RGI Modbus |
run_dual_gripper.sh |
两侧 robots[].gripper |
双爪 ROS 节点 |
run_hole_detect.sh --arm … |
hole_detect.* camera |
入孔像素 |
run_tactile.sh [--cli] |
tactile.* |
Orisys 左右指 |
export_yolo_trt.sh [onnx] [imgsz] |
权重 | 同名 .engine |
show_site_config.sh |
site.yaml |
打印解析结果 |
rdk_switch_tool.sh --list |
SN | Studio 工具列表 |
run_sim.sh |
— | mock stack |
convert_traj.sh FILE.traj |
Flexiv 轨迹 | *_trajectory.yaml |
环境变量契约由 scripts/lib/export_site_env.py 定义:flatten()、perception_overrides()、servo_overrides()、gripper_overrides()。
2. ROS 接口(稳定)
机械臂(run_real.sh)
| 名称 | 类型 | 方向 | 说明 |
|---|---|---|---|
/set_named_pose |
arm_msgs/srv/SetNamedPose |
应用 → 控制 | home ready inspect pos_left |
/get_arm_state |
arm_msgs/srv/GetArmState |
查询 | 关节 + EE 位姿 |
/arm_status |
arm_msgs/msg/ArmStatus |
状态 | 模式 / 是否在动 |
/follow_joint_trajectory |
arm_msgs/action/FollowJointTrajectory |
应用 → 适配器 | 应用只走这个 |
/rizon_arm_controller/joint_trajectory |
trajectory_msgs/JointTrajectory |
伺服 → 驱动 | 仅 servo_node 写 |
/joint_states |
sensor_msgs/JointState |
驱动 → 全局 | |
/tf /tf_static |
TF | 基座 / 连杆 / 法兰 / 手眼 |
命名位姿表:src/arm_control/config/named_poses.yaml。
ros2 service call /set_named_pose arm_msgs/srv/SetNamedPose \
"{pose_name: 'home', velocity_scale: 0.25, acceleration_scale: 0.25}"
相机(realsense_color_pub)
| 话题 | 类型 | 说明 |
|---|---|---|
/d405/color/image_raw |
sensor_msgs/Image bgr8 |
彩图 |
/d405/color/camera_info |
sensor_msgs/CameraInfo |
内参 |
/d405/aligned_depth_to_color/image_raw |
sensor_msgs/Image 16UC1 |
对齐深度,毫米 |
d405 来自 camera.name。QoS:SensorData(BEST_EFFORT)。
感知 / 伺服
| 名称 | 类型 | 说明 |
|---|---|---|
/visual_servo/filtered_point |
geometry_msgs/PointStamped |
相机系工件点,perception → servo |
/workpiece/detection |
std_msgs/Float32MultiArray |
[x1,y1,x2,y2,conf,cls,cx,cy,z],空=清绿框 |
/cmd_vel |
geometry_msgs/Twist |
伺服调试用,真机动臂走轨迹 |
PointStamped.header.frame_id = d405_color_optical_frame。
夹爪(IPC Modbus,arm_msgs)
PGEA 单爪节点(--arm 89 无 --cli):
| 服务 | 类型 |
|---|---|
/gripper/open |
std_srvs/srv/Trigger |
/gripper/close |
std_srvs/srv/Trigger |
双爪 / 右爪 RGI:
| 名称 | 类型 |
|---|---|
/dual_gripper_driver/{left,right}/command |
arm_msgs/msg/GripperCommand |
/dual_gripper_driver/{left,right}/status |
arm_msgs/msg/GripperStatus |
/dual_gripper_driver/{left,right}/execute |
arm_msgs/srv/GripperExecute |
开合力/速在 site.yaml → gripper 与 robots[].gripper。
入孔检测(hole_detect)
| 话题 | 类型 |
|---|---|
/hole_detect/result |
arm_msgs/msg/HoleDetections |
/hole_detect/holes |
std_msgs/Float32MultiArray |
/hole_detect/overlay |
sensor_msgs/Image |
视触觉(tactile 节点)
| 话题 | 类型 |
|---|---|
/tactile/left/status |
arm_msgs/msg/TactileStatus |
/tactile/right/status |
arm_msgs/msg/TactileStatus |
3. site.yaml 契约
字段说明见 SITE_CONFIG.md。Launch 覆盖键:
- 感知:
perception_overrides()→weightsconfimgszbackend… - 伺服:
servo_overrides()→ee_z_mxy_trackv_max_xykp_xy…
改 yaml 不会热加载权重 / 分辨率 / 锁高(overlay_hold_sec 相机会跟)。重启对应脚本。
4. Python(二次开发)
from arm_application.yolo_detector import YoloDetector, resolve_weights, pick_best
from arm_application.dh_pgea import DhPgeaGripper
from arm_application.dual_gripper import DualArmGripperManager, load_from_site
from arm_application.hole_detector import HoleDetector
from arm_application.orisys_tactile import make_tactile, load_orisys_from_site
from arm_application.geom_ik import load_handeye_T, geometric_jacobian, dls_twist
from arm_application.handeye_lib import calibrate_hand_eye
from arm_application.plane_feature import geometric_center_on_plane
模块职责写在 src/arm_application/arm_application/__init__.py。
不要从业务节点里 import flexivrdk(ABI 在 rdk_py310)。夹爪走 Modbus;示教拖拽走 scripts/rdk_drag_bridge.py 子进程。
5. 坐标系
| 帧 | 谁发布 | 含义 |
|---|---|---|
{SN}_base_link |
robot_state_publisher | 基座 |
{SN}_flange |
robot_state_publisher | 法兰 |
d405_color_optical_frame |
手眼 static TF | 相机光心,Z 朝外 |
hover:基座 XY 上法兰对齐工件。ee_z_m:法兰在基座 Z。