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

reBot Arm B601-DM ROS2 連携

reBot Arm B601-DM

License: MITROS2 Humble | JazzyPython VersionVersion v0.2.3Platform

ROS2 Control · RViz 可視化 · MoveIt2 対応

このチュートリアルでは、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_states、FollowJointTrajectory、GripperCommand、MoveToPose などの一般的な 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 ドキュメントを参照してください:

ヒント

Ubuntu 24.04 を使用している場合は、ROS 2 Jazzy をインストールしてください。

Ubuntu 22.04 を使用している場合は、ROS 2 Humble をインストールしてください。

ステップ 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 してください。

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

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

git clone https://github.com/Seeed-Projects/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/Seeed-Projects/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 your/path/to/rebotarm_ros2
source install/setup.bash
ros2 launch rebotarm_bringup bringup.launch.py channel:=/dev/ttyACM0 #Do not open the RViz visualization interface when starting communication
ヒント

新しいターミナルを開くたびに、最初に次の 2 つのコマンドを実行する必要があります

cd your/path/to/rebotarm_ros2
source install/setup.bash

シリアルポートが /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   #Open the RViz visualization interface when starting communication

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

  • Target Frame を base_link に設定
  • Distance を 1.0 や 1.5 などに調整
  • マウスホイールでズーム
  • Fixed Frame が base_link に設定されていることを確認

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

URDF や RViz が不要な場合:

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

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

ros2 run rebotarmcontroller reBotArmController
ヒント

driver.launch.py が rebotarm_bringup/config から設定ファイルを渡すのとは異なり、コントローラを直接実行した場合はデフォルトの SDK アーム設定が使用されます。通常の利用では、ROS を通して起動することを推奨します。

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 になります。

共通 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/SetModemit、pos_vel、vel の間で切り替え
/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 your/path/to/rebotarm_ros2
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 パラメータの例

一般的な launch パラメータ:

パラメータデフォルト説明
arm_configbringup に含まれる組み込みの arm.yamlアーム設定ファイルのパス
gripper_configbringup に含まれる組み込みの gripper.yamlグリッパー設定ファイルのパス
channel空文字列デフォルトで YAML を使用。空でない場合はシリアルポートを上書き
joint_state_rate100.0/rebotarm/joint_states の publish レート
cmd_arbitrationrejectアーム軌道実行中の低レベルコマンドの仲裁方法。reject または preempt。グリッパーの低レベルコマンドはアーム軌道を 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 環境が利用可能であることを確認してください。現在 source されている ROS ディストリビューションに対して、ROS_DISTRO を通じてパッケージをインストールできます:

sudo apt update
sudo apt install -y \
ros-${ROS_DISTRO}-moveit \
ros-${ROS_DISTRO}-moveit-configs-utils \
ros-${ROS_DISTRO}-moveit-kinematics \
ros-${ROS_DISTRO}-moveit-planners-ompl \
ros-${ROS_DISTRO}-moveit-simple-controller-manager \
ros-${ROS_DISTRO}-ros2-control \
ros-${ROS_DISTRO}-ros2-controllers \
ros-${ROS_DISTRO}-xacro

MoveIt の設定とデモはこのワークスペースに含まれています。依存関係をインストールしたら、ワークスペースを再ビルドします:

cd your/path/to/rebotarm_ros2
colcon build --symlink-install
source install/setup.bash

MoveIt パッケージとデモのエントリポイントを確認します:

ros2 pkg list | grep rebotarm_moveit
ros2 pkg executables rebotarm_moveit_demos

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

rebotarm_moveit_demos draw_square
rebotarm_moveit_demos pick_place

MoveIt の使用方法​

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

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

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

cd your/path/to/rebotarm_ros2
source install/setup.bash
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 環境を実行するには:

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

reBotArm ハードウェアで MoveIt を使用する​

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

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

別のターミナルで:

cd your/path/to/rebotarm_ros2
source install/setup.bash
ros2 launch rebotarm_moveit_config hardware.launch.py

繰り返しになりますが:実機でデモを実行する前に、作業エリアに人や障害物がないことを確認し、RViz で計画経路を検証し、いつでもコントローラを停止できるように準備しておいてください。

draw-square デモを実行する​

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

cd your/path/to/rebotarm_ros2
source install/setup.bash
ros2 launch rebotarm_moveit_demos draw_square.launch.py

draw_square は gripper_tcp を同一平面上の長方形の 4 つの頂点へ移動させます。 デフォルトパラメータ:

src/rebotarm_moveit_demos/config/draw_square.yaml

共通パラメータ:

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

pick-place デモを実行する​

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

cd your/path/to/rebotarm_ros2
source install/setup.bash
ros2 launch rebotarm_moveit_demos pick_place.launch.py

デフォルトパラメータ:

src/rebotarm_moveit_demos/config/pick_place.yaml

共通パラメータ:

Parameter説明
ready_pointpick/place の前後で使用される待機関節位置
pick_positionbase_link における物体の底面中心位置
pick_tcp_rpy / place_tcp_rpypick と place 用の TCP 姿勢
object_dimensionsPlanning-scene 上の物体の寸法(メートル)
max_gripper_widthグリッパの最大開口幅(合計)。デフォルトは 0.09m
open_gripper_position / closed_gripper_positionシミュレートされた片側グリッパ関節の開閉位置
hardware_open_gripper_position / hardware_closed_gripper_positionハードウェアグリッパモータの開閉位置
grasp_gripper_to_object_width物体の幅から把持位置を計算

MoveIt 設定ファイル​

File説明
rebotarm_moveit_config/config/rebotarm.urdf.xacroMoveIt が使用するロボットモデル
rebotarm_moveit_config/config/rebotarm.srdfMoveIt のグループ、エンドエフェクタ、デフォルト状態
rebotarm_moveit_config/config/kinematics.yamlIK ソルバ設定
rebotarm_moveit_config/config/joint_limits.yamlMoveIt プランニングで使用される関節リミット
rebotarm_moveit_config/config/moveit_controllers.yamlMoveIt 軌道実行コントローラ設定
rebotarm_moveit_config/config/ros2_controllers.yamlros2_control コントローラ設定
rebotarm_moveit_config/config/initial_positions.yamlシミュレートされたハードウェアの初期関節位置
rebotarm_moveit_demos/config/draw_square.yamldraw-square デモのパラメータ
rebotarm_moveit_demos/config/pick_place.yamlpick-place デモのパラメータ

FAQ​

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

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

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"

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

3. Permission denied​

シリアルデバイスは存在するが、権限が拒否される場合:

sudo usermod -a -G dialout $USER

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

sudo chmod 666 /dev/ttyACM0

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

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

  • ワークスペースが source 済みか:source install/setup.bash
  • Fixed Frame が base_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 ユーザも同じワークフローに従い、コマンド内の jazzy を humble に置き換え、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 を使用する場合は、コマンド内の jazzy を humble に置き換えてください。

お問い合わせ​

参考文献​

Loading Comments...