近期在复现DP3的相关工作,目前尝试过在仿真环境和真实环境分别采集数据,记录相关工作,方便后续查阅。本文将详细分析一个结合手柄控制、数据采集和动作回放功能的机械臂控制系统。该系统允许用户通过手柄实时控制机械臂运动,同时记录丰富的传感数据和操作状态,实现复杂任务的动作录制和回放功能。
系统概述
这个控制系统的核心它集成了以下功能:
-
手柄控制:使用手柄摇杆和按钮控制机械臂6自由度运动
-
数据采集:记录点云、RGB图像、深度图像、机械臂状态等多模态数据
-
动作录制与回放:录制手柄操作序列并精确回放
-
安全保护:包括工作空间限制和异常处理机制
-
可视化界面:实时显示系统状态和操作信息
关键组件分析
1. 手柄控制模块
系统通过pygame库处理手柄输入,提供直观的操控体验:
# 手柄映射关系 左摇杆上下 → X轴移动 左摇杆左右 → Y轴移动 L1/L2 → Z轴控制 右摇杆上下 → RX旋转 右摇杆左右 → RY旋转 R1/R2 → RZ旋转 # 功能按钮 SELECT → 打开夹爪 START → 关闭夹爪 BUTTON4+BUTTON5 → 开始记录数据 BUTTON6+BUTTON7 → 结束记录数据 BUTTON10 → 动作录制开关 BUTTON11 → 回放功能开关
2. 数据采集系统
系统以10Hz频率采集多模态数据:
# 采集数据类型 - 时间戳 - 原始点云数据(307,200个点) - RGB图像(处理后为84x84) - 深度图像(处理后为84x84) - 机械臂状态:[x, y, z, rx, ry, rz, gripper] - 动作指令:[dx, dy, dz, drx, dry, drz, gripper_target]
数据预处理采用专门的工具函数:
processed_pc = preprocess_point_cloud(point_cloud, extrinsics_matrix, work_space) processed_rgb = preprocess_image(rgb_image, img_size=84)
3. 存储系统
采用高效的Zarr格式存储采集数据:
def write_zarr(filename, point_clouds, rgb_images, depth_images, states, actions, episode_ends): # 创建Zarr存储结构 store = zarr.DirectoryStore(filename) root = zarr.group(store=store, overwrite=True) # 设置压缩器 compressor = zarr.Blosc(cname='zstd', clevel=3, shuffle=1) # 分别存储各类数据 data_group = root.create_group('data') data_group.create_dataset('point_cloud', ...) data_group.create_dataset('img', ...) data_group.create_dataset('depth', ...) data_group.create_dataset('state', ...) data_group.create_dataset('action', ...) # 存储元数据 meta_group = root.create_group('meta') meta_group.create_dataset('episode_ends', ...)
4. 动作录制与回放系统
实现了一套完整的录制-回放工作流:
录制功能:
def start_recording_actions(self): self.recording_actions = True self.recorded_actions = [] self.recorded_timestamps = [] def stop_recording_actions(self): # 保存为pkl文件 data = {'timestamps': self.recorded_timestamps, 'actions': self.recorded_actions} with open(filename, 'wb') as f: pickle.dump(data, f)
回放功能:
def start_playback(self): self.playing_actions = True self.playback_index = 0 self.playback_start_time = time.time() def next_playback_action(self): if current_time >= recorded_timestamps[self.playback_index]: # 执行录制的动作 if action_type == "button": # 模拟按钮操作 elif action_type == "axis": # 模拟摇杆操作
回放模式工作流:
1. BUTTON11进入回放模式 2. L1/L2选择回放文件 3. L1+L2确认文件选择 4. R1/R2调整重复次数 5. R1+R2确认重复次数 6. BUTTON11开始回放
系统架构
+-----------------+ | Pygame | | Joystick | +-------+---------+ | v +-----------------+ +------+------+ +-----------------+ | Aubo机械臂 <----+ Controller +----> 夹爪控制 | +-----------------+ +------+------+ +-----------------+ | v +-------+---------+ | 相机系统 | | (RGB-D相机) | +-------+---------+ | v +-------+---------+ | 数据采集系统 +----> Zarr存储 | | | | | v | v | 动作录制回放 +----> PKL文件 +-----------------+
创新点与优势
-
多模态数据同步采集:同时记录机械臂状态、传感数据和操作指令,形成完整的数据闭环
-
高效存储方案:Zarr格式+Blosc压缩,大幅提升点云和图像数据的存储效率
-
精确动作回放:基于时间戳的动作序列回放,实现操作精确复现
-
安全机制:工作空间限制、异常处理和自动复位功能
-
交互式界面:实时状态显示和控制信息可视化
-
可扩展架构:模块化设计便于集成新传感器和控制算法
应用场景
-
机器人学习:采集演示数据用于模仿学习或强化学习
-
工业自动化:录制和复现精密装配操作
-
研究验证:实现算法效果的精确复现和对比
-
教育培训:机器人操作培训和技能传递
使用示例
# 初始化系统 controller = AuboJoystickController(aubo_controller, driver, camera, T_camera_to_base) # 开始控制循环 controller.start_control() # 导出数据 controller.export_data('motion_data.csv')
总结
这个控制系统提供了一个完整的手柄操作-数据采集-动作回放解决方案。通过精心设计的架构和丰富的功能,它既满足专业研究的高要求,又保持了操作的便捷性。系统的多模态数据采集和高效存储方案为机器人学习研究提供了可靠的数据支持,而动作录制回放功能则大大提高了操作效率和实验的可重复性。无论是进行机器人算法研究,还是部署工业自动化解决方案,这个系统都能提供强大的技术支持。其模块化设计也使得系统能够灵活扩展,适应未来更复杂的应用场景。