具身智能专题(1)-lerobot环境配置及机械臂调试

1. 从github中克隆lerobot项目

# 版本为0.1.0
git clone https://github.com/huggingface/lerobot.git

2. 环境配置

cd lerobot
conda create -y -n lerobot python=3.10
conda activate lerobot

pip install -e . 
pip install -e ".[aloha, pusht]"
pip install -e ".[dynamixel]"

conda install -c conda-forge ffmpeg

如果pip install -e . 报错pyav安装不上,属于版本不兼容问题。直接执行下面的命令
pip install lerobot==0.1.0

3. 机器人硬件设备及组装

硬件:

  • WOWROBO机械臂套件(主动臂和从动臂)
  • 两个摄像头
  • 一个拍摄支架

在这里插入图片描述组装过程略过(详细请看自身产品的组装说明书)

4.机器人初步部署及测试

安装好机械臂套件并搭建好lerobot环境后,需要统一USB端口,此步骤的目的在于后续不会再重复调整设备的端口号,一次性绑定后,下次断开重连时,系统自动将设备挂载到预设的端口上面,省去后续修改的麻烦。
首先查看USB设备

# 这里已经知道机械臂的前缀信息,如果新设备不知道任何信息,只需要在断开和插上后分别查看/dev目录对比新增的设备端口号即可。

ls /dev/ttyACM*

在这里插入图片描述如上图所示,ttyACM0ttyACM1分别是主臂和从臂的设备端口 (通过拔插实验得到设备及对应端口号),现在需要将这两个接口进行统一固定,具体思路是

leader_port = "/dev/ttyACM10"  # 主臂端口
follower_port = "/dev/ttyACM11"  # 从臂端口

使用 udev 规则绑定自定义端口号:Linux 的 udev 系统允许我们根据设备的属性(例如 idVendor、idProduct、serial 等)创建符号链接,并将设备映射到我们希望的端口号(例如 /dev/ttyACM10 和 /dev/ttyACM11)。

步骤:

查找设备信息:

插上主臂和从臂设备后,运行以下命令分别获取主臂、从臂的设备信息:

udevadm info -a -n /dev/ttyACM0 | grep idVendor # 替换实际插上设备后 主、从臂的 /dev/ttyACM0 端口号,可以加上管道筛选
udevadm info -a -n /dev/ttyACM0 | grep idProduct # 可以加上管道筛选
udevadm info -a -n /dev/ttyACM0 | grep serial # 建议使用管道筛选,不用再去里面寻找

在这里插入图片描述从输出信息中,提取关键设备属性(获取第一个数据):

1. 主臂设备信息:

  • ATTRS{idVendor}=="1a86"
  • ATTRS{idProduct}=="55d3"
  • ATTRS{serial}=="5970073336"

2. 从臂设备信息:略过(步骤同上所示)

创建udev规则文件
sudo vim /etc/udev/rules.d/99-usb-serial.rules

创建一个规则文件,并添加以下内容:

# 主臂设备绑定到 ttyACM10 
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d3", ATTRS{serial}=="5970073336", SYMLINK+="ttyACM10"

# 从臂绑定到 ttyACM11
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d3", ATTRS{serial}=="58FA101430", SYMLINK+="ttyACM11"

SUBSYSTEM=="tty":规则仅适用于串口设备。
ATTRS{idVendor}ATTRS{idProduct}:匹配设备的供应商和产品 ID。
ATTRS{serial}:区分同型号设备。
SYMLINK+="ttyACM10":创建符号链接 /dev/ttyACM10 指向主臂设备。

最后,将主臂设备设置为 /dev/ttyACM10,从臂设备设置为 /dev/ttyACM11

重启udev服务

保存文件后,运行以下命令使规则生效:

sudo udevadm control --reload-rules
sudo udevadm trigger
验证结果

插入设备后,应该能够通过 /dev/ttyACM10/dev/ttyACM11 访问设备。

ls -l /dev/ttyACM10 /dev/ttyACM11 

如果配置成功,应该可以看到 /dev/ttyACM10 和 /dev/ttyACM11 映射到相应的设备。

在这里插入图片描述

自动给端口开权限
sudo vim ~/.bashrc

添加以下内容,并保存

sudo chmod 777 /dev/ttyACM10  # leader
sudo chmod 777 /dev/ttyACM11  # follower
列出并配置电机

将上面的端口修改到下面的代码中,并在交互式式终端中执行代码:

cd lerobot/
python
from lerobot.common.robot_devices.motors.dynamixel import DynamixelMotorsBus

leader_port = "/dev/ttyACM10"
follower_port = "/dev/ttyACM11"

leader_arm = DynamixelMotorsBus(
    port=leader_port,
    motors={
        # name: (index, model)
        "shoulder_pan": (1, "xl330-m077"),
        "shoulder_lift": (2, "xl330-m077"),
        "elbow_flex": (3, "xl330-m077"),
        "wrist_flex": (4, "xl330-m077"),
        "wrist_roll": (5, "xl330-m077"),
        "gripper": (6, "xl330-m077"),
    },
)

follower_arm = DynamixelMotorsBus(
    port=follower_port,
    motors={
        # name: (index, model)
        "shoulder_pan": (1, "xl430-w250"),
        "shoulder_lift": (2, "xl430-w250"),
        "elbow_flex": (3, "xl330-m288"),
        "wrist_flex": (4, "xl330-m288"),
        "wrist_roll": (5, "xl330-m288"),
        "gripper": (6, "xl330-m288"),
    },
)
leader_arm.connect()
follower_arm.connect()
leader_pos = leader_arm.read("Present_Position")
print(leader_pos)
follower_pos = follower_arm.read("Present_Position")
print(follower_pos) 

预期输出:

array([2253,  523, 371, 281, 5549, 2451], dtype=int32)
array([2203, 601,   156, 2153, 2011, 2453], dtype=int32)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigCabbageFy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值