大喵AGV设置指南

从拆箱到通过浏览器驾驶。 涵盖拆箱安全、充电、软件、远程操作、自主导航和手臂安装。

重型设备——需要团队举升。 大喵AGV是一个强大的移动平台。 务必使用两人升降机进行拆箱和重新定位。 首次通电前,请确保工作空间各个方向至少有 2 m 的间隙。
1

拆箱和安全检查

检查 AGV 并准备工作空间

需要团队提升。 使用两个人将 AGV 从运输箱中抬起。 从底盘底部提起 — 切勿使用轮子或任何突出的电子设备。 将平台放在平坦、坚硬的表面上,并施加刹车(如果配备)。
  1. 去除包装。 小心地取下所有泡沫衬垫、扎带和运输限制装置。 检查车轮是否有运输损坏 - 所有四个麦克纳姆轮都应用手自由旋转。
  2. 检查连接器。 检查主控制器上的所有电缆连接器是否已就位。 运输振动有时会导致 JST 或 Deans 连接器松动。
  3. 工作空间清理。 通电前,请在各个方向上留出至少 2 m 的开放空间。 AGV 可以快速加速——在首次运动测试期间,旁观者应退后一步。
  4. 紧急停车。 找到机箱上的主电源切断开关。 在通电之前了解如何到达它。 在第一次训练中,一只手始终保持在截止点附近。
  5. 表面检查。 麦克纳姆轮需要平坦、坚硬的表面(混凝土、木地板或光滑瓷砖)才能获得正确的全向性能。 地毯和不平坦的表面会显着降低横向控制权限。
2

电池充电和开机

首次使用前将电池组充满电

  1. 连接充电器。 找到 AGV 底盘上的电池充电端口(通常是大桶连接器或 XT60 端口)。 连接附带的平衡充电器。 将充电器插入接地的 110/220V 插座。
  2. 充电至充满。 首次使用前让电池充满电 — 通常需要 2-4 小时,具体取决于初始状态。 完成后,充电器 LED 将变为绿色(或停止闪烁)。 首次充电期间请勿无人看管。
  3. 检查电池电压。 充电后,电池电压应处于标称完全充电水平(检查电池组标签)。 使用万用表或板载显示器(如果配备)。
  4. 开机顺序。 将电池连接至主控制器。 切换主电源开关。 控制器应在 5-10 秒内启动 — LED 指示灯将稳定下来。 启动期间不要发送运动命令。
锂聚合物电池的安全性。 如果 AGV 使用锂聚合物电池组(常见),切勿放电至低于最小电池电压(通常为 3.0V/电池)。 如果超过一周未使用,请以 50% 的电量存放。 切勿为浮肿或损坏的聚合物锂电池充电。
3

软件和 ROS2 导航堆栈

在您的 PC 上安装 Python 代理和可选的 ROS2 包

dami_agent.py 脚本是无畏平台和 AGV 硬件之间的主要桥梁。 它需要 Python 3.8+ 和两个 pip 包。

# Install dependencies
pip install pyserial websockets

# Confirm your USB-to-TTL adapter appears
ls /dev/ttyUSB*   # Linux

# Add your user to the dialout group (Linux) if you get permission errors
sudo usermod -aG dialout $USER
# Log out and back in for group change to take effect

连接 USB 转 TTL 适配器:连接适配器的 TX 引脚连接到 AGV 主控制器的 UART5_RX(引脚PD2)。 将 GND 连接到 GND。 请勿将适配器的 RX 引脚或 5V 连接到 AGV。

对于 ROS2 集成,请安装导航堆栈:

# ROS2 Humble (Ubuntu 22.04) — adjust for your distro
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup ros-humble-slam-toolbox
先在没有硬件的情况下进行测试。 在连接 AGV 之前以模拟模式运行代理以验证完整的命令管道:
python3 dami_agent.py --session RC-XXXX-XXXX --mock 模拟模式跳过串口打开。 所有 WebSocket 命令解析、遥测转发和超时安全逻辑都以相同的方式运行。
4

远程操作

通过 Fearless 平台从浏览器驱动 AGV

  1. 打开 platform.roboticscenter.ai,导航到 Teleop 部分,然后创建一个新会话。 复制会话 ID(格式: RC-XXXX-XXXX).
  2. 使用您的串行端口和会话 ID 启动代理:
    python3 dami_agent.py \
      --session RC-XXXX-XXXX \
      --serial-port /dev/ttyUSB0 \
      --backend ws://localhost:8000
  3. 代理连接平台,将AGV节点注册为 device_type: "mobile_base",并以 30 Hz 开始控制循环。
  4. 在浏览器中打开会话 URL。 使用方向控制发送 move 命令。 AGV 在一个控制循环周期内做出响应(30 Hz 时为 33 毫秒)。

代理接受的命令类型:

# Move forward along X axis
{"type": "move", "axis": "x", "dir": 1}

# Move laterally right (Y axis)
{"type": "move", "axis": "y", "dir": 1}

# Rotate counter-clockwise (Z axis)
{"type": "move", "axis": "z", "dir": -1}

# Stop all motion immediately
{"type": "stop"}

# Goal-based delta movement
{"type": "goal", "delta": {"x": 0.5, "y": 0.0, "yaw": 0.0}}

要调整运动速度,请使用 --amp 参数(默认 660,建议范围 500–760)。 值越高,运动越快:

python3 dami_agent.py --session RC-XXXX-XXXX --serial-port /dev/ttyUSB0 --amp 500

如果AGV移动方向错误,请使用 --invert-x, --invert-y, 或者 --invert-z 无需更改任何固件即可翻转轴。

5

自主导航设置

配置 ROS2 nav2、SLAM 和航路点跟随

对于自主导航,将里程计和传感器数据(来自 AGV 上的 LiDAR 或深度摄像头)发布到 ROS2 主题,然后使用 nav2 进行路径规划。

# Launch SLAM Toolbox for mapping
ros2 launch slam_toolbox online_async_launch.py

# In a second terminal — launch nav2 with the AGV base footprint
ros2 launch nav2_bringup navigation_launch.py \
  params_file:=/path/to/your/agv_nav2_params.yaml

# Send a navigation goal via CLI
ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose \
  "{pose: {header: {frame_id: map}, pose: {position: {x: 1.0, y: 0.5}, orientation: {w: 1.0}}}}"

大庙 AGV 需要调整的关键 nav2 参数:

  • 机器人半径 — 设置为 AGV 的半宽度加上安全裕度(通常为 0.4–0.6 m)。
  • 最大速度 x / 最大速度 y — 根据您的情况设置 --amp 值和测量的最大速度。 保守地开始 (0.3 m/s)。
  • 最大速度θ — 转速限制。 用慢速测量 --amp 400 先测试一下。
  • 完整的 — 设置为 true 在 DWB 本地规划器中启用横向运动规划(麦克纳姆/全向轮所需)。
Teleop 导航过程中的安全性。 在自主导航测试期间保持 Fearless Platform teleop 面板打开。 该代理的 300 毫秒命令超时意味着,如果 nav2 停止发布目标,AGV 将自动停止——除了物理切断开关之外,还提供软件级安全网。
6

安装机器人手臂

将 OpenArm 或 DK1 用螺栓固定到顶板上,并在一个平台会话中注册两者

大喵 AGV 的顶板设计用于容纳标准机械臂底座法兰。 此步骤涵盖物理集成和 Fearless Platform 多节点会话设置。

物理安装

  1. 关闭 AGV 和手臂电源 在进行任何机械工作之前。
  2. 将机器人手臂底板放置在 AGV 顶板安装孔上方。 使用提供的 M6 内六角螺栓(或 M5 用于打火机臂)。 在所有紧固件上涂抹螺纹锁固剂。
  3. 将手臂的电源和 CAN/USB 电缆向下穿过顶板中的电缆管理通道到达 AGV 底盘隔间。 使用扎带固定 — 留出足够的松弛度,以保证手臂的整个工作空间,而无需拉动。
  4. 通过 AGV 底盘中的单独电池或稳压电源为手臂供电。 未经适当隔离,请勿将 AGV 驱动电池与手臂控制器共用。

多节点平台会话

启动指向同一会话 ID 的两个代理。 它们注册为独立节点,平台同步记录两个流:

# Terminal 1 — AGV agent
python3 dami_agent.py \
  --session RC-XXXX-XXXX \
  --serial-port /dev/ttyUSB0 \
  --node-id damiao-base

# Terminal 2 — OpenArm agent (example)
python3 openarm_agent.py \
  --session RC-XXXX-XXXX \
  --can-interface can0 \
  --node-id openarm-right

在 Fearless Platform teleop 面板中,两个节点都会出现。 操作员可以在同一会话中独立向 AGV(x/y/z 轴)发送运动命令和手臂命令。 情节记录在单个 JSONL 存档中捕获所有节点的遥测数据 - 完整的移动操纵轨迹,包括基本速度和手臂关节位置,并按时间戳同步。

参见。OpenArm 101 硬件集线器DK1 双手套件 页面包含特定于arm的设置指南。 在上述安装步骤之前完成手臂设置。
7

CAN 总线和电机配置

配置CAN FD总线并为安装在AGV上的任何大庙执行器设置电机ID

当 OpenArm 或 DK1 手臂安装在 AGV 顶板上时,其 Damiao QDD 电机通过 CAN FD 总线与车载计算机进行通信。 本节涵盖总线启动、电机 ID 分配、调试命令和 LED 诊断。

AGV 传动系统与手臂电机。 AGV 运动通过 UART5/DBUS 控制,而不是 CAN。 这里描述的 CAN FD 总线专门用于安装在 AGV 上的任何机器人臂有效负载中的大庙 QDD 电机。 请勿尝试将 CAN 帧发送至 AGV 传动系统控制器。

安装can-utils

# Install SocketCAN utilities (Ubuntu / Debian)
sudo apt update && sudo apt install -y can-utils

打开 CAN FD 接口

对于所有新部署,建议采用 1 Mbit/s 标称 + 5 Mbit/s 数据的 CAN FD 模式:

# Bring interface down first if already up
sudo ip link set can0 down

# Configure CAN FD: 1M nominal baud, 5M data baud, FD mode enabled
sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on

# Bring interface up
sudo ip link set can0 up

# Verify — output should show "fd on"
ip link show can0

如果您安装了 OpenArm PPA,帮助程序脚本将包含以下命令:

# CAN FD single arm
openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000

# Classic CAN 2.0 (legacy / compatibility)
openarm-can-configure-socketcan can0

监控总线

# Dump all CAN frames — verify connectivity before sending commands
candump -x can0

# Dump with timestamps
candump -td can0

电机 ID 分配 (J1–J8)

CAN总线上的每个大庙电机都必须有一对唯一的ID:发送器ID(主机→电机)和接收器ID(电机→主机)。 在arm组装之前使用Damiao Windows调试工具配置ID。 标准 OpenArm 映射:

联合的 电机型号 TX ID(主机→电机) RX ID(电机→主机)
J1 — 底座旋转DM-J4340p-2EC0x010x11
J2——肩距DM-J4340p-2EC0x020x12
J3——肩部滚动DM-J4340p-2EC0x030x13
J4——肘节DM-J4340-2EC0x040x14
J5——肘部滚动DM-J4340-2EC0x050x15
J6——手腕俯仰DM-J4340-2EC0x060x16
J7——手腕滚动DM-J4310-2EC V1.10x070x17
J8——夹具DM-J4310-2EC V1.10x080x18

每个 CAN 总线的 ID 都是唯一的,而不是全局的。 双手设置(两只手臂)使用第二条总线 — can1 — 使用相同的 ID 方案。

cansend 测试命令

使用 cansend 用于低级调试。 代替 001 与目标关节的十六进制 TX ID(例如, 002 对于 J2)。

## CAN FD commands (use when interface has "fd on")

# Enable motor — motor holds position and accepts commands
cansend can0 001##1FFFFFFFFFFFFFFFC

# Disable motor — motor becomes free-wheeling
cansend can0 001##1FFFFFFFFFFFFFFFD

# Clear motor error — required before re-enabling after a fault
cansend can0 001##1FFFFFFFFFFFFFFFB

## CAN 2.0 equivalents (use when interface is classic CAN, no fd on)
cansend can0 001#FFFFFFFFFFFFFFFC   # Enable
cansend can0 001#FFFFFFFFFFFFFFFD   # Disable
cansend can0 001#FFFFFFFFFFFFFFFB   # Clear error
将帧类型与总线模式匹配。 使用 ##1 接口配置时的 CAN FD 语法 fd on,以及单个 # CAN 2.0 的经典语法。 在同一总线上混合帧类型将导致总线错误。

LED 状态指示灯

每个大庙电机都有一个通过外壳窗口可见的板载 LED:

LED图案 状态 需要采取的行动
绿色(稳定) 电机已启用并准备就绪 无 — 电机处于活动状态并接受命令
红色(稳定) 电机禁用(已通电,未启用) 发送启用命令以激活电机
红色(闪烁) 电机故障/错误状态 发送清除错误命令,调查原因,然后重新启用

常见故障原因:过流(降低增益或负载)、过热(允许冷却)、编码器错误(重新安装电缆)、欠电压(24 V 系统上的电源低于 ~18 V)、CAN 总线关闭(检查终端和接线)。

闪存写入警告

闪存写入限制:每个电机约 10,000 次循环。 电机 ID 和参数存储使用内部闪存。 设置 CAN ID 和校准参数 一次 在调试期间并永久保留它们。 应用运行时参数更改,无需 --flash 标志仅进入 RAM,不消耗闪存周期。 避免重复刷新电机参数的脚本。
配置ID需要使用Damiao Windows工具。 CAN ID 必须使用设置 调试_工具_v.1.6.8.8.exe — 一次仅连接一个电机以避免 ID 冲突。 看 完整的电机参考 获取分步说明。
查看完整规格 → 常见问题解答和社区 → 开发者维基 →

需要帮助吗?

询问社区或联系 SVRC 支持并提供以下输出 dami_agent.py --mock 和你的串口路径。