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

reBot Arm B601-DM ROS2 統合ガイド

reBot Arm B601-DM

License: MITROS2 Humble | JazzyPython VersionVersion v0.2.2PlatformHardware

ROS2 Control · グリッパ制御 · 標準軌道インターフェース · 重力補償 · RViz 可視化 · 完全オープンソース

このチュートリアルでは、reBot Arm B601-DM 向けの ROS2 control ワークスペース rebotarm_ros2 の実行方法を説明します。このワークスペースは、低レベルの reBotArm_control_py Python SDK を ROS2 のトピック、サービス、アクションにラップし、上位レベルのプランニング、ビジュアルグラスピング、RViz 可視化、およびカスタムアプリケーション開発との統合を容易にします。

注記

このチュートリアルでは、主な参照環境として Ubuntu 24.04 + ROS2 Jazzy + Python 3.12 を使用します。ROS2 Humble / Ubuntu 22.04 でも、対応する ROS2 ディストリビューションを用いれば同じワークフローに従うことができます。

プロジェクトの特長

  1. 標準 ROS2 インターフェース
    /joint_statesFollowJointTrajectoryGripperCommandMoveToPose などの一般的な ROS2 インターフェースを提供し、MoveIt2、ビジュアルグラスピングパイプライン、タスクレベルシステムとの統合を容易にします。

  2. すぐに使える運動学・軌道・重力補償ノード
    順運動学 / 逆運動学、軌道実行、重力補償、および RViz 可視化のサポートをすぐに使える形で提供します。

  3. MoveIt 2 との統合
    完全な MoveIt 2 設定とアプリケーションデモを含み、RViz MotionPlanning プラグインによるシミュレーションプランニングと実機実行をサポートします。

仕様

このチュートリアルで使用するハードウェアは Seeed Studio によって提供されています。

パラメータ仕様
ロボットアームモデルreBot Arm B601-DM
自由度6-DOF + グリッパ
モーターバージョンDAMIAO モーターバージョン
通信方式USB2CAN シリアルブリッジ経由の CAN バス
デフォルトシリアルポート/dev/ttyACM0
推奨システムUbuntu 24.04 + ROS2 Jazzy + Python 3.12
参考システムUbuntu 22.04 + ROS2 Humble + Python 3.10

部品表 (BOM)

コンポーネント数量同梱
reBot Arm B601-DM ロボットアーム1
グリッパ1
USB2CAN シリアルブリッジ1
電源アダプタ (24V)1
USB-C / 通信用ケーブル1
Ubuntu ホスト PC1自前で用意

配線

  1. USB2CAN シリアルブリッジをロボットアームの CAN バスに接続します。
  2. 24V 電源を接続し、USB2CAN アダプタをホスト PC に接続します。
  3. ホストがシリアルデバイスを認識していることを確認します:
ls /dev/ttyACM*

シリアルポート権限を一時的に付与する必要がある場合:

sudo chmod 666 /dev/ttyACM0

代わりに、現在のユーザーを dialout グループに追加することを推奨します。変更を有効にするには、一度ログアウトしてから再度ログインしてください:

sudo usermod -a -G dialout $USER

動作環境要件

項目推奨要件
オペレーティングシステムUbuntu 24.04、Ubuntu 22.04 は参考として使用可能
ROS2Jazzy、Humble は参考として使用可能
Pythonシステム Python。Jazzy では通常 3.12、Humble では通常 3.10 を使用

インストール手順

ステップ 0. ロボットアームの基本セットアップを完了する

ROS2 統合を開始する前に、reBot Arm B601-DM Getting Started Guide を完了してください。これには、組み立て、モーター ID 設定、ゼロ位置初期化、および基本的な接続確認が含まれます。

ステップ 1. 使用している Ubuntu システムに対応する ROS2 バージョンをインストールする

公式 ROS2 ドキュメントを参照してください:

ステップ 2. ビルドツールと ROS 依存パッケージをインストールする

colcon、pip、Git、およびこのワークスペースに必要な ROS パッケージをインストールします:

sudo apt update
sudo apt install -y python3-colcon-common-extensions python3-pip git
sudo apt install -y \
ros-jazzy-control-msgs \
ros-jazzy-trajectory-msgs \
ros-jazzy-tf-transformations \
ros-jazzy-robot-state-publisher \
ros-jazzy-rviz2 \
ros-jazzy-pinocchio

インストールを確認します:

source /opt/ros/jazzy/setup.bash
python3 -c "import pinocchio; print('pinocchio', pinocchio.__version__)"

ROS2 Humble を使用する場合は、ros-jazzy-* パッケージ名を ros-humble-* に置き換え、/opt/ros/humble/setup.bash を source してください。 source /opt/ros/humble/setup.bash.

ステップ 3. コードリポジトリをクローンする

デフォルトでは Seeed-Projects の公式リポジトリを使用します:

git clone https://github.com/Seeed-Projects/reBotArmController_ROS2.git rebotarm_ros2
cd rebotarm_ros2

現在の開発用リポジトリを使用することもできます:

git clone https://github.com/EclipseaHime017/reBotArmController_ROS2.git rebotarm_ros2
cd rebotarm_ros2

ステップ 4. motorbridge をインストールする

公式 PyPI ソースから motorbridge をインストールします:

python3 -m pip install --user --break-system-packages --index-url https://pypi.org/simple motorbridge

ステップ 5. 低レベル SDK を取得する

mkdir -p third_party
git clone https://github.com/vectorBH6/reBotArm_control_py.git third_party/reBotArm_control_py

ステップ 6. ワークスペースをビルドする

source /opt/ros/jazzy/setup.bash
colcon build --symlink-install
source install/setup.bash

実行可能エントリを確認します:

ros2 pkg executables rebotarmcontroller

想定されるエントリには次のものが含まれます:

rebotarmcontroller reBotArmController
rebotarmcontroller GravityCompensation
rebotarmcontroller GripperControl
rebotarmcontroller MoveTo
rebotarmcontroller MoveToPose

クイックスタート

ロボットを使用する前に、次の点に注意してください:アームコントローラは高い 自由度を持ちます。コントローラを有効にする前やアームに給電する前に、 作業空間に人や障害物がないことを必ず確認してください。事故を避けるため、 すべての動作コマンドを慎重に確認してください。危険な操作は固く 禁止されており、その結果についてはすべて自己責任となります。

フルシステムを起動する

フルブリングアップでは次のものが起動します:

  • reBotArmController 制御ノード
  • robot_state_publisher
  • オプションの RViz
cd ~/seeed/rebotarm_ros2
source /opt/ros/jazzy/setup.bash
source install/setup.bash
ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM0

シリアルポートが /dev/ttyACM0 でない場合は、実際のデバイス名に置き換えてください:

ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM1

RViz 可視化を起動する

ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM0 use_rviz:=true

RViz 上でモデルが小さく表示される場合は、左側の Views パネルからビューを調整します:

  • Target Framebase_link に設定
  • Distance1.01.5 などに調整
  • マウスホイールでズーム
  • Fixed Framebase_link に設定されていることを確認

制御ノードのみを起動する

URDF や RViz が不要な場合:

ros2 launch rebotarm_bringup driver_only.launch.py channel:=/dev/ttyACM0

ノードを直接実行することもできます:

ros2 run rebotarmcontroller reBotArmController

ROS2 ネームスペース

デフォルトのネームスペースは次のとおりです:

/rebotarm

したがって、すべてのトピック、サービス、アクションは /rebotarm をプレフィックスとして持ちます。例えば:

/rebotarm/joint_states
/rebotarm/enable
/rebotarm/move_to_pose

複数のロボットアームが必要な場合や、他の ROS2 システムと並行して実行したい場合は、起動時にネームスペースを変更できます:

ros2 launch rebotarm_bringup bringup.launch.py arm_namespace:=left_arm

この場合、/rebotarm/joint_states/left_arm/joint_states になります。ネームスペースは ROS グラフ内のトピック、サービス、アクション名にのみ影響し、URDF 内の TF フレーム名は自動的には変更されません。

共通 API

ステータストピック

API説明
/rebotarm/joint_statessensor_msgs/msg/JointState6 軸の関節位置、速度、トルク
/rebotarm/arm_statusrebotarm_msgs/msg/ArmStatus制御モード、有効状態、ステートマシン、エラーコード
/rebotarm/joints/<joint>/staterebotarm_msgs/msg/JointMotorState単一関節モーター状態
/rebotarm/gripper/staterebotarm_msgs/msg/JointMotorStateグリッパモーター状態

例:

ros2 topic echo /rebotarm/joint_states --once
ros2 topic echo /rebotarm/arm_status --once

サービス

API説明
/rebotarm/enablestd_srvs/srv/Triggerロボットアームを有効化
/rebotarm/disablestd_srvs/srv/Triggerロボットアームを無効化
/rebotarm/safe_homestd_srvs/srv/Triggerセーフホーム位置に戻る
/rebotarm/set_moderebotarm_msgs/srv/SetModemitpos_velvel の間で切り替え
/rebotarm/set_zerorebotarm_msgs/srv/SetZero全関節または単一関節のゼロ位置を設定
/rebotarm/move_to_pose_ikrebotarm_msgs/srv/MoveToPoseIKIK 事前チェックと目標関節解の取得
/rebotarm/gripper/setrebotarm_msgs/srv/SetGripperグリッパモーター位置を rad 単位で設定
/rebotarm/gravity_compensation/startstd_srvs/srv/Trigger重力補償を開始
/rebotarm/gravity_compensation/stopstd_srvs/srv/Trigger重力補償を停止

アクション

API種類説明
/rebotarm/move_to_poserebotarm_msgs/action/MoveToPoseエンドエフェクタ姿勢の移動
/rebotarm/follow_joint_trajectorycontrol_msgs/action/FollowJointTrajectory標準ジョイント軌道互換のエントリポイント
/rebotarm/gripper/commandcontrol_msgs/action/GripperCommand標準グリッパーアクション

基本制御の例

1. ロボットアームを有効化する

ros2 service call /rebotarm/enable std_srvs/srv/Trigger

2. エンドエフェクタ姿勢へ移動する

ros2 action send_goal /rebotarm/move_to_pose rebotarm_msgs/action/MoveToPose \
"{target_pose: {position: {x: 0.30, y: 0.0, z: 0.30}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}}, duration: 2.0}"

3. ジョイント目標を送信する

ros2 action send_goal /rebotarm/follow_joint_trajectory \
control_msgs/action/FollowJointTrajectory \
"{trajectory: {joint_names: ['joint1','joint2','joint3','joint4','joint5','joint6'],
points: [{positions: [0.1,0,0,0,0,0], time_from_start: {sec: 5}}]}}"

4. セーフホームと無効化

ros2 service call /rebotarm/safe_home std_srvs/srv/Trigger
ros2 service call /rebotarm/disable std_srvs/srv/Trigger

デモ例

すべての例は、reBotArmController がすでに実行中であることを前提としています:

cd ~/seeed/rebotarm_ros2
source /opt/ros/jazzy/setup.bash
source install/setup.bash
ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM0

ジョイント動作の例

6 つすべてのジョイントを同時に制御します。単位は rad です:

ros2 run rebotarmcontroller MoveTo -- \
0.20 -0.20 -0.20 -0.20 0.10 -0.10 \
--duration 8.0

1 つのジョイントだけを制御します:

ros2 run rebotarmcontroller MoveTo -- --joint joint3 --position -0.20 --duration 5.0

エンドエフェクタ姿勢の例

ros2 run rebotarmcontroller MoveToPose -- --x 0.30 --y 0.0 --z 0.30 --qw 1.0 --duration 2.0

重力補償の例

ros2 run rebotarmcontroller GravityCompensation

このスクリプトは最初に /rebotarm/enable を呼び出し、その後に重力補償を開始します。Ctrl+C を押すと、スクリプトは次のサービスをこの順序で呼び出します:

  1. /rebotarm/gravity_compensation/stop
  2. /rebotarm/safe_home
  3. /rebotarm/disable

これにより、まず重力補償を停止し、その後アームをセーフホーム位置に戻して無効化します。

サービスを手動で呼び出すこともできます:

ros2 service call /rebotarm/enable std_srvs/srv/Trigger
ros2 service call /rebotarm/gravity_compensation/start std_srvs/srv/Trigger
ros2 service call /rebotarm/gravity_compensation/stop std_srvs/srv/Trigger
ros2 service call /rebotarm/safe_home std_srvs/srv/Trigger
ros2 service call /rebotarm/disable std_srvs/srv/Trigger

インタラクティブグリッパーの例

ros2 run rebotarmcontroller GripperControl

起動後、次を入力します:

o / open    Open the gripper
c / close Close the gripper
q / quit Quit

設定

デフォルトの設定ファイルは次の場所にあります:

src/rebotarm_bringup/config/
ファイル説明
arm.yaml6 つのアームジョイントのモーター、フィードバック ID、および制御パラメータ
gripper.yamlグリッパーモーター ID、フィードバック ID、ベンダー、および制御パラメータ
driver_params.yamlROS パラメータの例

一般的な起動パラメータ:

パラメータデフォルト説明
arm_configbringup に含まれる組み込みの arm.yamlアーム設定パス
gripper_configbringup に含まれる組み込みの gripper.yamlグリッパー設定パス
channel空文字列デフォルトで YAML を使用。空でない場合はシリアルポートを上書き
joint_state_rate100.0/rebotarm/joint_states の配信レート
cmd_arbitrationrejectアーム軌道実行中の低レベルコマンドの仲裁方法。reject または preempt;グリッパーの低レベルコマンドはアーム軌道をプリエンプトしません
arm_namespacerebotarmROS 名前空間プレフィックス
frame_idbase_linkロボットアームのベースフレーム
ee_frame_idend_linkエンドエフェクタフレーム
use_rvizfalseRViz を起動するかどうか

低レベルコマンドトピック

ROS2 ワークスペースには、低レベルモーターデバッグ用のトピックも用意されています:

API種類説明
/rebotarm/joints/<joint>/cmd/mitrebotarm_msgs/msg/JointMitCmd単一ジョイントの MIT 生コマンド
/rebotarm/joints/<joint>/cmd/pos_velrebotarm_msgs/msg/JointPosVelCmd単一ジョイントの位置・速度生コマンド
/rebotarm/joints/<joint>/cmd/velrebotarm_msgs/msg/JointVelCmd単一ジョイントの速度生コマンド
/rebotarm/gripper/cmd/mitrebotarm_msgs/msg/JointMitCmdグリッパー MIT 生コマンド
/rebotarm/gripper/cmd/pos_velrebotarm_msgs/msg/JointPosVelCmdグリッパー位置・速度生コマンド
/rebotarm/gripper/cmd/velrebotarm_msgs/msg/JointVelCmdグリッパー速度生コマンド
注意

低レベルコマンドトピックはデバッグおよび実験用途を想定しています。IK、軌道計画、URDF 制限チェックは行いません。アプリケーションレベルの動作には、/move_to_pose/follow_joint_trajectory/gripper/set などのサービスやアクションを使用することを推奨します。

MoveIt 2

MoveIt 2 は、ここで使用されているモーションプランニングフレームワークであり、逆運動学、 衝突チェック、軌道計画および実行を行います。デモはそれぞれ独立したパッケージに分けられており、 アプリケーションフローがベースドライバから分離されるようになっています。詳細については、公式の MoveIt 2 Documentation を参照してください。

MoveIt 関連の内容は 2 つのパッケージに分かれています:

パッケージ目的
rebotarm_moveit_configロボットモデル、SRDF、運動学、ジョイント制限、コントローラおよび RViz 設定
rebotarm_moveit_demosMoveIt 2 ベースのアプリケーションデモ

MoveIt 環境は、ros2_control を介したシミュレートされたハードウェアと、 計画と実行のための move_group を使用します。これは、RViz 内でモデル、IK、軌道計画、 およびデモフローを検証することを目的としています。

このリポジトリは実機ハードウェアにも対応しています。実機を接続する前に、 アームのゼロ設定、ジョイント方向、ジョイント制限、速度 制限およびグリッパー範囲がすべて正しいことを確認するか、リポジトリの デフォルト設定のままにしてください。

MoveIt 環境セットアップ

まず ROS2 環境が利用可能であることを確認します。現在ソースされている ROS ディストリビューション向けに、ROS_DISTRO を通じてパッケージをインストールできます:

CODE_LINE_PLH CODE_LINE_PLH

sudo apt update
sudo apt install -y \
ros-${ROS_DISTRO}-moveit \
ros-${ROS_DISTRO}-moveit-configs-utils \
ros-${ROS_DISTRO}-ros2-control \
ros-${ROS_DISTRO}-ros2-controllers \

ワークスペースを再ビルドします:

CODE_LINE_PLH CODE_LINE_PLH

cd your/path/to/rebotarm_ros2
colcon build --symlink-install

CODE_LINE_PLH CODE_LINE_PLH

ros2 pkg list | grep rebotarm_moveit

CODE_LINE_PLH CODE_LINE_PLH

rebotarm_moveit_demos draw_square

MoveIt のプランニングは、RViz の GUI または ROS ノードを通じて、シミュレーションと実機の両方のシーンで使用できます。

シミュレーションで MoveIt を使用する

MoveIt は RViz シミュレーションのために ros2_control 仮想ハードウェアインターフェースを使用します:

CODE_LINE_PLH CODE_LINE_PLH CODE_LINE_PLH

cd your/path/to/rebotarm_ros2

ros2 launch rebotarm_moveit_config demo.launch.py

- `move_group`
- `robot_state_publisher`
- `ros2_control_node`
- `joint_state_broadcaster`
- `rebotarm_controller`
- `gripper_controller`
- MoveIt MotionPlanning プラグイン付きの RViz

RViz は自動的に開き、ロボットの URDF モデルを読み込みます。GUI 左側のパネルから
動作を制御できます。

RViz なしで MoveIt 環境を実行するには:

__CODE_LINE_PLH__
__CODE_LINE_PLH__
__CODE_LINE_PLH__

ros2 launch rebotarm_moveit_config demo.launch.py use_rviz:=false

実機ロボットの場合は、まず仮想コントローラではなくハードウェアインターフェースで
コントローラを起動し、その後ハードウェア用 MoveIt 環境を起動します:

__CODE_LINE_PLH__
__CODE_LINE_PLH__
__CODE_LINE_PLH__

ros2 launch rebotarm_bringup driver.launch.py channel:=/dev/ttyACM0

__CODE_LINE_PLH__
__CODE_LINE_PLH__
__CODE_LINE_PLH__
```bash
cd your/path/to/rebotarm_ros2

ros2 launch rebotarm_moveit_config hardware.launch.py

コントローラを停止できるように準備しておいてください。

draw-square デモを実行する

まず MoveIt 環境を起動し、別のターミナルで次を実行します:

CODE_LINE_PLH CODE_LINE_PLH CODE_LINE_PLH

cd your/path/to/rebotarm_ros2

ros2 launch rebotarm_moveit_demos draw_square.launch.py

CODE_LINE_PLH CODE_LINE_PLH CODE_LINE_PLH

src/rebotarm_moveit_demos/config/draw_square.yaml

パラメータ説明
start_pointデモ開始前のジョイントリセット位置
rectangle_centerbase_link における長方形の中心
rectangle_width / rectangle_heightメートル単位の長方形寸法
tcp_rpyTCP の姿勢。デフォルトは下向きのグリッパー
tcp_yaw_offsets大きな joint6 の巻き付きを避けるために使用される代替 IK ヨー値

pick-place デモを実行する

まず MoveIt 環境を起動し、別のターミナルで次を実行します:

CODE_LINE_PLH CODE_LINE_PLH CODE_LINE_PLH

cd your/path/to/rebotarm_ros2

ros2 launch rebotarm_moveit_demos pick_place.launch.py

__CODE_LINE_PLH__
__CODE_LINE_PLH__
__CODE_LINE_PLH__

src/rebotarm_moveit_demos/config/pick_place.yaml

| パラメータ | 説明 |
|---|---|
| `ready_point` | pick/place の前後で使用される準備ジョイント位置 |
| `pick_position` | `base_link` における物体の底面中心位置 |
| `pick_tcp_rpy` / `place_tcp_rpy` | pick および place 用の TCP 姿勢 |
| `object_dimensions` | メートル単位のプランニングシーン内オブジェクト寸法 |
| `max_gripper_width` | グリッパーの最大開口幅。デフォルトは `0.09m` |
| `open_gripper_position` / `closed_gripper_position` | シミュレートされた片側グリッパージョイントの開閉位置 |
| `hardware_open_gripper_position` / `hardware_closed_gripper_position` | 実機グリッパーモーターの開閉位置 |
| `grasp_gripper_to_object_width` | オブジェクト幅から把持位置を計算 |
|
| `hardware_open_gripper_position` / `hardware_closed_gripper_position` | Hardware gripper motor open/close positions |
| `grasp_gripper_to_object_width` | Compute the grasp position from object width |

### MoveIt 設定ファイル

| ファイル | 説明 |
|---|---|
| `rebotarm_moveit_config/config/rebotarm.urdf.xacro` | MoveIt が使用するロボットモデル |
| `rebotarm_moveit_config/config/rebotarm.srdf` | MoveIt のグループ、エンドエフェクタおよびデフォルト状態 |
| `rebotarm_moveit_config/config/kinematics.yaml` | IK ソルバーの設定 |
| `rebotarm_moveit_config/config/joint_limits.yaml` | MoveIt プランニングで使用される関節リミット |
| `rebotarm_moveit_config/config/moveit_controllers.yaml` | MoveIt 軌道実行コントローラ設定 |
| `rebotarm_moveit_config/config/ros2_controllers.yaml` | ros2_control コントローラ設定 |
| `rebotarm_moveit_config/config/initial_positions.yaml` | シミュレートされたハードウェア用の初期関節位置 |
| `rebotarm_moveit_demos/config/draw_square.yaml` | 四角形描画デモのパラメータ |
| `rebotarm_moveit_demos/config/pick_place.yaml` | ピック&プレースデモのパラメータ |

## FAQ

### 1. 起動時に `open serial port /dev/ttyACM0 failed` が表示される

これは、デフォルトのシリアルポートが存在しないか、デバイス名が変更されたことを意味します。まず実際のシリアルデバイスを確認します:

```bash
ls /dev/ttyACM*

その後、channel で指定します:

ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM1

2. 起動時に Device or resource busy が表示される

これは、シリアルポートがすでに別のプロセスに占有されていることを意味します。よくある原因としては、以前に起動した ROS2 ノード、SDK のサンプル、終了していないデバッグスクリプトなどがあります。まずプロセスを確認します:

ps aux | grep -E "reBotArmController|ros2|python"

シリアルポートを占有しているプロセスを停止してから再起動してください。アームとグリッパは同じローレベルコントローラを共有する必要があります。アームとグリッパで同じシリアルポートを別々に開かないでください。

3. Permission denied

シリアルデバイスは存在するが、パーミッションが拒否される場合:

sudo usermod -a -G dialout $USER

一度ログアウトして再ログインすると、変更が有効になります。一時的なデバッグのためであれば、次のコマンドを実行することもできます:

sudo chmod 666 /dev/ttyACM0

4. RViz にロボットモデルが表示されない

次の点を確認してください:

  • ワークスペースが source 済みかどうか:source install/setup.bash
  • Fixed Framebase_link に設定されているかどうか
  • robot_state_publisher が正しく起動しているかどうか
  • URDF メッシュパスが package://rebotarm_bringup/description/meshes/... になっているかどうか

5. FastDDS SHM ポートの警告が表示される

ターミナルに次のような表示が出る場合:

[RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7002: open_and_lock_file failed

これは通常、以前の ROS2 プロセスが異常終了した後に残った FastDDS の共有メモリロックファイルが原因です。サービスやアクションが正常に応答している場合、この警告は通常制御に影響しません。

これをクリーンアップするには、まず関連する ROS2 プロセスを停止し、次のコマンドを実行します:

pkill -f ros2
pkill -f reBotArmController
rm -f /dev/shm/fastrtps_port*

一時的に共有メモリトランスポートをバイパスしたい場合は、ROS2 を起動する前に次を設定します:

export FASTDDS_BUILTIN_TRANSPORTS=UDPv4

6. Humble を使う場合は?

Humble ユーザーも同じワークフローに従い、コマンド内の jazzyhumble に置き換え、Humble の公式ドキュメントに従って対応する依存関係をインストールしてください。ROS2 ディストリビューションを切り替えた後は、再度 colcon build を実行します。

7. pinocchio が見つからない

ノードまたは検証コマンドが次のように報告する場合:

ModuleNotFoundError: No module named 'pinocchio'

まず、使用している ROS2 ディストリビューション向けの Pinocchio パッケージがインストールされていることを確認します:

sudo apt install -y ros-jazzy-pinocchio

次に、現在のターミナルで ROS2 環境が source 済みであることを確認します:

source /opt/ros/jazzy/setup.bash
python3 -c "import pinocchio; print(pinocchio.__version__)"

それでも見つからない場合は、現在の Python 検索パスに ROS2 の Python パッケージパスが含まれているか確認します:

python3 -c "import sys; print('\n'.join(sys.path))"

Jazzy を source した後は、次のようなパスが表示されるはずです /opt/ros/jazzy/lib/python3.12/site-packages。Humble を使用する場合は、コマンド内の jazzyhumble に置き換えてください。

連絡先

参考文献

Loading Comments...