用于通过 ZLG USBCANFD 适配器控制灵巧机器人手的 Python 接口。提供直接控制和 ROS2 集成功能。
本软件包提供:
- 用于 DexHand 硬件的 CANFD 通信接口
- 带有反馈处理的关节空间控制接口
- 内置数据记录和可视化工具
- ROS2 接口实现
- 硬件测试工具
- Linux 环境
- Python 3.8+
- ZLG USBCANFD 适配器(已在 USBCANFD-200U 上测试)
- ROS1/ROS2(可选,用于 ROS 接口)
请参考以下连接示意图:
-
下载或克隆仓库:
git clone https://gitee.com/DexRobot/pyzlg_dexhand.git
-
安装软件包:
pip install -e .
-
配置 USB 权限:
sudo ./tools/setup_usb_can.sh
设置脚本将:
- 创建 canbus 用户组
- 将你的用户添加到该组
- 设置 USBCANFD 适配器的 udev 规则
- 配置适当的权限
你可能需要注销并重新登录才能使更改生效。
-
编辑
config/config.yaml
以匹配你的硬件设置,特别是通道和 ZCAN 设备类型。
运行硬件测试:
python tools/hardware_test/test_dexhand.py --hands right
这将使机器人手执行一系列预定义的动作。
启动交互式控制界面:
python tools/hardware_test/test_dexhand_interactive.py --hands right
这将提供一个加载了机器人手对象和辅助函数的 IPython shell。
示例命令:
right_hand.move_joints(th_rot=30) # 旋转拇指
right_hand.move_joints(ff_mcp=60, ff_dip=60) # 弯曲食指
right_hand.move_joints(ff_spr=20, control_mode=ControlMode.PROTECT_HALL_POSITION) # 展开所有手指,使用替代控制模式
right_hand.get_feedback()
right_hand.reset_joints()
right_hand.clear_errors() # 清除所有错误状态
你可以使用 tab 键补全和帮助命令来探索 API。
首先,安装 PyQt6
依赖:
pip install PyQt6 # 如有提示,需通过 apt 等方式安装其他依赖
然后,运行图形界面:
python examples/dexhand_gui.py
图形界面通过滑块提供实时的关节角度控制。
本 SDK 提供支持 ROS1(rospy)和 ROS2(rclpy)环境的 ROS 接口,可自动检测并使用适当的框架。
使用方法:
# 使用默认配置启动 ROS 节点
python examples/ros_node/dexhand_ros.py
# 运行演示发布程序(用于测试)
python examples/ros_node/dexhand_ros_publisher_demo.py --hands right --cycle-time 3.0
接口:
话题(默认) | 类型 | 方向 | 描述 |
---|---|---|---|
/joint_commands |
sensor_msgs/JointState |
输入 | 关节位置命令 |
/joint_states |
sensor_msgs/JointState |
输出 | 关节位置反馈(即将推出) |
/tactile_feedback |
TBD | 输出 | 触觉传感器数据(即将推出) |
话题名称可通过 config/config.yaml
配置。
服务 | 类型 | 描述 |
---|---|---|
/reset_hands |
std_srvs/Trigger |
将手重置至默认位置 |
注意:
- 命令中的关节名称与 URDF 文件规范匹配
- 配置可通过
config/config.yaml
自定义 - 所有功能在 ROS1 和 ROS2 环境中均相同
示例代码:
from pyzlg_dexhand import LeftDexHand, RightDexHand, ControlMode
# 初始化机器人手
hand = RightDexHand()
hand.init()
# 移动拇指
hand.move_joints(
th_rot=30, # 拇指旋转(0-150度)
th_mcp=45, # 拇指掌指关节弯曲(0-90度)
th_dip=45, # 拇指远端关节弯曲
control_mode=ControlMode.CASCADED_PID
)
# 获取反馈
feedback = hand.get_feedback()
print(f"拇指角度: {feedback.joints['th_rot'].angle}")
print(f"触觉力: {feedback.tactile['th'].normal_force}")
注意:
-
控制模式
CASCADED_PID
:提供更高刚度的精确位置控制PROTECT_HALL_POSITION
:提供更平滑的响应,但要求关节在上电时处于零位
-
错误处理
- 当手指运动被物体阻挡时,可能会进入错误状态并对控制信号无响应。为了可靠的持续控制,应在发送每个命令后调用
hand.clear_errors()
- 当手指运动被物体阻挡时,可能会进入错误状态并对控制信号无响应。为了可靠的持续控制,应在发送每个命令后调用
- 原始 CANFD 帧处理
- 硬件初始化
- 错误处理
- 消息过滤
- 命令编码/解码
- 消息解析
- 错误检测
- 反馈处理
- 高级控制 API
- 关节空间映射
- 反馈处理
- 错误恢复
软件包包含使用核心接口构建的示例应用:
- ROS2 接口 (examples/ros2_demo/)
- 硬件测试工具 (tools/hardware_test/)
- 交互式测试 shell
用于分析和调试的内置日志功能:
from pyzlg_dexhand import DexHandLogger
# 初始化记录器
logger = DexHandLogger()
# 记录命令和反馈
logger.log_command(command_type, joint_commands, control_mode, hand)
logger.log_feedback(feedback_data, hand)
# 生成分析
logger.plot_session(show=True, save=True)
日志包括:
- 关节命令和反馈
- 触觉传感器数据
- 错误状态
- 时序信息
config/
中的配置文件:
config.yaml
:左/右手参数、ROS2 节点设置和 ZCAN 配置
- Fork 仓库
- 创建功能分支(
git checkout -b feature/improvement
) - 遵循现有的代码结构和文档规范
- 添加适当的错误处理和日志记录
- 根据需要更新测试
- 提交拉取请求
本项目采用 Apache License 2.0 许可证 - 详见 LICENSE 文件。
注意:本软件按原样提供。虽然我们努力保持与 DexHand 产品的兼容性,但使用本软件需自担风险。