MoveIt!を用いたロボットアームの動作計画

MoveIt!を用いたロボットアームの動作計画について学びます.

目的

ROS2では,ロボットの動作計画を行うためのライブラリとしてMoveIt!が用意されています. MoveIt!を利用することで,目標姿勢までの軌跡を計算する動作計画や障害物との干渉判定を容易に行うことができます. 講義の前半では動作計画について学び,後半ではMoveIt!を用いてロボットアームの動作計画を体験します.

準備

まずはrosdepとaptをアップデートします.

1
2
3
4
5
$ sudo apt install python3-rosdep
$ sudo rosdep init
$ rosdep update
$ sudo apt update
$ sudo apt dist-upgrade

次に関連パッケージをインストールします. colcon mixinは,colcon buildする際の引数を簡単に呼び出すためのものです.

1
2
3
4
5
$ sudo apt install python3-colcon-common-extensions
$ sudo apt install python3-colcon-mixin
$ sudo apt install python3-vcstool
$ colcon mixin add default https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml
$ colcon mixin update default

ワークスペースを作成し,ホスティングサービスであるgithubからパッケージをダウンロードします.

1
2
3
$ mkdir -p ~/ws_moveit2/src
$ cd ~/ws_moveit2/src
$ git clone --branch humble https://github.com/ros-planning/moveit2_tutorials

関連するパッケージをダウンロードとインストールします.

1
2
$ vcs import < moveit2_tutorials/moveit2_tutorials.repos
$ sudo apt update && rosdep install -r --from-paths . --ignore-src --rosdistro $ROS_DISTRO -y

ワークスペースをビルドします. 多くのパッケージをビルドするため30分ほど要します. 一部のPCではフリーズしたように見えますが,内部的には動いてますので強制停止しないようにしてください. PCのスペックが高性能(メモリが32GB)の場合には,colcon buildの追加オプション--executor sequentialを無くすと高速にビルドできます.

1
2
$ cd ~/ws_moveit2
$ colcon build --mixin release --executor sequential

ビルドが完了したらsourceコマンドを実行しましょう.

1
$ source ~/ws_moveit2/install/setup.bash

実行

これまでの内容でMoveIt!を使う準備が整いました. 下記のlaunchファイルを起動してみましょう.

1
$ ros2 launch moveit2_tutorials demo.launch.py

launchファイルを実行するとrviz2が起動します. 以前にrviz2を起動した時とは異なり,ウィンドウの左下にMotionPlanningの項目が追加されています.

moveit1 MotionPlanningcontextタブを開きましょう. このウィンドウでPlannning Libraryを選ぶことができます. 初期の状態では,omplunspecifiedが設定されています. unspecifiedをクリックすると他の動作計画法に切り替えることができます.

moveit0 所望する動作計画法がある場合には,こちらから設定しましょう. なお,unspecifiedのままにした場合には,RRTConnectkが用いられます.

moveit0_1 planningタブに移動しましょう. QueryGoal Statecurrentからrandomに変更すると,オレンジ色で表現されたロボットアームの姿勢が変化します. このオレンジ色で表現されたロボットアームは,目標姿勢を表します. リンクが赤色で表現された場合には干渉を表しますので,もう一度randomを選択して違う姿勢にしましょう. ロボットのエンドエフェクター付近には,赤緑青色の矢印と円状のマーカーが表示されています. これはインタラクティブマーカーと呼ばれるもので,このマーカーを用いてロボットの位置・姿勢を調整することができます. 矢印をドラッグすると移動,円状のマーカーをドラッグすると回転させることができます.

moveit2

それでは,動作計画を行いロボットを動かしてみましょう. Planボタンで動作計画を行うことができます. Planを実行後,問題ない動きであることを確認したらExeuteボタンで実行できます.

動作計画法によってはアルゴリズムで乱数を使用している場合があります. その場合,Planを実行する度にロボットの軌道が変わることがあります. 今回はシミュレーションですので大きな問題は発生しませんが,実機で扱う場合には注意が必要です.

moveit1

次に3次元空間中に障害物を配置してみましょう. Scene Objectsタブを選択してください. 左下の0.2という数字が3つ並んでいますが,これはXYZ方向の障害物の大きさを表します. 大きさを変更したい場合には数値を変えてください. また,形状を変えたい場合にはBoxをクリックし,希望する形状を選択してください. 大きさと形状を設定後,+ボタンをクリックすると3次元空間中に障害物が出現します.

障害物もインタラクティブマーカーで位置・姿勢を変更できます. また,Scene ObjectsChange object pose/scaleからも位置・姿勢を変更できる他,大きさも変えることが可能です.

moveit3

ロボットの軌道上に障害物を配置して動作計画を行います. 障害物に衝突しない軌道を生成することができました.

moveit2

DisplaysTrajectoryにあるShow Tailの項目にチェックを入れるとロボットの軌道を可視化できます. ただし,多くの処理が発生し,PCによっては動きが重くなるので注意してください. Tail Step Sizeを大きくすると,軌跡の描画間隔を大きくできます. 動きが多少は軽くなりますので,ちょうど良い値に調整してください.

moveit4