MoveIt2のビルドとマニピュレータ「MARA」による動作確認(WMD 2019 in Tokyo 準備編)

著者:YamamotoRyu

MoveIt2のビルドとマニピュレータ「MARA」による動作確認(WMD 2019 in Tokyo 準備編)

0. はじめに

本記事はWorld MoveIt Day 2019 in Tokyo(WMD 2019 in Tokyo)へ参加するにあたり,ROS2を用いて開発したいという人向けに,現在対応が進められている「MoveIt2」の環境構築とサンプルの実行方法について解説します.
MoveIt2は,本家ros-planningのレポジトリとAcutronicRobotics社の2つのレポジトリでそれぞれROS2への対応が進められていましたが,現在どちらとも更新が止まっています.そのため完全にROS2への対応が完了している訳ではないですが,AcutronicRobotics社が提供するマニピュレータ「MARA」がROS2対応されており,Gazebo上でMoveIt2を動作させるためのチュートリアル動画が公開されています.本記事ではROS2 Dashingでの動作確認およびチュートリアルを動かすことを目標としています.

1. 環境

ubuntu 18.04,ROS2 Dashingを使用します.本記事ではROS2はインストール済みであるとして進めます.ROS2の環境構築ができていない方はこちらを元に先に環境構築を行ってください.

2. MoveIt2のコンパイル

MoveIt2をコンパイルするために,以下のパッケージをインストールする必要があります.

以下,MoveIt2本体のcloneと依存パッケージの取得方法について記述します.

今回ワークスペースとして使用するディレクトリを作成し,MoveIt2本体をcloneします.

 mkdir -p ~/moveit2/src

 git clone https://github.com/AcutronicRobotics/moveit2 -b master

MoveIt2をコンパイルするために必要な依存パッケージを取得します.

 cd ~/moveit2

 vcs import src < src/moveit2/moveit2/repos

この時点でcontrol_msgsというパッケージがcloneされてきますが,これをそのまま使用してコンパイルすると失敗してしまったため,こちらは消して,バイナリをインストールします.

 rm -rf ~/moveit2/src/control_msgs

 sudo apt install ros-dashing-control-msgs

以下でMoveIt2と依存パッケージをコンパイルします.エラーが起きなければ成功です.

source /opt/ros/dashing/setup.bash

colcon build --merge-install

3. MARAを用いたMoveIt2の動作確認

本節ではAcutronicRobotics社が提供するマニピュレータ「MARA」を元に,MoveIt2の動作確認を行います.

MARA自体はROS2対応がされており,Gazebo上で動作確認をすることができます.レポジトリはこちらになります.

3.1 MARA ROS2パッケージのコンパイル

MARA ROS2パッケージをコンパイルするにあたり,以下で依存パッケージを取得します.

 cd ~/moveit2/
 
 wget https://raw.githubusercontent.com/AcutronicRobotics/MARA/dashing/mara-ros2.repos
 
 vcs import src < mara-ros2.repos

またMoveIt2チュートリアル用のパッケージをcloneします.

 cd ~/moveit2/src

 git clone https://github.com/RyuYamamoto/mara_moveit_tutorials -b wmd_dashing
ここまでで取得したものをまとめてコンパイルします.
cd ~/moveit2 && colcon build --merge-install

3.2 Gym Gazebo2のインストール

Gazebo上でMaraを扱うために,gym-gazebo2というパッケージをインストールする必要があります.レポジトリはこちらになります.

ちなみにこのパッケージはROS2及びGazebo上で強化学習などのアルゴリズムを検証するためのパッケージになっています.

 cd ~/moveit2

 wget https://raw.githubusercontent.com/AcutronicRobotics/gym-gazebo2/dashing/provision/additional-repos.repos

 vcs import src < additional-repos.repos

 cd ~ && git clone -b dashing https://github.com/AcutronicRobotics/gym-gazebo2

 cd ~/gym-gazebo2 && pip3 install -e .

Gazebo起動時にgymがimportエラーで落ちて起動できないため,OpenAI Gymをインストールされていない方はそちらもインストールしてください.

今回は最新版を使用したいためソースコードからインストールします.

 git clone https://github.com/openai/gym

 cd gym && pip3 install -e .

3.3 動作確認

無事に環境が構築できたら実際に起動して動作を確認してみます.

まずはじめにGazeboを起動します.

ros2 launch mara_gazebo mara.launch.py

次にmove_groupを立ち上げます.こちらを立ち上げることでMoveItの独立した各モジュールを呼び出して統合し,またユーザーインターフェース側とロボットインターフェース側を繋ぎます.MoveIt1と大きな違いはありません.

ros2 run moveit_ros_move_group move_group

続いてmove_groupに対してプランニングに必要なパラメータを渡すためのlaunchファイルを起動します.

ここで渡すのはロボットのurdfファイルとmoveit_setup_assistantで生成されるsrdfファイルです.urdfはrobot_state_publisherに,srdfはtest_publish_dummy_joint_statesというノードに渡されます.srdfですが,各自の環境でmoveit_setup_assistantにより生成しても良いですが,こちらのレポジトリにmoveit_configがありますので,config内にあるものを使用すると良いと思います.

ros2 launch move_group_interface test_app.launch.py

立ち上げたあとにmove_groupが立ち上がっているターミナルでyou can start planning nowとでていれば成功です.

最後にmove_group_interfaceノードを立ち上げます.こちらのノードはユーザーインターフェース側となり,move_group_interface(C++)を用いて目標姿勢を設定し,プランニングとプランニング結果の実行指令をMoveIt側に送ります.(ちなみに,move_commander(Python)とRvizプラグイン(GUI)はまだROS2対応されていないため,プランニング結果の可視化は出来ません).

ros2 run move_group_interface move_group_interface

Gazebo上のロボットがプランニング結果に基づき動作すれば成功です.

move_group_interfaceノードの中身のコードについて軽く解説します.

まず以下でMoveGroupクラスのコンストラクタを宣言します.事前に設定したplanning_groupを指定することでMoveGroupの登録を行います.

moveit::planning_interface::MoveGroupInterface::Options options(PLANNING_GROUP, "robot_description", node);
moveit::planning_interface::MoveGroupInterface move_group(options);

MoveGroupに対して目標姿勢を渡すには以下のようにします.

geometry_msgs::msg::Pose target_pose1;
target_pose1.orientation.w = 0.5;
target_pose1.orientation.x = -0.5;
target_pose1.orientation.y = -0.5;
target_pose1.orientation.z = -0.5;
target_pose1.position.x = -0.039;
target_pose1.position.y = -0.156;
target_pose1.position.z = 1.5;
move_group.setPoseTarget(target_pose1);

以下でプランニングとプランニング結果を実行します.

moveit::planning_interface::MoveGroupInterface::Plan my_plan;
move_group.plan(my_plan);
move_group.execute(my_plan);

最後に

本記事ではマニピュレータ「MARA」を例にMoveIt2のコンパイル及び動作確認を行うための解説を行いました.
WMDで使用できるPanda自体はまだROS2対応がなされてないようですので,当日はROS2を用いた実機開発は難しいかもしれませんが,興味がある方は是非このチュートリアルに沿ってGazebo上でMoveIt2を動かしてみてください.
またMoveIt2自体は対応が全く進んでおらず,基本的なアーキテクチャーはMoveIt1と大きく変わらないものの,MoveIt1で有している機能はまだ多くは移植されていません.AcutronicRobotics社のレポジトリのコードを見るに,大部分がコメントアウトされてたりと,MARAを動かすために最低限対応している箇所が多く見受けられます.そのため,本格的に運用するという場合に関してはしばらくはMoveIt1を使用するのが良いかと思われます.もし自分のロボットをMoveIt2で動かしたい!!!という方は,是非MoveIt2へコミットしていきましょう!
MoveItでPandaを動かそう:後編(WMD 2019 in Tokyo 準備編)
World MoveIt Day 2019 in Tokyoが開催されました!

著者について

YamamotoRyu editor

コメントを投稿するにはログインしてください。