メインコンテンツへスキップ

JAKA ROS 2 説明書

JAKA約18分

JAKA ROS 2 説明書

紹介

ROS 2 概要

  • **ROS(ロボットオペレーティングシステム)**は、オープンソースのソフトウェアライブラリとツールの集合であり、ロボットアプリケーションの開発と実行のための柔軟なフレームワークを提供します。
  • ROS 2 は ROS 1 のアップグレード版であり、性能、安全性、リアルタイム性の面で改善され、研究開発および産業用途により適しています。
  • ROS 2 はコードをソフトウェアパッケージ(packages)として整理し、colcon を使用してワークスペース(workspace)内でビルドします。各パッケージには1つまたは複数のノード(nodes)が含まれ、これらのノードは**トピック(topics)、サービス(services)、またはアクション(actions)**を通じて通信します。
  • JAKA ROS 2 パッケージは主に以下を使用します:
    • **トピック(Topics):**ロボット状態データを送信します。
    • **アクション(Actions):**長時間実行されるタスク(例:動作実行)を処理します。
    • **サービス(Services):**迅速なコマンド(例:ロボットの有効化)を処理します。

目的と範囲

目的

本書は、JAKA ROS 2 パッケージのインストールおよび設定方法に関するガイドを提供し、シミュレーションおよび実機ロボット操作向けのステップバイステップチュートリアルを含みます。

本マニュアルは**、基本的な ROS 2 の概念**に精通し、JAKA ロボットを自身のアプリケーションに統合したい開発者を対象としています。

範囲

JAKAロボット

現行バージョンの** JAKA ROS 2 パッケージ**は、以下の協働ロボットモデルを正式にサポートしています:JAKA Zu 3JAKA Zu 5JAKA Zu 7JAKA Zu 12JAKA Zu 18JAKA Zu 20JAKA Zu 30JAKA S 5JAKA S 7JAKA S 12JAKA Pro 5JAKA Pro 7JAKA Pro 12、JAKA Pro 16JAKA Pro 18JAKA A 5JAKA A 12JAKA C 5、JAKA C 7JAKA C 12、および JAKA MiniCobo。``

本マニュアルに含まれるすべての設定ファイル、ドライバ、およびチュートリアルは、これらのモデルに対応しています。

ソフトウェア機能範囲:
  • MoveIt 統合:動作計画と実行、衝突検出、運動学計算、軌道生成を含みます。
  • RViz 可視化およびシミュレーション
    • ロボットモデル、関節状態、計画軌道をリアルタイムで可視化します。
    • RViz は主に可視化ツールですが、本パッケージは計画された動作のプレビューやロボット状態とのインタラクションを行うための基本的な擬似シミュレーション環境を提供します。
  • Gazebo シミュレーション環境:物理的相互作用や実世界の動的挙動を含む、完全なロボット動的シミュレーションを提供します。Gazebo は、リアルなシミュレーション環境で制御アルゴリズムやロボットの動的応答をテストするのに最適です。
  • 制御ドライバインターフェース:ロボットコントローラーにコマンドを送信し、状態フィードバックを受け取るための ROS 2 ドライバノード。
含まれない機能:

本マニュアルでは、Gazebo またはその他の 3D 物理シミュレーション環境で JAKA ロボットを設定または実行する手順については取り扱いません。

JAKA ROS 2 ソフトウェアパッケージ構成

以下の 2 つのフローチャートは、それぞれ JAKA ROS 1 および JAKA ROS 2 ソフトウェアパッケージの構成を示しています。

図 1-1:JAKA ROS1 ソフトウェアパッケージ構成
図 1-1:JAKA ROS1 ソフトウェアパッケージ構成

図 1-2:JAKA ROS2 ソフトウェアパッケージ構成
図 1-2:JAKA ROS2 ソフトウェアパッケージ構成

ROS 1(Catkin)から ROS 2(Colcon)への移行において、JAKA ロボットソフトウェアパッケージ全体のレイアウトは基本的に変わっていませんが、ビルドおよびインストールのプロセスは変更されています。

以下に、主な違いとそれらの変更が重要である理由を概説します。

ROS 1 との比較

  • ROS 1(Catkin)
    • build/:CMake の中間ビルドファイルを格納します。
    • devel/:開発段階のバイナリ、スクリプト、およびその他の実行時リソースを含みます。
    • install/:通常は最終的なインストール出力に使用されます(通常の開発プロセスではあまり使用されません)。
  • ROS 2(Colcon)
    • build/:引き続き中間ビルド成果物を含みます。
    • install/:現在は主要な実行時ディレクトリとして使用され、devel/ の役割を置き換えています。
    • log/:ビルドログおよびデバッグ情報を保存します。

変更の理由

  • 明確性とモジュール化:ビルド成果物(build/)と最終インストール成果物(install/)を分離することで、ROS 2 は実行時に必要なファイルとビルド中に生成されるファイルをより明確に区別しています。

  • パッケージの分離:Colcon はより一貫したワークスペース構造を強制し、依存関係の競合を減らし、他のシステムへのパッケージのデプロイを簡素化します。

対応プラットフォームおよびシステム要件

JAKA ROS 2 ソフトウェアパッケージは、JAKA 協働ロボットを ROS 2 エコシステムへシームレスに統合することを目的としています。

安定性と性能を確保するために、このソフトウェアパッケージは特定のソフトウェアおよびハードウェア構成上でテストおよび検証されています。詳細は以下の通りです。

対応する ROS 2 バージョン

  • 現在、このソフトウェアパッケージは** Ubuntu 22.04(Jammy Jellyfish)+ ROS 2 Humble** 上で正式にテストおよびサポートされています。このソフトウェアパッケージは主に** ROS 2 Humble** を対象としてテストされていますが、ROS 2 Galactic または Iron 上でもビルドおよび動作する可能性があります。この場合、完全な互換性は保証されません。
  • 本パッケージは** Gazebo Ignition Fortress** と併用するよう設計されており、これは** ROS 2 Humble** 推奨のシミュレーション環境で、安定性と高性能な物理ベースシミュレーションを提供します。また、このソフトウェアパッケージは** Gazebo Classic** 上でもテストされていますが、機能的には使用可能であるものの、既に旧式であるため ROS 2 Humble 上での使用は推奨されません。ユーザーは不安定性や性能の問題に直面する可能性があります。
  • このソフトウェアパッケージの今後のバージョンでは、新しい ROS 2 および Gazebo のバージョンへのサポートが拡張される可能性があります。これはそれらの正式リリースに依存します。

最小ハードウェア要件

推奨される最小システム要件は以下の表の通りです。

コンポーネント推奨最小要件備考
** プロセッサー (CPU)**64 ビット Intel i5 / i7(または同等の AMD プロセッサー)モーションプランニングやリアルタイムセンサー処理のためにマルチコア CPU の使用を推奨します。
** メモリ (RAM)**最低 8 GB(推奨 16 GB)MoveIt 2 のモーションプランニングや RViz の可視化には大容量のメモリが必要です。
** ストレージ (Storage)**空き容量 20 GB 以上(SSD 推奨)より高速なストレージは起動速度とデータ処理能力を向上させます。
** GPU(オプション)**CUDA 対応の NVIDIA GPU基本機能には必須ではありませんが、AI ベースの視覚処理やリアルタイム SLAM などの高度な認識アプリケーションには有用です。

ROS 2 基本コマンド

本節では、JAKA ROS 2 ソフトウェアパッケージを使用する際によく利用される基本的な ROS 2 コマンドについて紹介します。これらのコマンドは、ROS 2 ノードのビルド、実行、デバッグ、トピック、サービス、パラメータ、および起動ファイルの管理に使用できます。

ROS 1 と異なり、ROS 2 はよりモジュール化され柔軟なアーキテクチャを採用しており、Colcon を使用してワークスペースを構築し、DDS(データ分配サービス)を用いて通信を行い、ROS 1 の rostopic、rosnoderosservice などのコマンドの代わりに ros2 CLI ツールを使用します。

下表は ROS 2 の主要なコマンドとその機能をまとめたものです。

コマンド説明
cd ~/<ros2_ws>ROS 2 の作業スペースディレクトリに移動します。
colcon buildROS 2 パッケージをビルドします(ROS 1 の catkin_make と同様です)。
source ./install/setup.bashパッケージを環境変数に追加します(ROS 1 の source ./devel/setup.bash と同様です)。
ros2 pkg list利用可能なすべてのパッケージを確認します。
ros2 pkg prefix <package-name>パッケージのインストールディレクトリを探します。
ros2 run <package-name> <executable-name>ROS 2 ノードを実行します。
ros2 node list実行中のすべてのノードを確認します。
ros2 node info <node-name>指定したノードの情報を確認します。
ros2 node kill <node-name>実行中のノードを停止します。
ros2 topic --help利用可能なトピック操作を確認します。
ros2 topic listアクティブなすべてのトピックを確認します。
ros2 topic echo /<topic_name>指定したトピックのメッセージ内容をリアルタイムで表示します。
ros2 topic info /<topic_name>トピックの情報(メッセージタイプ、パブリッシャ、サブスクライバなど)を表示します。
ros2 topic type /<topic_name>トピックのメッセージフォーマットを確認します。
ros2 interface show <msg_type>特定のメッセージタイプの詳細情報を表示します(ROS 1 の rosmsg show と同様)。
ros2 service --help利用可能なすべてのサービス操作を確認します。
ros2 service listアクティブなサービスの一覧を表示します。
ros2 service call <service-name> <service-type> {argument}サービスを手動で呼び出します。
ros2 launch <package_name> <file.launch.py>起動ファイルを実行します。
ros2 param list特定のノードで使用可能なパラメータを確認します。
ros2 param get <node-name> <param-name>特定のパラメータ値を取得します。
ros2 param set <node-name> <param-name value>パラメータ値を設定します。
ros2 bag record /<topic_name>指定したトピックのメッセージを ROS 2 bag ファイルに記録します。
ros2 bag play <bag_file>記録された bag ファイルのメッセージを再生します。
ros2 bag info <bag_file>記録された bag ファイルの詳細情報を表示します。
ros2 doctorROS 2 実行環境を診断および確認します。

インストールと設定

前提条件

JAKA ROS 2 パッケージをインストールおよび使用する前に、システムが必要なソフトウェア要件を満たしていることを確認してください。

これには、互換性のあるオペレーティングシステムの構成、ROS 2 とその依存関係のインストール、さらにモーションプランニングおよび実行に必要な追加ツールの設定が含まれます。

次のセクションでは、開発環境を準備するためのステップバイステップガイドを提供します。

オペレーティングシステム

互換性と安定性を確保するために、JAKA ROS 2 パッケージには次のものが必要です:

  • Ubuntu 22.04 (Jammy) オペレーティングシステム、x86_64 アーキテクチャ。
  • ROS 2 Humble をミドルウェアフレームワークとして使用します。

ROS 2 のインストール

Ubuntu Jammy (22.04) x86_64** アーキテクチャで動作**するシステムの場合は、公式ガイドに従って ROS 2 Humble をインストールしてください:ROS 2 Humble インストールopen in new window

便宜上、以下にインストール手順の概要を示します。

**(1) ロケールの設定 ** システムが UTF-8 ロケールをサポートしていることを確認します:

locale  # UTF-8 を確認
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale  # 設定を確認

(2) ROS 2 パッケージソースの設定 **

  • まず、Ubuntu Universe リポジトリを有効にします:

    sudo apt install software-properties-common
    sudo add-apt-repository universe
    
  • 次に、ROS 2 の GPG キーを追加します:

    sudo apt update && sudo apt install curl -y
    sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
    
  • 最後に、ROS 2 リポジトリをシステムのソフトウェアソースリストに追加します:

    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
    

**(3) ROS 2 Humble のインストール ** インストール前に、システムを更新およびアップグレードしてください:

sudo apt update
sudo apt upgrade

適切なインストールタイプを選択します:

  • デスクトップ版インストール(推奨): ROS、RViz、サンプル、およびチュートリアルを含みます。

    sudo apt install ros-humble-desktop
    
  • 基本版インストール(最小構成): コアの ROS 2 通信ツールのみを含み、GUI ツールは含みません。

    sudo apt install ros-humble-ros-base
    
  • 開発ツール(パッケージのビルド用): ROS 2 パッケージを開発またはコンパイルする必要がある場合に追加でインストールします。

    sudo apt install ros-dev-tools
    

**(4) 環境設定 ** 新しいターミナルを開くたびに、ROS 2 環境を手動で読み込む必要があります:

source /opt/ros/humble/setup.bash

ターミナルを開くたびに自動的に ROS 2 を読み込みたい場合は、.bashrc ファイルに追加します:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

注意: 異なるシェル(例: zsh)を使用する場合は、.bash を .zsh または .sh に置き換えてください。

追加の依存関係

MoveIt 2 のインストール

  • MoveIt 2 はモーションプランニングと実行に必要なコンポーネントです。MoveIt 2 のバージョン 2.2 以降の使用を推奨します。JAKA ROS 2 パッケージを使用する前に、MoveIt 2 が正しくインストールされていることを確認してください。
  • インストールについては公式 MoveIt 2 ドキュメントを参照してください:バイナリインストール(apt 経由の公式 Debian パッケージ):MoveIt 2 バイナリインストールopen in new window
    sudo apt update
    sudo apt install ros-humble-moveit
    source /opt/ros/humble/setup.bash

Gazebo Fortress のインストール

  • このパッケージは** Gazebo Fortress** と ROS 2 Humble のシミュレーションをサポートしています。ros-gz bridge パッケージをインストールして、ROS 2 と Gazebo Fortress の統合が正しく設定されていることを確認してください。
  • Gazebo Fortress をインストールするには、公式の Ignition Gazebo インストールガイドに従ってください:Gazebo Fortress バイナリインストールopen in new window

(1) 必要なツールをインストール:

sudo apt-get update
sudo apt-get install lsb-release gnupg

(2) Ignition Fortress をインストール:

sudo curl https://packages.osrfoundation.org/gazebo.gpg --output /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
sudo apt-get update
sudo apt-get install ignition-fortress

**(3) ROS 2 統合(ros-gz Bridge)のインストール:**ROS 2 Humble と Gazebo Fortress 間の通信を可能にします。

sudo apt install -y ros-humble-ros-gz

(4) 環境変数を設定:

echo 'source /usr/share/gz/setup.bash' >> ~/.bashrc
source ~/.bashrc

(5) Ubuntu 仮想マシンユーザー向けの追加設定 ** 仮想マシン上で Gazebo Fortress を実行している場合**、ハードウェアアクセラレーションが制限されているために、メッシュの点滅や空白のレンダリングウィンドウ**などの問題が発生する可能性があります。**この問題を解決するには、以下の内容を追加してソフトウェアレンダリングを強制的に使用することができます:

echo 'export LIBGL_ALWAYS_SOFTWARE=true' >> ~/.bashrc
source ~/.bashrc

JAKA ROS 2 パッケージをインストールする

**(1) GitHub からクローンまたはリリース版をダウンロードする ** JAKA ROS 2 パッケージを取得するには、次の方法があります:

  • GitHub からリポジトリをクローンする: a. HTTPS を使用してクローン:

    git clone https://github.com/JakaCobot/jaka_ros2.git
    

b. SSH を使用してクローン:

git clone git@github.com:JakaCobot/jaka_ros2.git
  • 公式ソースから最新のリリース版をダウンロードし、パッケージを解凍します。

**(2) colcon を使用してビルドする ** パッケージを取得したら、ワークスペースに入り、colcon を使用してビルドします:

cd <path-to-where-the-repository-is-cloned-or-extracted>/jaka_ros2/src
colcon build --symlink-install

**(3) ターミナル環境の設定 ** ビルドが完了したら、パッケージを使用するために環境を設定する必要があります:

source ~/jaka_ros2/install/setup.bash

ターミナルを開くたびに自動的に読み込ませたい場合:

echo "source ~/jaka_ros2/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

これで、JAKA ROS 2 パッケージのインストールと設定は完了です。

これで、このパッケージを使ってロボット制御やモーションプランニングを開始できます。

異なる SDK バージョンへの切り替え

JAKA ROS 2 パッケージは現在、**JAKA SDK バージョン 2.2.2 **に基づいており、これは最新の利用可能なバージョンです。

以前の SDK バージョン(例:バージョン 2.1.14)を使用する必要がある場合は、次の手順で設定を調整してください。

SDK バージョンを切り替える手順:

(1) 必要な SDK ソフトウェアパッケージをダウンロードします ** JAKA 公式ウェブサイトにアクセスして、使用したい SDK バージョンをダウンロードします:JAKA ダウンロードopen in new window

(2) libjakaAPI.so ファイル** **を置き換えます a. インストール済みの JAKA ROS 2 ワークスペース内の jaka_driver および jaka_planner パッケージの lib ディレクトリに移動します。 b. ダウンロードした SDK に含まれるバージョンで libjakaAPI.so ファイルを置き換えます。 c.** バージョン 2.1.14 **の場合、libjakaAPI.so ファイルは解凍後の SDK フォルダー内の次のディレクトリにあります:20241018100240A001/Linux/c&c++/x86_64-linux-gnu/shared

**(3) ヘッダーファイルを置き換えます ** a. インストール済みの JAKA ROS 2 ワークスペース内の以下の include ディレクトリに移動します:

  • jaka_driver/include/jaka_driver
  • jaka_planner/include/jaka_planner

b. ダウンロードした SDK から取得した対応するヘッダーファイルで、次のファイルを置き換えます:

  • JAKAZuRobot.h
  • jkerr.h
  • jktypes.h

c.** バージョン 2.1.14** の場合、これらのファイルは解凍後の SDK フォルダー内の次のディレクトリにあります:20241018100240A001/Linux/c&c++/inc_of_c++

(4) conversion.h** ** を変更する必要はありません ``jaka_driver/include/jaka_driver 内の conversion.h ファイルは JAKA SDK の一部ではないため、変更する必要はありません。そのままにしておくことができます。

これらの手順に従うことで、JAKA ROS 2 ワークスペース内で異なる SDK バージョン(例:2.1.14)に正常に切り替えることができ、選択した SDK バージョンとの互換性を確保できます。

JAKA ROS 2 ワークスペースの概要

本章では、JAKA ROS 2 ワークスペースの概要を示し、その主要コンポーネント、ノード、実行ファイル、トピック、サービスおよびアクションについて詳しく説明します。

JAKA ROS 2 パッケージの概要

1-2 に示すように、JAKA ROS 2 ワークスペースはいくつかのパッケージで構成されており、各パッケージは JAKA ロボットと ROS 2 アプリケーションにおいて異なる役割を果たします。

  • jaka_driver: ソースコード、SDK ライブラリ、および低レベルドライバインターフェースの起動ファイルを含むコントロールドライバパッケージです。
  • jaka_planner: MoveIt 2 を使用したモーションプランニング機能を提供し、プランニング関連の設定および起動ファイル、さらにアクションベースの軌道実行を含みます。
  • jaka_msgs: 他のパッケージで使用されるカスタムメッセージおよびサービス定義を含みます。
  • jaka_description: URDF、メッシュ、およびロボットモデルを記述する構成ファイルを格納します。
  • jaka_<robot_model>_moveit_config: 各対応する JAKA ロボットモデル(<robot_model>zu3s5a12minicobo など)向けの個別の MoveIt パッケージで、MoveIt 2 構成ファイル、RViz ビジュアル設定、および YAML パラメータファイルを含みます。

JAKA ドライバパッケージ (jaka_driver)

jaka_driver パッケージは、低レベルのロボット通信と制御を担当します。動作制御、構成、および状態レポートのための ROS 2 サービスとトピックを提供します。

以下の主要なコンポーネントを含みます。

ノードと実行可能ファイル

次の表は、jaka_driver パッケージ内の実行可能ファイル、関連するノード、およびその機能の概要を示します。

実行可能ファイルノード名目的
jaka_driver.cppjaka_driver 主要なドライバノードで、ロボットの初期化を行い、ROS 2 のトピックおよびサービス呼び出しを処理し、状態管理、I/O、および動作制御を担当します。
client.cpplinear_move_client/jaka_driver/linear_move サービスにサービスリクエストを送信する ROS 2 クライアントノードで、ユーザーが指定した姿勢と動作パラメータに基づいてロボットに直線運動を実行させます。
sdk_test.cppmoveit_serverロボットに接続し、ロボットを有効化して関節位置を取得することで、通信および状態情報を検証するために JAKA ロボット SDK をテストします。
servoj_demo.cppclient_test /jaka_driver/servo_move_enable サービスを使用してロボットのサーボモードを有効化し、ロボットをサーボモードに切り替えます。サーボモードが有効になった後、/jaka_driver/servo_j サービスを使用してロボットの関節を順次目標位置へ移動させ、連続した動作を実現します。

サービス

jaka_driver ノードは、以下のカテゴリに分類されるさまざまなサービスを提供します。

運動制御
  • /jaka_driver/linear_move - ユーザー座標系で直線運動を実行します。
  • /jaka_driver/joint_move - 関節座標系で軸方向の動作を実行します。
  • /jaka_driver/jog - 関節座標系、ユーザー座標系、またはツール座標系で連続動作制御(フリードライブモード)を有効にします。
  • /jaka_driver/servo_move_enable - サーボ位置制御モードを有効にします。
  • /jaka_driver/servo_p - サーボモードでデカルト座標系の動作を制御します。
  • /jaka_driver/servo_j - サーボモードで関節座標系の動作を制御します。
  • /jaka_driver/stop_move - ロボットの動作を停止します。
パラメータ設定
  • /jaka_driver/set_toolframe - TCP(ツールセンターポイント)パラメータを設定します。
  • /jaka_driver/set_userframe - ユーザー座標系のパラメータを設定します。
  • /jaka_driver/set_payload - ロボットアームの可搬重量パラメータを設定します。
  • /jaka_driver/drag_move - フリードライブモードを有効または無効にします。
  • /jaka_driver/set_collisionlevel - 衝突検知の感度を調整します。
I/O および運動学
  • /jaka_driver/set_io - コントロールパネル、ツール、または拡張インターフェース上のデジタルまたはアナログ I/O 値を設定します。
  • /jaka_driver/get_io - コントロールパネル、ツール、または拡張インターフェースからデジタルまたはアナログ I/O 値を取得します。
  • /jaka_driver/get_fk - 順運動学を計算します。
  • /jaka_driver/get_ik - 逆運動学を計算します。

トピック

jaka_driver ノードは以下のトピックを通じてリアルタイムのロボット状態更新を公開します。

  • /jaka_driver/tool_position - エンドエフェクタの位置と姿勢。
  • /jaka_driver/joint_position - 関節位置の情報。
  • /jaka_driver/robot_states - ロボット全体の状態およびイベント情報。

JAKA プランナー (jaka_planner)

jaka_plannerパッケージは、MoveIt 2を使用した軌道計画および実行のための機能を提供します。

以下の主要なコンポーネントを含みます。

ノードと実行可能ファイル

以下の表は、jaka_planner パッケージに含まれる実行可能ファイルの概要、およびそれらに関連付けられたノードと機能を示しています。

実行可能ファイルノード名目的
moveit_server.cppmoveit_server軌道実行とロボットの状態監視を処理する。ロボットに接続し、サーボモードを有効にし、動作計画と軌道目標を処理する。
moveit_test.cppjaka_plannerMoveIt 2におけるモーションプランニングに使用されるテストノード。これは、関節空間と直交座標空間における動作計画を実証し、move_groupインターフェースを使用して計画された軌道を実行します。

トピック

/joint_states - MoveIt 2 および RViz での視覚化のためにロボットの関節状態を公開します。

アクション

jaka_plannerパッケージは、計画された軌道を実行するためのアクションサーバーを提供します。

  • アクション名: /jaka_<robot_model>_controller/follow_joint_trajectory (<robot_model>: `zu3、s5、a12、minicoboなど```````)
  • メッセージタイプ: control_msgs::action::FollowJointTrajectory
  • 関数
    • 共同軌道目標を受信し、実行する。
    • 実行状況を監視し、ステータスを報告する。
    • 実行中にターゲットをキャンセルすることをサポートします。

入門ガイド(チュートリアル)

基本チュートリアル:jaka_driverパッケージを使用したJAKAロボットの制御

jaka_driverパッケージは、ROS 2のサービスとトピックを介してJAKAロボットと通信する制御ドライバです。

このセクションでは、さまざまなサービスやSDK関数を呼び出し、ロボットに基本的な制御コマンドを送信したり、ロボットの状態を確認したりするサービス呼び出しと実行例を示します。

JAKA ROS 2ドライバーを起動します

ロボットコマンドを実行する前に、jaka_driverノードを起動する必要があります。

ドライバを起動し、ロボットとの接続を確立するには、以下のコマンドを使用してください。

ros2 launch jaka_driver robot_start.launch.py ip:=<robot_ip>

注:<robot_ip> を実際のロボットの IP アドレスに置き換えてください。このパラメータは正常な通信に必要です。

図 4-1:JAKA ドライバサーバー起動コマンドの出力
図 4-1:JAKA ドライバサーバー起動コマンドの出力

サービスコマンドの例

次の例は、jaka_driver パッケージを使用して JAKA ロボットに制御コマンドを送信する方法を示しています。

**(1) 関節運動を実行 ** 関節座標系でロボットを動かすには、/jaka_driver/joint_move サービスを呼び出し、次のように適切なパラメータを渡します。

ros2 service call /jaka_driver/joint_move jaka_msgs/srv/Move "{
  pose: [0, 1.57, -1.57, 1.57, 1.57, 0],
  has_ref: false,
  ref_joint: [0],
  mvvelo: 0.5,
  mvacc: 0.5,
  mvtime: 0.0,
  mvradii: 0.0,
  coord_mode: 0,
  index: 0
}"

注意

デフォルトでは、関節運動インターフェースはブロッキングです。ノンブロッキングインターフェースを使用する場合は、jaka_driver.cpp 内の対応するパラメータを変更してください。

図 4-2:関節運動サービスコマンドの出力
図 4-2:関節運動サービスコマンドの出力
図 4-3:関節運動サービスの実行
図 4-3:関節運動サービスの実行

**(2) 直線運動を実行 ** ユーザー座標系でロボットに線形運動を実行させるには、/jaka_driver/linear_move サービスを使用し、以下のように必要なパラメータを渡してください。

ros2 service call /jaka_driver/linear_move jaka_msgs/srv/Move "{
  pose: [111.126, 282.111, 271.55, 3.142, 0, -0.698],
  has_ref: false,
  ref_joint: [0],
  mvvelo: 100,
  mvacc: 100,
  mvtime: 0.0,
  mvradii: 0.0,
  coord_mode: 0,
  index: 0
}"

**重要:**このサンプルの姿勢パラメータは参考値にすぎません。姿勢値がロボットの作業空間内にあり、特異点や動作制限を超えないことを確認してください。

図 4-4:線形運動サービスコマンド出力
図 4-4:線形運動サービスコマンド出力
図 4-5:線形運動サービス実行
図 4-5:線形運動サービス実行

**(3) 順運動学の計算 ** 指定された関節位置におけるロボットの順運動学を計算するには、/jaka_driver/get_fk サービスを呼び出し、以下のように必要な入力パラメータを渡します。

ros2 service call /jaka_driver/get_fk jaka_msgs/srv/GetFK "{
joint: [0, 1.57, -1.57, 1.57, 1.57, 0]
}"
図 4-6:順運動学サービスコマンド出力
図 4-6:順運動学サービスコマンド出力

**(4) 逆運動学の計算 ** 特定のデカルト姿勢を実現するために必要な関節構成を求めるには、/jaka_driver/get_ik サービスを使用し、適切な入力パラメータを以下のように渡してください。

ros2 service call /jaka_driver/get_ik jaka_msgs/srv/GetIK "{
ref_joint: [0, 1.57, -1.57, 1.57, 1.57, 0],
cartesian_pose: [130.7, 116, 291, 3.13, 0, -1.5707]
}"
図 4-7:逆運動学サービスコマンド出力
図 4-7:逆運動学サービスコマンド出力

JAKA ドライバーパッケージでの実行ファイルの実行

jaka_driver ノードに加えて、JAKA ドライバーパッケージにはjaka_driver パッケージ内の一部のサービスや SDK 機能を基本的にテストするための他の実行ファイルも含まれています。これらの実行ファイルを使用すると、ロボットとのさまざまな形式のインタラクションや、特定のサービスのテスト、ロボット機能の検証が可能です。 以下は、これらの実行可能ファイルを実行するための必要な手順と例です。 (1) Servo J 実行可能ファイルの実行 servoj_demo** 実行可能ファイルは、ロボットのサーボモードを有効にし、ロボットを段階的に特定の関節位置まで移動させることでサーボモードをテストするために使用されます。** この実行可能ファイルは、サーボモードでロボットの関節動作を制御する /jaka_driver/servo_move_enable および /jaka_driver/servo_j` サービスをテストします。```

この実行可能ファイルを実行するには、まず jaka_driver ノードが実行中であることを確認してください。次のコマンドを使用してドライバーを起動し、ロボットとの接続を確立します:

ros2 launch jaka_driver robot_start.launch.py ip:=<robot_ip>

注意:

<robot_ip> を`お使いのロボットの実際の IP アドレスに置き換えてください。

次に、以下のコマンドを使用して実行可能ファイルを起動します:

ros2 run jaka_driver servoj_demo

これによりサーボモードが有効化され、関節運動の実行が開始されます。

サーボ動作により、ロボットは指定された関節位置へ段階的に移動し、基本的な制御機能をデモンストレーションします。

図 4-8:Servoj デモ実行コマンド出力
図 4-8:Servoj デモ実行コマンド出力
図 4-9:ServoJ デモ実行
図 4-9:ServoJ デモ実行

**(2) クライアント実行可能ファイルの実行 ** client 実行可能ファイルはサービスクライアントノードであり、/jaka_driver/linear_move サービスのテストに使用されます。この実行可能ファイルは linear_move サービスにリクエストを送信し、ロボットを作業空間内の特定のデカルト位置に移動させます。

クライアントを使用する前に、まず jaka_driver ノードが実行中であることを確認してください。次のコマンドを使用してドライバーを起動し、ロボットとの接続を確立します:

ros2 launch jaka_driver robot_start.launch.py ip:=<robot_ip>

注意:

<robot_ip> を`お使いのロボットの実際の IP アドレスに置き換えてください。

その後、別のターミナルで以下のコマンドを実行します:

ros2 run jaka_driver client <x_position>, <y_position>, <z_position>, <rx>, <ry>, <rz>

注意:

<x_position><y_position><z_position><rx><ry><rz>を、ロボットの目標姿勢に対応するデカルト座標および方向に置き換えてください。これらの値がロボットの作業空間内にあり、特異点を避けていることを確認してください。

例:

ros2 run jaka_driver client 111.126, 282.111, 271.55, 3.142, 0, -0.698
図 4-10:クライアント実行可能コマンドの出力
図 4-10:クライアント実行可能コマンドの出力
図 4-11:クライアントの実行
図 4-11:クライアントの実行

**(3) SDK テスト実行ファイルを実行する ** sdk_test 実行ファイルは、指定された IP アドレスのロボットに接続し、ロボットを有効化して現在の関節位置を取得することで、ロボットとの通信を確認します。これは、ロボットが起動しており、正常に接続されていることを確認するための基本的な検証ステップです。

この実行ファイルは、SDK を使用してロボットの現在の関節位置にアクセスし、取得した値を表示します。前の 2 つの実行ファイルとは異なり、sdk_test は jaka_driver ノードを実行する必要がありません。自動的にロボットを起動して有効化します。

SDK テストを実行するには、次のコマンドを実行します:

ros2 run jaka_driver sdk_test --ros-args -p ip:=<robot_ip>

注意:

<robot_ip> を`お使いのロボットの実際の IP アドレスに置き換えてください。

図 4-12:SDK テスト実行コマンドの出力
図 4-12:SDK テスト実行コマンドの出力

MoveIt 2 チュートリアル:計画と実行

MoveIt 2 は強力なモーションプランニングフレームワークであり、ロボットアームの軌道計画と実行を提供します。更新された jaka_ros2 パッケージは現在**、Gazebo シミュレーションによるリアルタイム軌道実行をサポートしていますが、システム制限、ハードウェア制約、またはその他の要件により Gazebo を使用できない場合のために、RViz ベースのシミュレーションモード**も提供しています。

この方法により、ユーザーは物理的な JAKA ロボットや 3D シミュレーションソフトウェアツールを必要とせずに RViz 環境で軌道計画と実行を行うことができ、さまざまな開発環境でより高い柔軟性と幅広いアクセス性を確保できます。

MoveIt 2 と JAKA ロボットの設定(RViz シミュレーション)

(1)** MoveIt 2** と jaka_ros2 パッケージが正しくインストールされていることを 確認します。 (2) デフォルトの launches.py ファイルを jaka_ros2 パッケージに含まれる修正版([launches.py](./launches.py))に置き換えます。MoveIt 2 のインストールディレクトリ内の launches.py ファイルを探すために、find コマンドを使用できます。次のようにします。

図 4-13:launches.py の検索コマンド出力
図 4-13:launches.py の検索コマンド出力

(3) 次のコマンドを使用して、RViz シミュレーションモードで MoveIt 2 を起動します:

ros2 launch jaka_<robot_model>_moveit_config demo.launch.py use_sim:=true

注意:

<robot_model> を、対応する JAKA ロボットモデル名(例:zu3s5a12minicobo など)に置き換えます。

図 4-14:シミュレーションモードで Demo MoveIt 設定を起動するコマンド出力
図 4-14:シミュレーションモードで Demo MoveIt 設定を起動するコマンド出力

軌道の計画と実行

(1) RViz を起動すると、ロボットモデルが環境内に表示されます。 (2) インタラクティブマーカー(ロボットのエンドエフェクタを表す球体)を目的のターゲット位置に移動するか、RViz インターフェースの**「Goal state」から目標姿勢を選択します。 (3) 「Plan & Execute」**をクリックして、ロボットの軌跡を生成および可視化します。

図 4-15:RViz シミュレーションモード実行
図 4-15:RViz シミュレーションモード実行

このプロセスにより、物理的なロボットがなくても、シミュレーションされた RViz 環境で動作計画と実行をテストすることができます。

Gazebo シミュレーショントレーニング:Gazebo でリアルタイム軌跡を実行する

Gazebo は強力なシミュレーション環境であり、リアルな物理特性と視覚効果を提供し、ロボットアプリケーションに適しています。このセクションでは、Gazebo と jaka_ros2 パッケージを組み合わせて使用し、シミュレーション環境でリアルタイムの軌跡計画と実行をシミュレートする方法を 示します。 前のセクションで説明した RViz シミュレーションと同様に、本チュートリアルではカスタマイズされた起動ファイル(修正済みの launches.py)を使用します。launches.py に対して行った主な変更は、Gazebo を単独で起動してモデルを可視化する機能を追加し、RViz と連携して動作する統合 Gazebo シミュレーション環境を起動することです。

JAKA ROS2 を使用した Gazebo シミュレーションの設定

**(1) 必要なパッケージがインストールされていることを確認します: ** 続行する前に、Gazebo Ignition Fortressjaka_ros2 パッケージが正しくインストールされていることを確認してください。

**(2) カスタマイズした起動ファイルを更新します: ** デフォルトの launches.py ファイルを jaka_ros2 パッケージが提供するカスタマイズ版に置き換えます(詳細は前のセクションを参照)。

**(3) Gazebo を単独で起動してモデルを可視化します: ** Gazebo 内で JAKA ロボットモデルを可視化するには、カスタマイズされた gazebo.launch.py ファイルを使用して次のコマンドを実行します:

ros2 launch jaka_<robot_model>_moveit_config gazebo.launch.py
図 4-16: 独立した Gazebo シミュレーション実行
図 4-16: 独立した Gazebo シミュレーション実行

このコマンドは Gazebo Fortress を起動し、デフォルトのワールド(地面と光源のみを含む空のワールド)を読み込み、公開されたロボット記述に基づいてロボットモデルを生成します。ロボットは Gazebo GUI に表示され、確認することができます。

**(4) Gazebo と RViz を起動し、軌跡計画と実行を行います: ** シミュレーション環境でリアルタイムの軌跡計画と実行を有効にするために、demo_gazebo.launch.py ファイルを実行し、Gazebo と RViz を統合します:

ros2 launch jaka_<robot_model>_moveit_config demo_gazebo.launch.py

注意:

<robot_model> を適切な JAKA ロボットモデル名(例:zu3、s5、a12、minicobo など)に置き換え`てください。

Gazebo での軌跡実行デモ

**(1) デモ環境を起動: ** 上記の手順``に従うと、ロボットモデルが GazeboRViz の両方の環境に同時に表示されます。

(2) 目標姿勢を設定:

  • RViz でロボットのエンドエフェクタ上のインタラクティブマーカーを移動し、希望する位置に設定します。
  • または、RViz インターフェースから目標状態を選択します。

(3) 軌道を計画して実行:

  • RViz で**「Plan & Execute」**をクリックし、ロボットの軌道を生成して可視化します。
  • Gazebo** 上のロボットは**、計画された軌道をリアルタイムで実行できるはずです。
図 4-17:RViz で Gazebo シミュレーションを実行するデモ
図 4-17:RViz で Gazebo シミュレーションを実行するデモ
図 4-18:Gazebo シミュレーションと RViz デモの実行
図 4-18:Gazebo シミュレーションと RViz デモの実行

このプロセスにより、実際のロボットを使用せずに、Gazebo シミュレーション環境で動作計画と実行をテストできます。

実ロボットチュートリアル:実際の JAKA ロボットを制御する

安全上の注意事項とロボット設定

実際の JAKA ロボットを制御する前に、正しい設定と安全対策を確実に行うことが重要です。これにより、衝突、機器の損傷、または潜在的な危険を防止できます。

このセクションでは、主要な安全上の注意点、負荷設定、および運用のベストプラクティスを概説します。

(1) 環境および操作の安全

  • **作業エリアの整理:**ロボットが動作している間、作業エリアに障害物や人がいないことを確認します。必要に応じて、制限エリアを定義して実行できます。
  • **電力およびネットワークの安定性:**安定した電源を使用し、制御用コンピュータとロボット間のネットワーク接続を確認して、予期しない中断を防止します。
  • **非常停止ボタンへのアクセス:**操作前にロボットの非常停止ボタンを確認し、その機能が正常であることを確かめます。

(2) 安全作業エリアおよび動作制限の設定

  • **衝突を回避:**JAKA アプリケーション内で安全フィールド境界を設定し、ロボットの動作を指定された安全エリア内に制限します。
  • **関節制限の監視:**計画された動作がロボットの関節可動範囲を超えないようにし、過度の伸展を防止します。

**(3) 負荷設定 ** グリッパーやその他のエンドエフェクタなどの外部ツールを取り付ける場合は、負荷設定を更新し、正確なモーション制御と関節への過度な負荷の回避を確保する必要があります。

  • **負荷パラメータの設定: **/jaka_driver/set_payload サービスを使用するか、JAKA アプリでロボットの負荷設定を調整し、取り付けられたツールの重量と重心位置に基づいて設定します。
  • トルク制限の確認: 過剰な負荷は関節に過負荷を引き起こす可能性があります。ロボットの最大負荷制限を超えないように確認してください。
  • ツールセンターポイント (TCP) のキャリブレーション: 正確な TCP を定義して運動精度を向上させ、ツールのずれや衝突を防止します。

(4)動作計画と衝突検出

  • RViz で軌跡をシミュレーション: 実機で動作を実行する前に、まず RViz で計画と検証を行い、潜在的な衝突、特異点エラー、または範囲超過の動作を確認します。
  • 安全な動作パラメータの設定: MoveIt 2 の設定ファイルまたは RViz インターフェースを使用して、各ロボットモデルパッケージに適切な速度と加速度の制限を定義し、安全な実行を確保します。

jaka_planner パッケージの起動

この章では、実際の JAKA ロボットを使用して軌跡計画と実行を行うために、MoveIt 2 サーバーと RViz を起動する方法について説明します。

前提条件

jaka_planner MoveIt 2 サーバーを起動する前に、jaka_driver サーバーが実行されていないことを確認してください。MoveIt 2 と JAKA ROS ドライバーは同時に実行できません。

jaka_driver が実行中の場合は、続行する前に停止してください。

MoveIt 2 サーバーの起動

MoveIt 2 サーバーを起動するには、ターミナルを開き、次のコマンドを実行します。<robot_ip> をロボットの実際の IP アドレスに、<robot_model> を使用している JAKA ロボットのモデル(例:zu3s5a12minicobo など)に置き換えてください:

ros2 launch jaka_planner moveit_server.launch.py robot_ip:=<robot_ip> robot_model:=<robot_model>
図 4-19:MoveIt 2 サーバー起動コマンドの出力
図 4-19:MoveIt 2 サーバー起動コマンドの出力
RViz で MoveIt 2 クライアントを起動

新しいターミナルで、次のコマンドを使用して MoveIt 2 RViz インターフェースを起動します。<robot_model> を前項で使用した対応する JAKA ロボットモデルに置き換えてください:

ros2 launch jaka_<robot_model>_moveit_config demo.launch.py
図 4-20:MoveIt 設定起動コマンドの出力例
図 4-20:MoveIt 設定起動コマンドの出力例

起動後、RViz インターフェースが開き、ロボットモデルが表示されます。可視化は物理ロボットの現在の実際の位置と方向を反映している必要があります。

図 4-21:RViz における実機ロボットの可視化
図 4-21:RViz における実機ロボットの可視化
図 4-22:JAKA アプリケーションにおける実機ロボットの可視化
図 4-22:JAKA アプリケーションにおける実機ロボットの可視化

注意:

use_sim パラメータのデフォルト値は false です。そのため、MoveIt 2 と RViz を使用して実機ロボットを制御する場合は、明示的に use_sim:=false を指定する必要はありません。ただし、明確にしたい場合は指定しても構いません。

RVizで実機ロボットを使用した軌道計画と実行

MoveIt 2 サーバーと RViz インターフェースを起動すると、RViz から直接軌道計画と実行ができます。RViz では、インタラクティブマーカーを使用して JAKA ロボットの動作を計画および実行できます。

目標位置を定義する際には、2つの実行方法があります:

(1)計画してすぐ実行(初期テストには推奨されません)

  • インタラクティブマーカーエンドエフェクタ上の目標位置までドラッグするか、または RViz インターフェースの**「Goal state」**から目標姿勢を選択します。
  • 「Plan & Execute」をクリックすると、軌道が生成され、即座にロボットに送信され実行されます。
  • この方法では、事前に可視化されることなくリアルタイムで動作が実行されます。目標位置に到達できない場合や衝突が発生する場合、意図しない動作を引き起こす可能性があります。
  • 目標位置の軌道が安全であることを確認できる場合のみ、この方法を使用してください。

(2)推奨方法 – まず計画し、その後実行

  • インタラクティブマーカーエンドエフェクタ上の目標位置までドラッグするか、または RViz インターフェースの**「Goal state」**から目標姿勢を選択します。
  • 「Plan」をクリックすると、RViz 内で軌道が生成および可視化され、その後に実行できます。
  • 軌道が安全かつ実行可能であれば、**「Execute」**をクリックして動作コマンドをロボットに送信します。
図 4-23:RViz 実機ロボット軌道計画と実行
図 4-23:RViz 実機ロボット軌道計画と実行
図 4-24:JAKA アプリケーションによる実機ロボット軌道実行
図 4-24:JAKA アプリケーションによる実機ロボット軌道実行

moveit_test を実行して基本動作テストを行う

moveit_test 実行ファイルは、ユーザーに対し、JAKA ロボット上で MoveIt 2 の動作計画と実行をテストする簡単な方法を提供します。これは新規ユーザーの初期検証ステップとして、JAKA ROS 2 パッケージがどのように JAKA ロボットと通信・制御を行うかを示します。このテストは実機ロボット、RViz シミュレーションモード、または Gazebo シミュレーション環境で実行できます。

moveit_test の目的
  • ユーザーに MoveIt 2 の動作制御を検証するための簡単な出発点を提供します。
  • JAKA ROS 2 パッケージと JAKA ロボット間の通信をテストするのに役立ちます。
  • ユーザーがあらかじめ定義された関節空間動作シーケンスを使用してロボットの動作計画を検証できるようにします。

実機ロボットで moveit_test を実行する

実機ロボットでテストを行う前に、moveit_test を実行する前に MoveIt サーバーが起動 していることを確認してください。 異なる端末で以下のコマンドを実行します:

ros2 launch jaka_planner moveit_server.launch.py ip:=<robot_ip> model:=<robot_model>
ros2 launch jaka_<robot_model>_moveit_config demo.launch.py
ros2 run jaka_planner moveit_test --ros-args -p model:=<robot_model>

注意:

  • <robot_ip> を`ロボットの実際の IP アドレスに置き換えます。
  • <robot_model> を対応する JAKA ロボットモデルに置き換えます。
  • moveit_test の場合、コード内のデフォルトのロボットモデル設定は zu3 です。異なるモデルを使用する場合は、起動コマンドでそれを指定します(-p model:=<robot_model>)。
図 4-25:MoveIt テスト実行可能ファイルのコマンド出力
図 4-25:MoveIt テスト実行可能ファイルのコマンド出力
図 4-26:MoveIt テスト実機ロボットの実行
図 4-26:MoveIt テスト実機ロボットの実行
RViz シミュレーションモードで実行

物理的なロボットを使用せずにテストを実行するには、MoveIt サーバーの起動を省略し、use_sim パラメータを true に設定して RViz デモを起動します。

異なる端末で以下のコマンドを実行します:

図 4-27:MoveIt テスト RViz シミュレーションモードの実行
図 4-27:MoveIt テスト RViz シミュレーションモードの実行

Gazebo シミュレーションで moveit_test を実行

実際の JAKA ロボットを使用せずに Gazebo シミュレーションでテストを実行するには、MoveIt サーバーの起動を省略し、Gazebo または RViz 付きの Gazebo デモを起動します。

**(1) 独立した Gazebo シミュレーションで moveit_test を実行: ** 異なる端末で以下のコマンドを実行します:

ros2 launch jaka_<robot_model>_moveit_config gazebo.launch.py use_rviz_sim:=true
ros2 run jaka_planner moveit_test --ros-args -p model:=<robot_model>

注意:

<robot_model> を対応する JAKA ロボットモデルに置き換えます。

図 4-28:MoveIt テスト独立 Gazebo シミュレーションの実行
図 4-28:MoveIt テスト独立 Gazebo シミュレーションの実行

**(2) RViz 付きの Gazebo デモシミュレーションで moveit_test を実行: ** 異なる端末で以下のコマンドを実行します:

ros2 launch jaka_<robot_model>_moveit_config demo_gazebo.launch.py use_rviz_sim:=true
ros2 run jaka_planner moveit_test --ros-args -p model:=<robot_model>

注意:

<robot_model> を対応する JAKA ロボットモデルに置き換えます。

図 4-29:MoveIt テストデモ RViz を使用した Gazebo シミュレーション実行
図 4-29:MoveIt テストデモ RViz を使用した Gazebo シミュレーション実行
図 4-30:MoveIt テスト RViz 付きの Gazebo デモシミュレーション実行
図 4-30:MoveIt テスト RViz 付きの Gazebo デモシミュレーション実行
最終更新日: