NVIDIA Jetson NanoとIsaac SDKで作る低コスト自律レゴ戦車
NVIDIA Jetson NanoとIsaac SDKで作る低コスト自律レゴ戦車
このガイドでは、標準LEGO EV3キットを、NVIDIA Jetson Nano、Isaac SDK、YDLIDAR-X4 LiDAR、Pixy2ビジョンカメラで駆動する完全自律履帯ロボットへ変える方法を示します。CarterとKayaリファレンスデザインの予算優しい代替ながら、NVIDIAロボティクススタックの高度な知覚と計画能力をすべて保持しています。
Part 8またはPart 10で完全自律ナビゲーションデモへジャンプ。
プロジェクト構成コンポーネント:
- NVIDIA Jetson Nano開発ボード – Isaac Robot Engine稼働
- EV3ブリック – モーター制御(EV3 31313ロボットキット同梱)
- 履帯ベース – LEGOテクニックパーツとラージモーター2個で構築(全てEV3 31313ロボットキット同梱)
- YDLIDAR X4 LiDAR
- Pixy2 ビジョンカメラ
なぜIsaac SDKでROSではないのか?
- ROSチュートリアルは多数あるが、公式Isaac SDKガイドはわずか。
- Isaac SDKはJetsonハードウェア専用設計で、Nanoで最高パフォーマンス発揮。
- 知覚から計画まで全コアアルゴリズムがGPU加速され、NanoをRaspberry Pi 4より遥かに高性能化。
- IsaacSimのUnity 3Dレンダラーがフォトリアルなシミュレーション提供し、リアリティギャップを縮小。
なぜLEGOパーツなのか?
- 豊富なパーツ在庫入手可能
- 高品質サーボと堅牢な構造
- 半田付け不要、完全モジュラーシステム
- Jetson Nano用オプション3Dプリントケース(PELA-blocksリポジトリ参照)
この道を選ぶといくつか課題も:
- LEGOハードウェアはIsaac SDKネイティブ非対応(CarterとKayaのみリファレンス存在)
- Isaac SDK対応ハードウェアコンポーネントが限定的
- x86-64、arm64、armv5tejlターゲット向けクロスコンパイル必須
- 一部コンポーネントがクローズドソース
Part 1: 導入
1. Isaac SDKインストール
- 公式インストールガイドに従う
- サンプルアプリ実行で環境検証
- 最大互換性のため2019.3 SDKバージョン使用
2. 音声認識(オプション)
- CUDA 10.0、cuDNN 7.6.3、TensorRT 6.0インストール
- GPUサポート付きTensorFlow 1.15.0インストール
3. EV3devイメージ
最新ev3dev-stretchイメージをmicroSDまたはmicroSDHCカードにフラッシュ。microSDXCはEV3ブリック非対応。
4. ev3dev用ARMクロスコンパイラー
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
Ubuntu 18.04(ホストとJetson)はGLIBC 2.28使用だがev3devはGLIBC 2.24。数学ライブラリ除き動的リンクでコンパイル必須。jetson-ev3/toolchain/CROSSTOOLファイル調整、またはDebian 9 Dockerイメージ使用。
5. Jetson + EV3ワークスペース
git clone https://github.com/andrei-ace/jetson-ev3.git
jetson-ev3/WORKSPACE編集しIsaac SDKパス指定:
local_repository(
name = 'com_nvidia_isaac',
path = '/home/andrei/ml/isaac'
)
jetson-ev3/toolchain/CROSSTOOLのツールチェインパス更新:
# ご自身のパスに編集
linker_flag: '-L/home/andrei/ml/jetson-ev3/toolchain'
6. Jetson NanoとEV3接続
USB-A - mini-USBケーブル使用。JetsonからEV3へSSH:
ssh user@ev3dev.local
デフォルトパスワード:maker。
7. Ping-Pongチュートリアル
Isaacの「Ping-Pong」Codeletでプロセス間通信をデモ。JetsonとEV3ブリック間メッセージ送信用に適応。
EV3サーバービルド:
bazel build --config=ev3dev //apps/ev3/ping_pong:ev3_pong
Jetsonにクライアントデプロイ:
<YOUR-ISAAC-INSTALL>/engine/build/deploy.sh --remote_user <YOUR-USER-JETSON> -p //apps/ev3/ping_pong:ping_pong-pkg -d jetpack43 -h <YOUR-JETSON-IP>
両バイナリ実行。EV3が「Ping」メッセージを発話。
Part 2: Isaacからモーター制御
同原理でEV3モーターを制御するカスタムIsaacドライバー作成、Segway RMPベースを模倣。Ev3ControlServerがEV3上で稼働:
bazel build --config=ev3dev //packages/ev3/ev3dev:ev3_control_server
ev3_control_server ev3dev.local:9000
Sightバーチャルジョイスティックと統合し手動テレオペレーション可能。
Part 3: ロボット構築
シャーシはLEGO公式EV3 Track3r設計に準拠。Jetson NanoケースはこのGitHubリポジトリから調達。
Part 4: Isaacアプリアーキテクチャ
Isaacアプリは3層構成:
- Graph – nodes:コンポーネント定義
- Graph – edges:データフロー定義
- Configuration:ノードパラメータ化
音声制御ナビゲーションアプリの簡潔例(全JSONファイルはvoice_controlフォルダ参照):
{ 'name': 'voice_control',
'modules': [
'//apps/ev3/voice_control:voice_control_goal_generator',
'@com_nvidia_isaac//packages/navigation',
'@com_nvidia_isaac//packages/planner'
],
'config_files': [
'apps/ev3/voice_control/model/isaac_vcd_model.metadata.json'
],
'config': { ... },
'graph': {
'nodes': [...],
'edges': [...]
}
}
サブグラフ再利用可能;ナビゲーションスタックは全ロボットバリエーションで共有。
Part 5: EV3上でのIsaacアプリ実行
EV3ドライバーはSegway RMPベースと同API実装し、ジョイスティックコントローラー、分散GMapping、フルナビゲーションスタック等の既存Isaacアプリを直接再利用可能。
Part 6: オドメトリキャリブレーション
正確なオドメトリは自律動作に不可欠。Ev3ControlServerが2つのRPCコール公開:
command(Control)– 線速度と角速度送信state()– 現在の線速度と角速度返却
ホイール半径とトレッド幅から線速度計算:
if left == right:
v = left
elif left == -right:
v = 0
else:
v = (left + right) / 2
角速度はホイール速度差をトレッド幅で除算し導出。
Part 7: 音声制御自律ナビゲーション
音声検出サブグラフがマイク監視し、学習済みキーワード検知時にvoice_command_id発行。Isaac Speech Toolkitで「jetson」「left」「right」3単語をRNN学習。モデルはプロジェクトリポジトリからダウンロード可能。
コマンド受信時、GoalGeneratorがグローバルプランナーへゴール発行。例:ロボットを90°左旋回させる場合:
auto proto = rx_detected_command().getProto();
int id = proto.getCommandId();
auto goal_proto = tx_goal().initProto();
goal_proto.setStopRobot(true);
goal_proto.setTolerance(0.1);
goal_proto.setGoalFrame('robot');
ToProto(Pose2d::Rotation(90), goal_proto.initGoal());
tx_goal().publish();
実運用では10W電力モードで確実動作。5Wでは推論レイテンシ(約30ms)が高くスムーズ動作困難。
Part 8: 分散GMappingによるマッピング
マッピングはホストPCで実行、EV3がLiDARデータ提供。Jetsonに分散GMappingアプリデプロイ:
./engine/build/deploy.sh --remote_user andrei -p //apps/ev3:gmapping_distributed_ev3-pkg -d jetpack43 -h 192.168.0.218
ホスト側実行:
bazel run apps/ev3:gmapping_distributed_host
ホストJSONファイルで正しいJetson IP指定確認:
'tcp_subscriber': {
'isaac.alice.TcpSubscriber': {
'port': 5000,
'host': '192.168.0.218'
}
}
数分探査後、高解像度占有グリッド生成。
結論
LEGOテクニックパーツ、YDLIDAR、Pixy2カメラへの控えめな投資で、NVIDIA Isaac SDKの全機能を活用した完全自律履帯ロボットが構築可能。音声コマンド、LiDARベースマッピング、GPU加速知覚に対応し、研究、教育、ホビープロジェクトに汎用的なプラットフォームとなります。
全コード、設定ファイル、学習済みモデルはプロジェクトリポジトリで公開。
製造プロセス
- 自律走行Donkey Car:TensorFlow MobileNetV2 AIでゴミ収集
- Raspberry Pi Tank:距離・方位センサー追加で精密ナビゲーションを実現
- JQR四足歩行自律ロボット:自律ナビゲーションと救助向けDIY脚式ロボット
- 燃料タンク溶接の重要安全ガイドライン:爆発・火災を防ぐ正しい手順
- 燃料タンク漏れの応急修理と本格修理|エポキシパテ溶接の手順と危険性
- 自律走行車の未来:技術、課題、イノベーション
- プレミアム 1/24スケール CNC削り出し 99式主力戦車モデル
- リザーブタンク(予備タンク)の目的・種類・メリット:燃料・水・油のバックアップ供給源
- 自律ロボットがドア開閉・通過を習得、サービスロボットのブレイクスルー
- NASAの自律組立ロボットが月面居住モジュールを建設
- 自律走行の未来への備え:フリートオーナーが先手を打つ方法