🔗GitHub

19fa182de1152.png

1. 项目目标

本项目基于 camera_arm_rm65b_control_neural.py 实现:

  • 使用 Femto Mega 获取深度对齐彩色图像。
  • 用 MediaPipe/神经网络方案识别人手、手掌位移和手指弯曲。
  • 机械臂 RM65-B 通过 RealMan API 的 CANFD 透传接口 rm_movep_canfd 跟随手掌运动。
  • 强脑 Revo2 基础版灵巧手通过强脑官方 bc_stark_sdk RS485/Modbus 接口跟随手指弯曲。
  • 通过 GUI 在按下 s 前调参;按 s 开始识别和控制;按 h 回原位;按 p 保存 GUI 默认参数。

2. 为什么不用一条 RS485 全包?因为它真的会“堵车” 🛑

调试中发现,如果机械臂和灵巧手都走 RM 工具端 RS485/raw-Modbus,会出现:

  • 机械臂响应慢,难以达到 CANFD 那种丝滑跟随。
  • 灵巧手和机械臂共享 RM_API/控制器资源,容易互相等待。
  • rm_set_pos_step 是离散步进,不是连续轨迹流,稳定但不够丝滑。
  • 手命令频繁写 Modbus 时,机械臂 SDK 可能被占用,日志会出现 Holding hand command while RM65-B SDK is busy。

最终推荐架构:

19fa189d05868.png

3. 硬件连接清单

_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=6963192697213245167&skey=@crypt_b87d6e1d_0057a155d10c0a9d0028ace066520666&mmweb_appid=wx_webfilehelper.jpeg
设备 连接方式 备注
RM65-B 控制器 Jetson 通过网口连接 192.168.1.18:8080 用 RealMan API 控制机械臂
Femto Mega USB/网口按 Orbbec SDK 配置 默认彩色流 1280x720@30fps
Revo2 基础版 独立 USB-RS485 接 Jetson 推荐 /dev/ttyUSB0 或自动检测
Revo2 供电 可用机械臂末端 24V hand_tool_voltage_type:=3
USB-RS485 A/B/GND 必须接对 A/B 接反会像在跟空气讲道理

4. SDK 安装与环境准备

4.1 RealMan RM_API2

确认工程中存在:

/home/jetson/ws/RM_API2-main

并确保脚本能导入 Robotic_Arm.rm_robot_interface。如果导入失败,把 RM_API2 Python 路径加入 PYTHONPATH。

4.2 Orbbec pyorbbecsdk

确认当前脚本位于:

/home/jetson/ws/pyorbbecsdk-2-main/camera_arm_rm65b_control_neural.py

建议先跑 Orbbec 官方示例,确认相机能出彩色图和深度图。

4.3 强脑 BrainCo SDK

推荐目录:

/home/jetson/ws/brainco-hand-sdk-main/python

确认 Python 能导入:

python3 -c "from bc_stark_sdk import main_mod as sdk; print('BrainCo SDK OK')"

强脑官方 RS485 自动检测可用时,日志里会出现类似:

Found device at baudrate Baud460800, slave_id: 0x7F
Device SN: "...", hw_type: Revo2Basic
Successfully detected device on port: /dev/ttyUSB0

5. 推荐运行命令:机械臂 CANFD + 灵巧手官方 RS485

python /home/jetson/ws/Jetson_Femto_Realman_Brainco_Demo/camera_arm_rm65b_control_neural.py 
  --ros-args 
  -p robot_motion_enabled:=true 
  -p robot_ip:=192.168.1.18 
  -p arm_control_protocol:=canfd 
  -p canfd_follow:=false 
  -p canfd_trajectory_mode:=2 
  -p canfd_radio:=50 
  -p arm_command_interval_s:=0.04 
  -p max_arm_target_delta_m:=0.012 
  -p min_command_delta_m:=0.002 
  -p arm_motion_unit_m:=0.002 
  -p hand_control_enabled:=true 
  -p hand_transport:=brainco-rs485 
  -p hand_rs485_sdk_path:=/home/jetson/ws/brainco-hand-sdk-main/python 
  -p hand_rs485_port:=auto 
  -p hand_rs485_slave_id:=0 
  -p hand_rs485_baudrate:=460800 
  -p hand_rs485_duration_ms:=60 
  -p hand_wait_for_first_arm_command:=false 
  -p hand_pause_while_arm_sdk_busy:=false 
  -p hand_configure_tool_voltage:=true 
  -p hand_tool_voltage_type:=3

启动后:

  1. 等待日志出现 Hardware/software initialization complete。
  1. OpenCV 窗口中出现最近人候选框。
  1. 按 s 开始跟随。
  1. 按 h 回安全原位。
  1. 在等待 s 前可调 GUI;按 p 保存默认参数。

6. 关键技术亮点

6.1 最近人锁定

脚本会用深度信息标定最近的人,只识别该人的手臂和手掌。附近路人不会轻易抢戏,除非他离镜头更近,俗称“物理插队”。

6.2 神经网络加速识别

脚本使用轻量 MediaPipe Hands,支持 ROI 缩放:

  • nn_inference_resize_enabled:=true
  • nn_inference_max_side_px:=384

目的是减少输入图像尺寸,降低推理压力,让 Jetson 少一点热血沸腾。

6.3 机械臂 MIT 风格外环滤波

参数包括:

  • arm_mit_kp
  • arm_mit_kd
  • arm_mit_max_velocity_m_s
  • arm_mit_max_accel_m_s2

它不是底层力矩控制,而是笛卡尔目标轨迹整形,用来平衡响应速度和抖动。

6.4 灵巧手防误弯曲

脚本加入多层过滤:

  • hand_bend_deadzone
  • hand_bend_smoothing
  • hand_bend_max_delta
  • hand_reject_single_finger_spikes
  • hand_reject_multi_finger_spikes
  • hand_closure_confirm_frames

这些参数负责避免视觉关键点抽风时,灵巧手突然表演“无实物握拳”。

19fa1b87311a7.png

7. 调试路线:别一上来就全开,不然你会和日志互相凝视 👀

7.1 先测机械臂网络

ping 192.168.1.18
python3 -c "import socket; socket.create_connection(('192.168.1.18',8080),3); print('RM TCP OK')"

7.2 单独测机械臂 CANFD

python /home/jetson/ws/pyorbbecsdk-2-main/camera_arm_rm65b_control_neural.py 
  --ros-args 
  -p robot_motion_enabled:=true 
  -p robot_ip:=192.168.1.18 
  -p arm_control_protocol:=canfd 
  -p hand_control_enabled:=false

看到 protocol=CANFD 才算走对路。

7.3 单独测强脑 RS485

python /home/jetson/ws/pyorbbecsdk-2-main/camera_arm_rm65b_control_neural.py 
  --ros-args 
  -p robot_motion_enabled:=true 
  -p robot_ip:=192.168.1.18 
  -p arm_control_protocol:=canfd 
  -p max_arm_offset_m:=0.0 
  -p hand_control_enabled:=true 
  -p hand_transport:=brainco-rs485 
  -p hand_rs485_sdk_path:=/home/jetson/ws/brainco-hand-sdk-main/python 
  -p hand_rs485_port:=auto 
  -p hand_rs485_slave_id:=0 
  -p hand_configure_tool_voltage:=true 
  -p hand_tool_voltage_type:=3

8. 常见坑位速查表

19fa1c8e59871.png
现象 常见原因 处理
Failed to connect RM65-B 机械臂 IP/端口不通,旧进程占用 ping、socket 测试、杀旧进程
日志显示 protocol=RS485 忘传 arm_control_protocol:=canfd 补参数
机械臂识别有数值但不动 min_command_delta_m >= max_arm_target_delta_m 设置 max_arm_target_delta_m:=0.012、min_command_delta_m:=0.002
CANFD 手报 os error 22 can0 不是 CANFD,mtu 不是 72 ip link set can0 type can ... fd on
common_imports 找不到 没传强脑 SDK Python 路径 设置 hand_rs485_sdk_path
/dev/ttyUSB0 读不到 Revo2 串口错、A/B 反、没共地、手仍接在 RM 末端 用 hand_rs485_port:=auto,检查 A/B/GND
raw-Modbus 能读 FC03 但 FC04 超时 实际位置读取不是必要步骤 hand_raw_modbus_read_position_on_start:=false
按 h 后回原位失败 还有运动命令在飞,控制器状态忙 单测时关 home_key_enabled,稳定后再开

9. 参数调优建议

19fa1d019ae5b.png

9.1 机械臂更快

-p arm_command_interval_s:=0.04
-p arm_motion_unit_m:=0.002
-p max_arm_target_delta_m:=0.012
-p min_command_delta_m:=0.002
-p arm_mit_max_velocity_m_s:=0.45
-p arm_mit_max_accel_m_s2:=1.2

如果开始抖,就适当加大 arm_mit_kd 或降低 arm_mit_max_velocity_m_s。

9.2 灵巧手更快

-p hand_rs485_duration_ms:=40
-p hand_send_hz:=40
-p hand_smoothing:=0.90
-p hand_deadband:=1

如果误弯曲变多,不要急着怪手,先看识别图:多数时候是关键点在偷偷讲相声。

11. 最终结论

19fa1fa633db5.png

最稳的方案不是“所有设备挤一条通信链路”,而是:

  • 机械臂用 CANFD,保证跟手丝滑。
  • 灵巧手用强脑官方 RS485 SDK,独立串口,避免抢 RM_API。
  • 视觉识别、MIT 滤波、手指防误触发一起上,少一点玄学,多一点工程。

这套架构的核心思想很朴素:让每个硬件走自己最舒服的路,别让它们在同一条窄桥上排队吵架。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注