当前位置: 首页 > news >正文

【lerobot】3-开源SO-100 主从臂的舵机位置校正、遥控操作(ubuntu系统)

官方从零教程:https://github.com/huggingface/lerobot/blob/main/examples/10_use_so100.md

8-lerobot aloha装配完毕如何进行遥操作

在这里插入图片描述

需要先完成的

  1. 组装好了so-100 2个机械臂
  2. 下载安装了lerobot的代码环境:
  3. 固定好主从臂,通过usb链接到同一个usb.

舵机校正

为什么要校正对齐2个臂的位置? (为了后续数据采集)

SO-100 机械臂硬件搭建好后,只有将引导臂(leader)和从动臂(follower)进行相同的位置校正后,才能使用引导臂遥控从动臂。
校正的结果好坏,主要看是否一起动。

在ubuntu下接入2个机械臂后,查看端口

python lerobot/scripts/find_motors_bus_port.py

查看 结果
在这里插入图片描述

找到串口对应关系,修改配置文件

cd /home/zengxy/code/lerobot # 自己下载lerobot代码位置
vi lerobot/common/robot_devices/robots/configs.py

在这里插入图片描述

实际修改后

    leader_arms: dict[str, MotorsBusConfig] = field(
        default_factory=lambda: {
            "main": FeetechMotorsBusConfig(
                port="/dev/ttyACM1",  <-- UPDATE HERE
                motors={
                    # name: (index, model)
                    "shoulder_pan": [1, "sts3215"],
                    "shoulder_lift": [2, "sts3215"],
                    "elbow_flex": [3, "sts3215"],
                    "wrist_flex": [4, "sts3215"],
                    "wrist_roll": [5, "sts3215"],
                    "gripper": [6, "sts3215"],
                },
            ),
        }
    )

    follower_arms: dict[str, MotorsBusConfig] = field(
        default_factory=lambda: {
            "main": FeetechMotorsBusConfig(
                port="/dev/ttyACM0",   <-- UPDATE HERE
                motors={
                    # name: (index, model)
                    "shoulder_pan": [1, "sts3215"],
                    "shoulder_lift": [2, "sts3215"],
                    "elbow_flex": [3, "sts3215"],
                    "wrist_flex": [4, "sts3215"],
                    "wrist_roll": [5, "sts3215"],
                    "gripper": [6, "sts3215"],
                },
            ),
        }
    )

舵机中位校正 (选做,可跳过,后续出问题,再来做)

1.为什么要中位校准?
STS3215 舵机的输出轴在0-360度范围内旋转时,磁编码器对应的输出范围是0~4095,舵机的旋转被限制在“0<–>4095“范围内,不能自主从0向4095运动,也不能自主从4095向0运动。
舵机的中位是2047,可以自主从2047往0的方向运动,也可以自主从2047往4095的方向运动。但如果舵机在2047位置时,已经接近极限位置,则可能从2047往某个方向运动角度大于180度时,则该区域不可达。

2-2-lerobot aloha新版6+1的SimpleAutomation 6DOF ARM 装配完成标定舵机中位

执行校正命令

给权限

sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1

follow臂(从动臂)的校正命令

–control.type=calibrate

python lerobot/scripts/control_robot.py \
  --robot.type=so100 \
  --robot.cameras='{}' \
  --control.type=calibrate \
  --control.arms='["main_follower"]'

在这里插入图片描述
输入代码后的相同位置,点确定
在这里插入图片描述

驱动臂(leader arm)

python lerobot/scripts/control_robot.py \
  --robot.type=so100 \
  --robot.cameras='{}' \
  --control.type=calibrate \
  --control.arms='["main_leader"]'

在这里插入图片描述

二、从动臂跟随主动臂动 (teleoperate)

遥控测试(teleoperate) 无相机接入

python lerobot/scripts/control_robot.py \
  --robot.type=so100 \
  --robot.cameras='{}' \
  --control.type=teleoperate

遥控测试(teleoperate) 接入相机接入

python lerobot/scripts/control_robot.py \
  --robot.type=so100 \
  --control.type=teleoperate

附录

发现的问题 ,第一次校正后,夹的过程,闭合不紧,再从头校正一次效果好了很多。

校正时输出

(lerobot) zengxy@jame:~/code/lerobot$ python lerobot/scripts/control_robot.py
–robot.type=so100
–robot.cameras=‘{}’
–control.type=calibrate
–control.arms=‘[“main_follower”]’
INFO 2025-04-11 14:16:05 ol_robot.py:369 {‘control’: {‘arms’: [‘main_follower’]},
‘robot’: {‘calibration_dir’: ‘.cache/calibration/so100’,
‘cameras’: {},
‘follower_arms’: {‘main’: {‘mock’: False,
‘motors’: {‘elbow_flex’: [3, ‘sts3215’],
‘gripper’: [6, ‘sts3215’],
‘shoulder_lift’: [2,
‘sts3215’],
‘shoulder_pan’: [1, ‘sts3215’],
‘wrist_flex’: [4, ‘sts3215’],
‘wrist_roll’: [5, ‘sts3215’]},
‘port’: ‘/dev/ttyACM0’}},
‘gripper_open_degree’: None,
‘leader_arms’: {‘main’: {‘mock’: False,
‘motors’: {‘elbow_flex’: [3, ‘sts3215’],
‘gripper’: [6, ‘sts3215’],
‘shoulder_lift’: [2, ‘sts3215’],
‘shoulder_pan’: [1, ‘sts3215’],
‘wrist_flex’: [4, ‘sts3215’],
‘wrist_roll’: [5, ‘sts3215’]},
‘port’: ‘/dev/ttyACM1’}},
‘max_relative_target’: None,
‘mock’: False}}
Calibration file not found ‘.cache/calibration/so100/main_follower.json’
Connecting main follower arm.
Connecting main leader arm.
Missing calibration file ‘.cache/calibration/so100/main_follower.json’

相关文章:

  • 基于图扩散小波的连接组分析:定位结构-功能映射中的扩散源
  • docker部署GPUStack【Nvidia版本】
  • 【Hot100】239. 滑动窗口最大值
  • Express中间件(Middleware)详解:从零开始掌握(4)
  • 高级java每日一道面试题-2025年4月07日-微服务篇[Nacos篇]-如何监控Nacos的运行状态?
  • 深入探究AI编程能力:ChatGPT及其大规模模型的实现原理
  • 纯PHP编写的聊天室无需数据库,上传虚拟空间就可使用
  • 【PostgreSQL教程】PostgreSQL 特别篇之 语言接口连接PHP
  • [LeetCode 45] 跳跃游戏2 (Ⅱ)
  • Python高级爬虫之JS逆向+安卓逆向1.4节:数据运算
  • Solidity私有函数和私有变量区别,私有变量可以被访问吗
  • 在轨道交通控制系统中如何实现μs级任务同步
  • KiCad 9.0:如何在 PCB 上暴露铜皮(开窗)
  • go中new和make有什么异同?
  • [LeetCode 1306] 跳跃游戏3(Ⅲ)
  • AD利用转换工具快速生成异形焊盘
  • 从Ampere到Hopper:GPU架构演进对AI模型训练的颠覆性影响
  • TLA:用于接触-丰富操作的触觉-语言-动作模型
  • Profibus DP转ModbusTCP网关通讯案例解析
  • Arrays.asList() 隐藏的陷阱
  • 女子伸腿阻止高铁关门被拘,央媒:严格依规公开处理以儆效尤
  • 黄仁勋结束年内第二次中国行:关键时刻,重申对中国市场承诺
  • 三一重工去年净利增逾三成至59.75亿,拟分红超30亿元
  • 广西旱情如何?农业厅:近半数农田墒情不足至干旱,本月降雨将渐增
  • 北京将严查大数据杀熟和强制搭售等五种网络销售违法行为
  • 中国三项文献遗产新入选《世界记忆名录》