【养个小龙虾】让小龙虾帮我控制七轴臂

OpenClaw作为近期热门开源项目,凭借简洁的操作逻辑与强大的适配能力,成为机械臂控制领域的关注焦点。其可实现AI指令与设备执行的全流程联动,大幅降低机械臂操控门槛。本文将聚焦实操,结合pyAgxArm SDK,带大家完成OpenClaw的下载、安装与配置,实现对NERO七轴机械臂的高效控制。

视频DEMO

www.bilibili.com/video/BV1qG...

一、下载与安装openclaw

  • 打开openclaw官网:openclaw.ai/

  • 找到Quick Start标签并执行一键安装脚本

二、开始配置OpenClaw

  • 推荐选择QWEN模型
  • 全选hook
  • 打开web端网页

二、告诉OpenClaw学会Skill以及控制机械臂的规则

  • 在skill目录创建agx_arm_codegen目录,然后创建使用下面的skill文件:

  • SKILLS.md

bash 复制代码
---
name: agx-arm-codegen
description: 引导 OpenClaw 根据用户自然语言生成基于 pyAgxArm 的机械臂控制代码。当用户用提示词描述机械臂动作且现有脚本无法直接满足时,根据本技能提供的 API 与示例自动组织并生成可执行的 Python 脚本。
metadata:
  {
    "openclaw":
      {
        "emoji": "烙",
        "requires": { "bins": ["python3", "pip3"] },
      },
  }
---

## 功能概览

- 本技能用于**根据用户自然语言描述**,引导 OpenClaw **生成**可执行的 pyAgxArm 控制代码(Python 脚本),而不是仅调用现成 CLI。
- 参考 SDK:pyAgxArm([GitHub](https://github.com/agilexrobotics/pyAgxArm));参考示例:`pyAgxArm/demos/nero/test1.py`。

## 何时使用本技能

- 用户说「写一段代码控制机械臂」「根据我的描述生成控制脚本」「让机械臂按顺序做多个动作」等。
- 用户明确要求「生成 Python 代码」或「给我可运行的脚本」来控制 Nero/Piper 等 AgileX 机械臂。

## 使用本技能生成代码
   - 根据用户提示词,结合本技能的 `references/pyagxarm-api.md` 中的 API 与模板,生成一段完整、可运行的 Python 脚本。
   - 生成后说明:脚本需在已安装 pyAgxArm 和 python-can 的环境中运行,且需 CAN 已激活、机械臂上电;提醒用户注意安全(工作区域无人、可先小幅度测试)。

## 生成代码时的规则

1. **连接与配置**
   - 使用 `create_agx_arm_config(robot="nero", comm="can", channel="can0", interface="socketcan")` 创建配置(Nero 示例;Piper 可用 `robot="piper"`)。
   - 使用 `AgxArmFactory.create_arm(robot_cfg)` 创建机械臂实例,再 `robot.connect()` 建立连接。
2. **使能与运动前**
   - CRITICAL: The robot MUST BE ENABLED before switching modes. If the robot is in a disabled state, you cannot switch modes.
   - 运动前需切换为普通模式,让后使能:`robot.set_normal_mode()`,然后轮询 `robot.enable()` 直到成功;可设 `robot.set_speed_percent(100)`。
   - 运动模式:每当需要使用move_*时或需要切换为*模式时候,需要显式的设置`robot.set_motion_mode(robot.MOTION_MODE.J)`(关节)、`P`(点到点)、`L`(直线)、`C`(圆弧)、`JS`(关节快速响应,慎用)。
3. **运动接口与单位**
   - 关节运动:`robot.move_j([j1, j2, ..., j7])`,单位为**弧度**,Nero 为 7 关节。
   - 笛卡尔:`robot.move_p(pose)` / `robot.move_l(pose)`,pose 为 `[x, y, z, roll, pitch, yaw]`,位置单位**米**,姿态**弧度**。
   - 圆弧:`robot.move_c(start_pose, mid_pose, end_pose)`,每个 pose 为 6 个浮点数。
   - CRITICAL: All movement commands (move_j, move_js, move_mit, move_c, move_l, move_p) must be used in normal mode
   - 运动完成后应轮询 `robot.get_arm_status().msg.motion_status == 0` 或封装 `wait_motion_done(robot, timeout=...)` 再执行下一步。
4. **模式切换**
   - Switching modes (master, slave, normal) requires 1s delay before and after the mode switch
   - Use `robot.set_normal_mode()` to set normal mode
   - Use `robot.set_master_mode()` to set master mode
   - Use `robot.set_slave_mode()` to set slave mode
   - CRITICAL: Enable the robot FIRST with `robot.enable()` BEFORE switching modes
5. **安全与结尾**
   - 在生成脚本中可注明:执行前确认工作区域安全;首次建议小幅度移动;紧急时使用物理急停或 `robot.electronic_emergency_stop()` / `robot.disable()`。
   - 若用户要求「完成后失能」,在脚本末尾调用 `robot.disable()`。
6. **实现细节**
   - When waiting for motion to complete, use shorter timeout (2-3 seconds)
   - After each mechanical arm operation, add a small sleep (0.01 seconds)
   - Motion completion detection: `robot.get_arm_status().msg.motion_status == 0` (not == 1)

## 参考文件

- **API 与最小可运行模板**:`references/pyagxarm-api.md`  
  生成代码时请结合该文件中的接口说明与代码片段,保证与 pyAgxArm 及 test1.py 用法一致。

## 安全注意事项

- 生成的代码会驱动真实机械臂,必须提醒用户:执行前确认工作区域内无人员和障碍物;建议先小幅度、低速度测试。
- 高风险模式(如 `move_js`、`move_mit`)应在代码注释或对用户说明中标注风险,并建议仅在了解后果后使用。
- 本技能只负责「引导生成代码」,不直接执行运动;实际运行环境、CAN 激活、pyAgxArm 安装由用户自行准备(可参考 agx-arm 技能中的环境准备)。
bash 复制代码
# pyAgxArm API 速查与最小可运行模板
供 OpenClaw 根据用户自然语言生成机械臂控制代码时参考。SDK 来源:pyAgxArm([GitHub](https://github.com/agilexrobotics/pyAgxArm));示例参考:`pyAgxArm/demos/nero/test1.py`。

1. 连接与配置

python 复制代码
from pyAgxArm import create_agx_arm_config, AgxArmFactory
# 配置:robot 可选 nero / piper / piper_h / piper_l / piper_x;channel 如 can0
robot_cfg = create_agx_arm_config(
    robot="nero",
    comm="can",
    channel="can0",
    interface="socketcan",
robot = AgxArmFactory.create_arm(robot_cfg)
robot.connect()
  • create_agx_arm_config(robot, comm="can", channel="can0", interface="socketcan", **kwargs):创建配置字典;CAN 相关参数通过 kwargs 传入(如 channel、interface)。
  • AgxArmFactory.create_arm(config):返回机械臂驱动实例。
  • robot.connect():建立 CAN 连接并启动读取线程。

2. 使能与模式

python 复制代码
robot.set_normal_mode()   # 普通模式(单臂控制)
# 使能:轮询直到成功
while not robot.enable():
    time.sleep(0.01)

robot.set_speed_percent(100)   # 运动速度百分比 0--100
# 失能
while not robot.disable():
    time.sleep(0.01)
  • 主从模式(Nero/Piper 等):robot.set_master_mode()(零力拖拽)、robot.set_slave_mode()(跟随主臂)。

3. 运动模式与运动接口

模式 常量 接口 说明
关节位置速度 robot.MOTION_MODE.J robot.move_j([j1..j7]) 7 个关节角(弧度),有平滑
关节快速响应 robot.MOTION_MODE.JS robot.move_js([j1..j7]) 无平滑,慎用
点到点 robot.MOTION_MODE.P robot.move_p([x,y,z,roll,pitch,yaw]) 笛卡尔位姿,米/弧度
直线 robot.MOTION_MODE.L robot.move_l([x,y,z,roll,pitch,yaw]) 直线轨迹
圆弧 robot.MOTION_MODE.C robot.move_c(start_pose, mid_pose, end_pose) 每 pose 6 个浮点数
  • 单位:关节角为弧度 ;笛卡尔位姿为 (x,y,z)和弧度(roll, pitch, yaw)。
  • Nero 为 7 关节;Piper 为 6 关节,move_j/move_js 参数数量需与机型一致。

示例(关节运动 + 等待完成):

python 复制代码
import time

def wait_motion_done(robot, timeout: float = 3.0, poll_interval: float = 0.1) -> bool:  # Shorter timeout (2-3s)
    time.sleep(0.5)
    start_t = time.monotonic()
    while True:
        status = robot.get_arm_status()
        if status is not None and getattr(status.msg, "motion_status", None) == 0:
            return True
        if time.monotonic() - start_t > timeout:
            return False
        time.sleep(poll_interval)

robot.set_motion_mode(robot.MOTION_MODE.J)
robot.move_j([0.01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
wait_motion_done(robot, timeout=3.0)  # Shorter timeout

4. 读取状态

  • robot.get_joint_angles():当前关节角(返回值带 .msg 属性时为数组)。
  • robot.get_flange_pose():当前法兰位姿 [x, y, z, roll, pitch, yaw]
  • robot.get_arm_status():运动状态等;status.msg.motion_status == 0 表示运动完成。
  • 注意:运动完成后检测 robot.get_arm_status().msg.motion_status == 0(不是 == 1)

5. 其他

  • 回零:robot.move_j([0] * 7)(Nero 为 7 关节)。
  • 急停:robot.electronic_emergency_stop();恢复需 robot.reset()
  • MIT 阻抗/力矩控制(高级):robot.set_motion_mode(robot.MOTION_MODE.MIT)robot.move_mit(joint_index, p_des, v_des, kp, kd, t_ff),参数范围见 SDK,慎用。

6. 最小可运行模板(生成代码时可基于此扩展)

python 复制代码
#!/usr/bin/env python3
import time
from pyAgxArm import create_agx_arm_config, AgxArmFactory


def wait_motion_done(robot, timeout: float = 3.0, poll_interval: float = 0.1) -> bool:  # Shorter timeout (2-3s)
    time.sleep(0.5)
    start_t = time.monotonic()
    while True:
        status = robot.get_arm_status()
        if status is not None and getattr(status.msg, "motion_status", None) == 0:
            return True
        if time.monotonic() - start_t > timeout:
            return False
        time.sleep(poll_interval)


def main():
    robot_cfg = create_agx_arm_config(
        robot="nero",
        comm="can",
        channel="can0",
        interface="socketcan",
    )
    robot = AgxArmFactory.create_arm(robot_cfg)
    robot.connect()

    # Mode switching requires 1s delay before and after
    time.sleep(1)  # 1s delay before mode switch
    robot.set_normal_mode()
    time.sleep(1)  # 1s delay after mode switch
    
    # CRITICAL: The robot MUST BE ENABLED before switching modes
    while not robot.enable():
        time.sleep(0.01)
    robot.set_speed_percent(80)

    # After each mechanical arm operation, add a small sleep (0.01 seconds)
    # CRITICAL: All movement commands must be used in normal mode
    robot.set_motion_mode(robot.MOTION_MODE.J)
    robot.move_j([0.05, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
    time.sleep(0.01)  # Small delay after move command
    wait_motion_done(robot, timeout=3.0)  # Shorter timeout

    # 可选:退出前失能
    # while not robot.disable():
    #     time.sleep(0.01)


if __name__ == "__main__":
    main()

生成代码时请根据用户描述替换或增加运动步骤(move_j / move_p / move_l / move_c 等),并保持连接、使能、wait_motion_done 和单位(弧度/米)一致。

  • 接下来告诉OpenClaw学会这个skill

配置好机械臂CAN通信和python环境后,便可以让OpenClaw自动调用SDK驱动,生成控制代码控制机械臂

看到这里,相信你已经对OpenClaw控制Nero机械臂的实操逻辑了如指掌,也get到了这波开源热点的核心玩法。

OpenClaw的爆火,从来不是偶然------它让AI从"云端建议者"变成"本地执行者",而机械臂作为AI连接物理世界的重要载体,两者的结合必将解锁更多无限可能。 希望这篇教程能成为你入门的敲门砖,也希望你能带着学到的技能,去探索更多"AI+机械臂"的创新场景,无论是日常实操、项目开发,还是技能提升,愿你都能学有所成。

实操过程中如果遇到问题,欢迎在评论区留言交流,后续我们也会持续更新OpenClaw的更多实操教程,带你解锁这只"开源龙虾"的全部潜力,一起在技术热点里稳步成长, 评论区留言,你还想看松灵机器人用openclaw做点什么?

相关推荐
用户12039112947263 小时前
从MCP到RAG:Agent的开发之路
agent·mcp
后端小肥肠4 小时前
公众号躺更神器!OpenClaw+Claude Skill 实现自动读对标 + 写文 + 配图 + 存入草稿箱
人工智能·aigc·agent
数据智能老司机5 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机5 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
潘锦11 小时前
RAG 优化常用的 5 种策略
agent
HelloGitHub12 小时前
这个年轻的开源项目,想让每个人都能拥有自己的专业级 AI 智能体
开源·github·agent
Kagol1 天前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent
李剑一1 天前
你以为OpenClaw在帮你赚钱?其实它是在赚你的钱
openai·agent
canonical_entropy1 天前
AI Agent 的演进之路:从对话到自主代理操作系统
低代码·aigc·agent