欢迎光临
我们一直在努力

六电机 + Qt/ROS2 机器人控制层:专栏开篇

目标不是讲概念,而是让你在 Jetson(或同类 Linux + ROS2 Humble + Qt6)上,按同样架构把六轴 EtherCAT 控起来:B03 占主站,Web/TUI 只做 FIFO 客户端。

0. 本专栏你将学会什么

读完并跟着做,应能得到:

  • 进程 B03_dev 成功 eth_initDLL,六轴 CSP 使能;
  • ROS2 话题 /b03/joint_targets 能驱动电机;
  • /tmp/rhu_multi_pos_cmd + status JSONL 可被 Python 客户端点动;
  • (可选)Web 控制台连上同一套 FIFO,且不再起第二个主站。在这里插入图片描述
  • 1. 仓库与目录(先克隆到同一父目录)

    假设根目录:

    export RHU_ROOT=~/rhu_tools # 按你的实际路径改
    cd "$RHU_ROOT"
    ls ASD_D3_B03 yiyou-ecan-test

    目录干什么
    ASD_D3_B03/ Qt6/ROS2 框架 + 进程内主站
    yiyou-ecan-test/ Web / TUI / 应急 daemon / 写齿轮工具
    docs/csdn-六电机专栏/ 本系列文稿与配图

    硬约束(全文第一条): 同一 EtherCAT 网口,同一时刻只允许一个主站进程——要么 B03_dev,要么 rhu_multi_pos_daemon,绝不并存。

    2. 硬件与软件前提(对照检查)

    2.1 硬件(示意拓扑)

    Jetson EtherCAT 口(例:enP8p1s0)
    └─ CU1128(部分从站 SKIP PDO)
    ├─ PH M5 / M6
    └─ RHU M4..M1

    你必须知道:

    • 网口名:ip -br link 看哪块接电机总线;
    • 从站能否被扫描(链路灯、carrier=1);
    • 是否已有进程占着主站:pgrep -ax B03_dev; pgrep -ax rhu_multi_pos_daemon。

    2.2 软件清单

    项建议版本 / 路径
    OS Ubuntu 20.04/22.04 + Jetson Linux 亦可
    ROS2 Humble(/opt/ros/humble)
    Qt 6.x,qmake 用 /usr/lib/qt6/bin/qmake(不要系统默认 Qt5)
    意优 SDK include/ + lib/(libeu_ethercat.so 等)
    Python 3.8+(Web/TUI 用标准库即可)
    权限 主站通常需要 sudo

    把 SDK 放到 B03 侧(或设环境变量):

    # 方式 A:符号链接到工程默认位置
    mkdir -p "$RHU_ROOT/ASD_D3_B03/third_party/eyou_ethercat_sdk"
    # 将厂商包的 include、lib 链到上述目录

    # 方式 B:运行/编译时指定
    export B03_EYOU_SDK_ROOT=/path/to/eyou_ethercat_phu_sdk

    3. 30 分钟「空跑」验收路径(先通链路再谈细节)

    下面命令按顺序执行;任一步失败先停,对照文末排障。

    步骤 A:编译消息包 + B03

    source /opt/ros/humble/setup.bash
    cd "$RHU_ROOT/ASD_D3_B03/RosMsg_dev"
    ./build_ros_msg.sh
    source "$RHU_ROOT/ASD_D3_B03/RosMsg_dev/install/setup.bash"

    mkdir -p "$RHU_ROOT/ASD_D3_B03/build-B03_dev"
    cd "$RHU_ROOT/ASD_D3_B03/build-B03_dev"
    /usr/lib/qt6/bin/qmake ../B03_dev/B03_dev.pro
    make -j"$(nproc)"
    ls -l ./B03_dev

    步骤 B:改网口配置

    编辑 ASD_D3_B03/B03_dev/config/b03_dev.ini:

    [motor_sdk]
    ifname=enP8p1s0 ; ← 改成你的 EtherCAT 网口
    motor_config_yaml=rhu_motors.yaml
    cycle_ms=2
    enable_fifo_server=true
    cmd_fifo=/tmp/rhu_multi_pos_cmd
    status_file=/tmp/rhu_multi_pos_status.jsonl
    default_rpm=0.05
    allow_endpoint_plan_stub=true

    确认同目录有 rhu_motors.yaml。

    步骤 C:清旧主站 → 起 B03

    sudo pkill -9 rhu_multi_pos_daemon 2>/dev/null || true
    sudo pkill -9 B03_dev 2>/dev/null || true

    export LD_LIBRARY_PATH="$RHU_ROOT/ASD_D3_B03/third_party/eyou_ethercat_sdk/lib:${LD_LIBRARY_PATH:-}"
    cd "$RHU_ROOT/ASD_D3_B03/build-B03_dev"
    sudo -E env LD_LIBRARY_PATH="$LD_LIBRARY_PATH" ./B03_dev

    成功迹象(日志大致出现):

    • eth_initDLL 成功 / 从站数量合理;
    • 各轴 CSP 使能;
    • 出现 FIFO / status 路径提示;
    • ls -l /tmp/rhu_multi_pos_cmd /tmp/rhu_multi_pos_status.jsonl 存在。

    步骤 D:不启 Web,先用 CLI 点动一根轴

    另开终端:

    # 读状态最后一行
    tail -1 /tmp/rhu_multi_pos_status.jsonl | python3 -m json.tool

    # 小角度点动(先确认软限内!)
    python3 – <<'PY'
    from pathlib import Path
    import sys
    sys.path.insert(0, str(Path.home() / "rhu_tools/yiyou-ecan-test/python"))
    from rhu_motion_client import RhuMotionClient
    c = RhuMotionClient()
    print(c.status("M1"))
    c.goto_deg("M1", 2.0, rpm=0.05) # 角度按你现场改小
    print(c.wait_until_idle("M1", 60))
    PY

    步骤 E:ROS 侧冒烟(可选)

    source /opt/ros/humble/setup.bash
    source "$RHU_ROOT/ASD_D3_B03/RosMsg_dev/install/setup.bash"
    ros2 topic list | grep b03
    ros2 topic echo /b03/joint_states –once

    向 /b03/joint_targets 发目标时,务必落在 b03_dev.ini 的 min/max_angle_deg 内(第 07 篇细讲)。

    4. 两条控制路径(复刻时脑子里要有这张图)

    路径 1(正式机器人层)
    ROS → B03Application → MotorSdkAdapter → EyouMultiPosMaster → EtherCAT

    路径 2(人机旁路)
    Web/TUI/CLI → FIFO JSONL → MotorFifoServer(在 B03 内)→ 同一主站

    路径 1 不经过 FIFO。路径 2 不能 自己再 eth_initDLL。

    5. 专栏怎么读(按学习顺序)

    篇你这一步要做成什么
    01(本文) 环境齐、B03 能起、FIFO 能点动
    02 会清互斥、懂为何不能双主站
    03 知道改代码只动哪几个函数
    04 理解主站如何进进程、如何编链接
    05 自己写/改 FIFO 客户端
    06 搭 Web 技术栈(实现向)
    07 软限/齿轮/rpm 调对
    08 固化部署与文档边界

    6. 本篇排障速查

    现象先做
    qmake 抱怨 Qt5 / 缺模块 用 /usr/lib/qt6/bin/qmake,检查 qt6-base-dev
    链接找不到 eu_ethercat SDK lib 是否到位;B03_EYOU_SDK_ROOT
    运行缺 .so LD_LIBRARY_PATH + sudo -E(别丢环境变量)
    eth_initDLL 失败 网口名、carrier、是否已有主站
    FIFO 不出现 enable_fifo_server=true;Initialize 是否失败提前退出
    点动无反应 status 里 enabled/moving;软限;default_rpm 是否过小

    下一篇专门练:**如何确认「只有一个主站」,以及双主站时怎么救场。

    赞(0)
    未经允许不得转载:171主机测评 » 六电机 + Qt/ROS2 机器人控制层:专栏开篇
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址