跳转至

使用总览

本项目主要目的是打造一个通用的具身智能数据传输模式, 涵盖机器人自定义, 数据采集, 模型部署, 机器人遥操四个方向.


如何设置自己的机器人

本项目将机器人的部件分为两类:
controller: 拥有控制功能的部件, 如机械臂, 灵巧手, 底盘等...实现自己的controller请参考controller与对应类型的controller实现说明. sensor: 只用于获取信息的部件, 如视觉传感器, 触觉传感器等...实现自己的sensor请参考sensor与对应类型的sensor实现说明.
如果你的操作部件和传感器已经在controller/sensor中了, 那你可以直接调用, 否则的话你可以提issue, 我们会尽可能收集到该款机械臂, 并进行适配工作. 如果想自己实现的话, 可以参考developer_README.md, 欢迎各位完成适配后提交PR!

注意!
我们希望机械臂返回的的joint angle是弧度制, 即[-pi, pi], 夹爪是归一化的张合度[0,1], 末端6D坐标中x,y,z单位为米, rx,ry,rz单位为弧度制, 当然你也可以用四元数来控制机械臂, 这取决于你机械臂api的支持, 操控的对应数据单位相同与获取数据的单位.

在保证你所需要的部件都已经被定义后, 请模仿my_robot中的test_robot示例, 可以参考自定义机器人示例来组装你的机器人. 在完成组装后, 你可以编写示例, 来查看几个关键函数是否被正确实现:

if __name__=="__main__":
    import time
    robot = PiperSingle()
    # 采集测试
    data_list = []
    for i in range(100):
        print(i)
        data = robot.get()
        robot.collect(data)
        time.sleep(0.1)
    robot.finish()
    # 运动测试
    move_data = {
        "left_arm":{
        "qpos":[0.057, 0.0, 0.216, 0.0, 0.085, 0.0],
        "gripper":0.2,
        },
    }
    robot.move(move_data)

采集数据

采集数据需要你至少定义好需要采集的组件对应的controller与sensor, 如我的机器人是一个双臂带摄像头的机器人, 只有上半身, 那我至少要定义我机械臂对应的controller与摄像头对应的sensor.

然后在example/collect/中选择你希望使用的模式, 具体请参考数据采集流程.


部署模型

对于部署模型, 你需要了解该模型推理需要的参数与模型输出的参数, 并实现对应接口, 具体请参考部署模型流程来部署自己的模型.


机械臂遥操

遥操由于控制频率较高, 且对于IK逆解约束较强, 因此大部分机械臂提供的直接IK接口在遥操上表现比较差, 最好使用Canfd类型接口, 用于专门遥操IK.

为了区分二者的末端控制, 专门在arm_controller中提供了teleop_qpos的关键词, 用于调用遥操接口.

具体实现可以参考my_robot/*_teleop.py的实现, 实现说明请看机器人遥操说明