メインコンテンツまでスキップ

Isaacsim を使用した reBotArm のシミュレーション

はじめに

reBot-Isaacsim は、reBotArm 向けに特別に設計された NVIDIA Isaac Sim シミュレーションプロジェクトです。Isaac Sim の高精度な物理エンジンを活用して、仮想環境内でロボットアームの運動学的特性とグリッパー協調ロジックを正確に再現し、制御アルゴリズム開発、軌道計画の検証、および通信プロトコルのテストのための、シミュレーション専用の独立した環境を提供します。

動作環境

  • オペレーティングシステム: Ubuntu 22.04 LTS / 24.04 LTS(推奨)または Windows 11(WSL2 が必要)
  • GPU: NVIDIA RTX シリーズグラフィックスカード(RTX 3070 以上を推奨)、VRAM ≥ 8GB
  • ドライバ: NVIDIA 公式ドライバ ≥ 535.x、CUDA 12.x をサポート
  • メモリ: ≥ 32GB RAM(Isaac Sim のシーンおよび物理シミュレーションは多くのメモリを使用)
  • ストレージ: ≥ 100GB の空き SSD 容量(Isaac Sim のインストール、キャッシュ、USD アセット用)
備考

この wiki で使用しているコンピュータは、NVIDIA RTX 4080 GPU を搭載し、Ubuntu 22.04 LTS オペレーティングシステムを実行しています。

Isaacsim のインストール

公式リンクとリソース:

https://docs.isaacsim.omniverse.nvidia.com/6.0.0/installation/quick-install.html

https://docs.isaacsim.omniverse.nvidia.com/6.0.0/installation/download.html#isaac-sim-latest-release

🔧 方法 1: 事前コンパイル済みバイナリのインストール

💡 ほとんどのユーザーに適しており、コンパイル不要ですぐに利用できます。

ダウンロードと解凍

NVIDIA 公式サイト から isaac-sim-standalone-6.0.0-linux-x86_64.zip をダウンロードします。

mkdir -p ~/isaacsim
cd ~/Downloads
unzip isaac-sim-standalone-6.0.0-linux-x86_64.zip -d ~/isaacsim
cd ~/isaacsim
./post_install.sh

環境変数の設定

~/.bashrc または ~/.zshrc に次を追加します:

export ISAACSIM_PATH="${HOME}/isaacsim"
export ISAACSIM_PYTHON_EXE="${ISAACSIM_PATH}/python.sh"

その後 source ~/.bashrc を実行して反映させます。

起動確認

${ISAACSIM_PATH}/isaac-sim.sh

初回起動時にはシェーダのキャッシュが行われるため、GUI が表示されるまで 5〜10 分ほどかかる場合があります。しばらくお待ちください。

⚙️ 方法 2: ソースからビルド(推奨)

💡 基盤コードの調整やコア機能のデバッグが必要な開発者に適しています。

依存関係のインストール

sudo apt update
sudo apt install cmake build-essential git python3-pip

CUDA と cuDNN が正しくインストールされており、GPU ドライバとバージョンが一致していることを確認してください。

クローンとビルド

git clone https://github.com/NVIDIA-Omniverse/IsaacSim.git
cd IsaacSim
./build.sh release

ビルドプロセスには、ハードウェア構成に応じて 30〜60 分かかる場合があります。

テスト実行

_build/linux-x86_64/release/isaac-sim.sh

プロジェクトのダウンロード

git clone https://github.com/Seeed-Projects/reBot-Isaacsim.git

reBotArm_control_py の uv 環境を構成する

cd third_party/reBotArm_control_py
uv sync

機能コンポーネントの概要

このプロジェクトは、さまざまな利用シーンに対応する複数の sender を提供します:

コンポーネント説明
gravity_joint_sender重力補償ハンドルモード: 改造済みロボットアーム(クローを取り外し、ハンドルを追加)を重力補償モードで手動操作し、その関節角度を Isaac Sim にリアルタイムで同期します
isaacsim_ik_sender逆運動学 (IK) モード: エンドエフェクタの姿勢を入力し、IK ソルバで関節角度を算出して Isaac Sim に送信します
isaacsim_traj_sender軌道計画 (Traj) モード: IK の上に関節空間の軌道計画(MIN_JERK 時間プロファイル)を追加し、スムーズな動作制御を実現します
isaacsim_joint_test_sender関節テストモード: 実機ロボットなしで、あらかじめ設定された関節角度軌道を送信し、Isaac Sim の receiver と通信が正しく動作しているかを検証します
joint_reader_sender実機からシミュレーションへのマッピングモード: 関節角度を読み取り専用で取得し、それを Isaac Sim にマッピングします。他の制御プロジェクトと併用するのに最適です(例: 他のタスクを実行中の実機ロボットを Isaac Sim 上で可視化する)。

ディレクトリ構成

reBot-Isaacsim/
├── pyproject.toml # uv workspace configuration
├── README.md
├── README_EN.md
├── reBotArm_Isaacsim/ # Main example directory
│ ├── gravity_joint_sender.py # Gravity compensation handle mode (modified robotic arm, manual manipulation)
│ ├── isaacsim_ik_sender.py # Inverse kinematics mode (IK control)
│ ├── isaacsim_traj_sender.py # Trajectory planning mode (IK joint space trajectory)
│ ├── isaacsim_joint_test_sender.py # Joint test mode (preset trajectory, no hardware needed)
│ ├── joint_reader_sender.py # Real-to-Sim mapping mode (read-only joints, sync visualization)
│ ├── isaacsim_joint_receiver.py # Isaac Sim receiver (joint angle synchronization)
│ ├── live_sync.py # Startup instruction script
│ ├── run_sender.sh # Start sender
│ └── run_isaacsim_receiver.sh # Start Isaac Sim receiver
├── third_party/
│ └── reBotArm_control_py/ # Core control library (separate uv environment)
│ ├── pyproject.toml
│ └── ...
└── usd/
└── RS-rebot-dev-arm/
└── 00-arm-rs_asm-v3.usda # Isaac Sim robotic arm asset

起動方法(デュアルターミナルモード)

2 つの別々のターミナルが必要です。ターミナル 1 では Isaac Sim の receiver を実行しターミナル 2 では目的の機能に応じた sender を実行します

ターミナル 1 — Isaac Sim Receiver の起動(全モード共通)

cd reBotArm_Isaacsim
./run_isaacsim_receiver.sh

期待される動作:

  • Isaac Sim の GUI を起動する
  • 地面プレーンとロボットアームの USD アセットを読み込む
  • 127.0.0.1:5005 で UDP パケットを待ち受ける
  • sender からの接続を待機する

ターミナル 2 — 適切な Sender の起動

必ず先に receiver を起動し、その後に sender を起動してください。

ヒント

一部のモードでは実機のロボットアームが必要です。以下のように USB-to-CAN アダプタを設定してください。

# Check the CAN interface status
ip link show can0

# Bring up the CAN interface with a bitrate of 1000000
sudo ip link set can0 up type can bitrate 1000000 restart-ms 100

① 関節テストモード (isaacsim_joint_test_sender)

実機ハードウェアは不要です。あらかじめ定義された関節軌道を連続的に送信し、Isaac Sim の receiver との通信を検証します。

cd reBotArm_Isaacsim
uv run python isaacsim_joint_test_sender.py

sender は、いくつかの事前定義された関節構成間を連続的に補間し、それらを Isaac Sim に送信します。CAN 接続は不要です。

② 逆運動学モード (isaacsim_ik_sender)

エンドエフェクタの姿勢(位置/姿勢)を入力します。IK ソルバが関節構成を計算し、Isaac Sim 上のロボットアームを駆動します。

reBotArm_Isaacsim/ ディレクトリから次を実行します:

cd reBotArm_Isaacsim
uv run python isaacsim_ik_sender.py

入力形式(1 行につき 1 コマンド):

x y z                       # Position (meters), keep current orientation
x y z r p y # Position + orientation (meters/degrees)
q j1 j2 j3 j4 j5 j6 # Send joint angles directly (degrees)
gripper <0~1> # Update gripper only

③ 軌道計画モード (isaacsim_traj_sender)

IK の上に関節空間の軌道計画(MIN_JERK)を追加し、ロボットのスムーズな動作を実現します。

reBotArm_Isaacsim/ ディレクトリから次を実行します:

cd reBotArm_Isaacsim
uv run python isaacsim_traj_sender.py

入力形式(1 行につき 1 コマンド):

x y z                       # Position (meters)
x y z r p y # Position + orientation (meters/degrees)
q j1 j2 j3 j4 j5 j6 # Send joint angles directly (degrees)
gripper <0~1> # Update gripper only
speed <scale> # Adjust trajectory duration scaling
resync # Re-read the current joint state from Isaac Sim

④ 重力補償ハンドルモード (gravity_joint_sender)

グリッパーを取り外してハンドルを取り付けた改造ロボットアーム向けに設計されています。ロボットを手で案内すると、Isaac Sim がその動きを追従します。

cd reBotArm_Isaacsim
./run_sender.sh

期待される動作:

  • 実機ロボットアームに接続し、重力フィードフォワード補償付き MIT 制御を有効化する
  • ロボットアームを手で自由に動かすことができる
  • 関節角度が UDP により 60 Hz で連続送信される

⑤ 実機からシミュレーションへのマッピングモード (joint_reader_sender)

関節角度のみを読み取り、実機ロボットの状態を Isaac Sim にミラーリングします。このモードは、実機ロボットが別のアプリケーションによって制御されている間の可視化を目的としています。

reBotArm_Isaacsim/ ディレクトリから次を実行します:

cd reBotArm_Isaacsim
uv run python joint_reader_sender.py

期待される動作:

  • 関節角度のみを読み取る(パッシブフィードバックモード)だけで、制御コマンドは一切送信しない
  • 関節角度を UDP により 60 Hz で連続送信する
  • 別のプロジェクトによって制御されている間、Isaac Sim 上で実機ロボットを可視化する

通信プロトコル

UDP JSON(ポート 127.0.0.1:5005)を使用します。

Sender ペイロード(フレームごと):

{
"sequence": 123,
"timestamp": 1718000000.123,
"joint_positions": [0.0, 0.1, 0.2, -0.1, 0.0, -0.02],
"gripper_position": 0.05
}
フィールド説明
sequenceintインクリメントされるフレームシーケンス番号
timestampfloatUnix タイムスタンプ(秒)
joint_positionsfloat[6]最初の 6 つの関節位置(rad)
gripper_positionfloat送信側で GRIPPER_POSITION_SCALE=0.03 を用いて変換されたグリッパ位置(m)

グリッパ制御パイプライン:

送信側 gripper_qgripper_position = -gripper_q × 0.03 → 受信側 × 0.01 → デュアルジョイント位置ターゲット

設定パラメータ

送信側(gravity_joint_sender.py

パラメータデフォルト説明
ARM_JOINT_COUNT6アーム関節数
DEFAULT_PORT5005UDP ポート
DEFAULT_SEND_HZ60.0送信周波数(Hz)
GRIPPER_POSITION_SCALE0.03グリッパ角度から位置への変換係数
position_alpha0.2ローパスフィルタ係数

受信側(isaacsim_joint_receiver.py

パラメータデフォルト説明
ARM_JOINT_COUNT6アーム関節数
DEFAULT_PORT5005UDP ポート
DEFAULT_RENDER_HZ120.0シミュレーション描画周波数(Hz)
GRIPPER_POSITION_SCALE0.01追加のグリッパ位置スケーリング係数
ROBOT_PRIM_PATH/World/reBotArmIsaac Sim 内の Robot Prim パス
ASSET_RELATIVE_PATHusd/RS-rebot-dev-arm/00-arm-rs_asm-v3.usdaUSD アセットへの相対パス

トラブルシューティング

OSError: [Errno 98] Address already in use

ポート 5005 がすでに使用されています。次のコマンドでそのポートを使用しているプロセスを探して終了します:

# Find the process using port 5005
sudo lsof -i :5005

# Terminate the process (replace PID with the actual process ID)
kill <PID>

Isaac Sim アセットが見つからない

USD アセットが存在し、REPO_ROOT が正しく設定されていることを確認します:

ls usd/RS-rebot-dev-arm/00-arm-rs_asm-v3.usda

CAN バスが Ready にならない

CAN インターフェースが up 状態で、正しいビットレートで設定されていることを確認します:

can_restart can0

# Verify the bitrate
ip -details link show can0 | grep bitrate

関節角度が同期しない

  • 送信側と受信側の両方がポート 5005 を使用していることを確認します。
  • 送信側ログが継続的に [send] を出力していることを確認します。
  • 受信側ログが継続的に [recv] を出力していることを確認します。
  • ハードウェア関連の問題を切り分けるために isaacsim_joint_test_sender.py を試してください。

コンポーネントと Python 環境

コンポーネントPython 環境起動スクリプト
送信側(実機ロボット)reBotArm_control_py uv 環境run_sender.sh
送信側(テストモード)reBotArm_control_py uv 環境isaacsim_joint_test_sender.py
受信側Isaac Sim 公式 Python(python.shrun_isaacsim_receiver.sh

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに応じて選べる複数のコミュニケーションチャネルをご用意しています。

Loading Comments...