Damiao AGV セットアップ ガイド
開封からブラウザからの操作まで。 開梱時の安全性、充電、ソフトウェア、遠隔操作、自律ナビゲーション、アームの取り付けについて説明します。
開梱と安全性チェック
AGV を検査し、作業スペースを準備する
- 梱包材を取り外します。 すべてのフォームインサート、ケーブルタイ、輸送用拘束具を慎重に取り外します。 ホイールに配送時の損傷がないかどうかを検査します。4 つのメカナム ホイールはすべて手で自由に回転するはずです。
- コネクタを検査します。 メイン コントローラーのすべてのケーブル コネクタがしっかりと固定されていることを確認します。 配送時の振動により、JST または Deans コネクタが緩む場合があります。
- ワークスペースのクリアランス。 電源を入れる前に、全方向に少なくとも 2 m の空きスペースを空けてください。 AGV は急速に加速するため、最初の動作テスト中は傍観者は下がってください。
- 緊急停止。 シャーシ上の主電源遮断スイッチを見つけます。 電源を入れる前に、そこに到達する方法を知ってください。 最初のセッションでは、常に片手をカットオフの近くに置いてください。
- 表面チェック。 メカナム ホイールが全方向に正しく動作するには、平らで硬い表面 (コンクリート、木の床、または滑らかなタイル) が必要です。 カーペットや凹凸のある表面では、横方向の制御力が大幅に低下します。
バッテリーの充電と電源投入
初めて使用する前にバッテリーパックを完全に充電してください
- 充電器を接続します。 AGV シャーシのバッテリー充電ポート (通常は大きなバレル コネクタまたは XT60 ポート) を見つけます。 付属のバランス充電器を接続します。 充電器を接地された 110/220V コンセントに差し込みます。
- フル充電してください。 初めて使用する前にバッテリーを完全に充電してください (初期状態に応じて通常 2 ~ 4 時間)。 完了すると、充電器の LED が緑色に変わります (または点滅が止まります)。 初回充電中はそばを離れないでください。
- バッテリー電圧を確認してください。 充電後、バッテリー電圧は公称完全充電レベルになるはずです (バッテリー パックのラベルを確認してください)。 マルチメーターまたはオンボードディスプレイが装備されている場合は、それを使用します。
- 電源投入シーケンス。 バッテリーをメインコントローラーに接続します。 主電源スイッチを切り替えます。 コントローラーは 5 ~ 10 秒以内に起動します。インジケーター LED が安定します。 起動中にモーションコマンドを送信しないでください。
ソフトウェアと ROS2 ナビゲーション スタック
Python エージェントとオプションの ROS2 パッケージを PC にインストールします
の dami_agent.py スクリプトは、Fearless Platform と AGV ハードウェア間の主要なブリッジです。 Python 3.8 以降と 2 つの 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-to-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
python3 dami_agent.py --session RC-XXXX-XXXX --mock
モックモードではシリアルポートのオープンをスキップします。 すべての WebSocket コマンドの解析、テレメトリ転送、およびタイムアウト安全ロジックは同様に実行されます。
遠隔操作
Fearless Platform を介してブラウザから AGV を駆動します
- 開ける platform.roboticscenter.aiをクリックして、「Teleop」セクションに移動し、新しいセッションを作成します。 セッション ID をコピーします (形式:
RC-XXXX-XXXX). - シリアル ポートとセッション ID を使用してエージェントを起動します。
python3 dami_agent.py \ --session RC-XXXX-XXXX \ --serial-port /dev/ttyUSB0 \ --backend ws://localhost:8000
- エージェントはプラットフォームに接続し、AGV ノードを
device_type: "mobile_base"、制御ループを 30 Hz で開始します。 - ブラウザでセッション URL を開きます。 方向コントロールを使用して送信します
moveコマンド。 AGV は、1 制御ループ ティック (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 ファームウェアを変更せずに軸を反転します。
自律ナビゲーションのセットアップ
ROS2 nav2、SLAM、ウェイポイントフォローを設定する
自律ナビゲーションの場合は、走行距離とセンサー データ (LiDAR または AGV の深度カメラから) を 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}}}}"
Damiao AGV 用に調整する主要な nav2 パラメータ:
- ロボット半径 — AGV の半値幅に安全マージン (通常 0.4 ~ 0.6 m) を加えた値に設定します。
- max_vel_x / max_vel_y — に基づいて設定します
--amp値と測定された最大速度。 控えめに開始します (0.3 m/s)。 - max_vel_theta — 回転速度制限。 ゆっくり測ってください
--amp 400まずテストしてください。 - ホロノミック — に設定します
trueDWB ローカル プランナーで横方向の動作計画を有効にします (メカナム/オムニ ホイールに必要)。
ロボットアームの取り付け
OpenArm または DK1 をトッププレートにボルトで固定し、1 つのプラットフォーム セッションで両方を登録します
Damiao AGV のトップ プレートは、標準のロボット アーム ベース フランジを受け入れるように設計されています。 この手順では、物理的な統合と Fearless Platform のマルチノード セッションのセットアップについて説明します。
物理的な取り付け
- AGV とアームの電源を切ります 機械的な作業をする前に。
- ロボット アームのベース プレートを AGV のトップ プレートの取り付け穴の上に配置します。 付属のM6穴付ボルト(軽量アームの場合はM5)を使用してください。 すべてのファスナーにネジロック剤を塗布します。
- アームの電源ケーブルと CAN/USB ケーブルを、トップ プレートのケーブル管理チャネルを通して AGV シャーシ コンパートメントまで配線します。 ケーブルタイで固定します - 引っ張らずにアームの作業スペース全体に十分な余裕を持たせます。
- 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 テレオペ パネルに、両方のノードが表示されます。 オペレータは、同じセッション内でモーション コマンドを AGV (x/y/z 軸) に送信し、アーム コマンドを個別に送信できます。 エピソードの記録では、すべてのノードのテレメトリが 1 つの JSONL アーカイブに取り込まれます。これには、タイムスタンプによって同期された、基本速度や腕の関節の位置を含む完全なモバイル操作の軌跡が含まれます。
CANバスとモーターの構成
CAN FD バスを構成し、AGV に取り付けられた Damiao アクチュエータのモーター ID を設定します。
OpenArm または DK1 アームが AGV のトップ プレートに取り付けられている場合、Damiao QDD モーターはオンボード コンピューターから CAN FD バスを介して通信します。 このセクションでは、バスの立ち上げ、モーター ID の割り当て、コミッショニング コマンド、および LED 診断について説明します。
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 バス上の各 Damiao モーターには、送信機 ID (ホスト → モーター) と受信機 ID (モーター → ホスト) という固有の ID ペアが必要です。 ID は、アームを組み立てる前に、Damiao Windows デバッグ ツールを使用して設定されます。 標準 OpenArm マッピング:
| ジョイント | モーター型式 | TX ID (ホスト→モーター) | RX ID (モーター→ホスト) |
|---|---|---|---|
| J1 — ベース回転 | DM-J4340p-2EC | 0x01 | 0x11 |
| J2 — ショルダーピッチ | DM-J4340p-2EC | 0x02 | 0x12 |
| J3 — ショルダーロール | DM-J4340p-2EC | 0x03 | 0x13 |
| J4 — 肘のピッチ | DM-J4340-2EC | 0x04 | 0x14 |
| J5 — エルボーロール | DM-J4340-2EC | 0x05 | 0x15 |
| J6 — 手首のピッチ | DM-J4340-2EC | 0x06 | 0x16 |
| J7 — リストロール | DM-J4310-2EC V1.1 | 0x07 | 0x17 |
| J8 — グリッパー | DM-J4310-2EC V1.1 | 0x08 | 0x18 |
ID はグローバルではなく、CAN バスごとに一意です。 両手セットアップ (2 つのアーム) は 2 番目のバスを使用します。 can1 — 同じ ID スキームを使用します。
テストコマンドを送信できます
使用 cansend 低レベルの試運転用。 交換する 001 ターゲット ジョイントの 16 進数の 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ステータスインジケーター
各 Damiao モーターには、ハウジングの窓から見える 1 つのオンボード LED があります。
| LEDパターン | 州 | 必要なアクション |
|---|---|---|
| 緑色(点灯) | モーターが有効になり準備完了 | なし - モーターはアクティブであり、コマンドを受け入れています |
| 赤(点灯) | モーターが無効になっています (電源が入っていますが、有効ではありません) | Enableコマンドを送信してモーターをアクティブにします |
| 赤(点滅) | モーターの故障/エラー状態 | Clear Errorコマンドを送信し、原因を調査してから再度有効にします |
一般的な障害の原因: 過電流 (ゲインまたは負荷の低下)、過熱 (冷却を可能にする)、エンコーダ エラー (ケーブルを取り付け直す)、不足電圧 (24 V システムで ~18 V 未満の供給)、CAN バスオフ (終端と配線を確認する)。
フラッシュ書き込み警告
--flash フラグは RAM のみに移動し、フラッシュ サイクルを消費しません。 モーターパラメータを繰り返し再フラッシュするスクリプトは避けてください。