ROSでMotoman GP8を利用するための環境構築と動作確認

安川電機の産業用ロボットである,MOTOMAN GP8をROSで利用するための環境構築方法について示す.
なお、以降の検証は下記の環境で行っている.

  • OS: Ubuntu18.04
  • ROS: Melodic

なお,ROS用のワークスペースは「catkin_ws」とし, ビルドは「catkin build」で行うものとする.

MOTOMANの環境構築

MOTOMANをROSから利用するためのパッケージはROS Industrialにおいてオープンソースとして公開されている.

MOTOMAN ROS Package

本ページの資料では,上記のページを参考にしている.
なお,不具合などがあった場合は適宜issueやpull requestしていくことで,コミュニティの活性化につながるので,積極的に行うことが望ましい.

上記のサイトから,以下の様にパッケージをcloneする.

$cd 
$cd ~/catkin_ws/src
$git clone https://github.com/ros-industrial/motoman
$rosdep update
$rosdep install --from-paths src/ --ignore-src --rosdistro melodic
$cd ..
$catkin build
$source devel/setup.bash

Moveit!を利用したMOTOMAN-GP8のモーション生成

2020年9月現在,ダウンロード元のリポジトリには,MOTOMAN GP8のmoveit_configは存在しない.
そのため,次の手順にしたがって,moveit_configの生成を行う.

以下のコマンドでMoveIt!のアシスタントツールを立ち上げる.

$roslaunch moveit_setup_assistant setup_assistant.launch

上記のコマンドを実行すると,以下の画面が表示される.

新規作成の場合は,左側のボタン「Create New MoveIt Configuration Package」を押す.
その後下記の画面が表示される.

この画面において,①「Load a URDF or COLLADA Robot Model」の欄にMOTOMAN-GP8のurdf,xacroファイルを指定する.
なお,MOTOMAN-GP8のモデルは以下に置かれている.

~/catkin_ws/src/motoman/motoman_gp8_support/urdf/gp8.xacro

モデルを指定後,②「Load Files」を選択しロードが成功すると,画面右側にMOTOMAN-GP8の3Dモデルが表示される.

続いて,以下のの画面において,①「Self-Collisions」を選択し,②「Generate Collision Matrix」を押しロボットの自己干渉をチェックする(自己接触を自動判定).

上記の画面設定後,③「Planning Groups」を選択する.(仮想的関節は今回取り扱わないため「Virtual Joints」はスキップする)

「Planning Groups」の画面において,「Add Group」を選択し,Planning Groupの設定を行う.ここでは,①にあるように,グループ名と,運動学のソルバーの選択を行う.この例では,「kdl_kinematics_plugins/KDLKinematicsPlugin」を選んでいる.
続いて,②「Add Joints」を選択する.

Planning Groupの設定では,以下の画像のように,①「base_link-base」と「joint_6_t-tool0」以外を選択し,②の矢印を押し,「Selected Joints」に追加後,③「Save」により保存する.

続いて,「Planning Groups」において,「Link」を選択し「Edit Selected」を選択する.
Jointsの設定と同じように, ①でリンクの選択を行い,②で「Selected Links」に追加,③で「Save」により保存する.

最後に,「Planning Groups」において,「Chain」を選択し「Edit Selected」を選択する
以下の画面のようのよう設定した後,「Save」を選択する.

以上の設定を行うと,「Planning Groups」は,以下の画像のようになる.
この画像のようになっていない場合は,Group,Link,Chainの確認を行うこと.

続いて,「Add Pose」を選択し「Pose Name」を任意で設定し,下記の画面設定を行う.
(初期姿勢の設定なので,各自の環境に合わせて設定する.)

また,「End Effectors」,「Passive Joints」は、ここでは取り付けていないものとしてスキップする.
グリッパなどをつけている場合は適宜設定を行う.
「ROS Controllers」では,「Add Controllers」を選択し,以下のように名前は任意とし,「Controller Type」をここでは「effort_controllers/JointPositionController」を選択する.

「Author information」は,任意で設定すること.

「Configuration Files」で,パッケージを生成する前に①「Package Save Path」の部分を以下のパスに指定しパッケージの名前を作成する.
(パッケージの名前は何でも良いが,他のパッケージと命名規則を合わせて,ここでは[motoman_gp8_moveit_config]としている.)

~/catkin_ws/src/motoman/motoman_gp8_moveit_config

ここまでの設定が全て完了したら,②「Generate Package」ボタンを押しパッケージを生成する.
今回,仮想ジョイントやエンドエフェクタの設定をしていないため,「No end effectors have been added」や「No virtual joints have been added」と表示されるがそのまま「OK」ボタンを押して生成を開始する.
「Configuration package generated successfully!」と出たらmoveit_configのパッケージの生成は完了する.
以降,Moveit Assistanceは利用しないため,③「Exit Setup Assistant」を押して,終了する.

MoveIt!で作成したパッケージを利用できるようにするために,出力したパッケージをビルドする.

$ cd ~/catkin_ws
$catkin build

ここまでの流れで,MoveIt!を利用する準備は完了となる.

MoveIt!によるモーション作成

続いて,作成したパッケージを用いて,MoveIt!の動作確認を行う.
作成したパッケージの中にdemo.launchというファイルが用意されている.

$roslauch motoman_gp8_moveit_config demo.launch

コマンド入力後に以下のような画面が表示されれば成功.

また,この.rvizファイルを画面左上の「File」から「Save Config as」を選択し,「motoman_gp8_moveit_config/launch」の中に「moveit.rviz」があるので上書き,または「motoman.rviz」など名前をつけ新たに作成しておくとよい.

MOTOMAN-GP8のlaunchファイル作成

実機接続方法するためのlaunchファイルを作成する.下記のページで,MoveIt!用の設定ファイルの生成手順が書かれているので,この手順を参考にする.
Moveit! 設定ファイル生成手順

lanuchファイルのサンプルは,下記のリンクにあるので,これを参照にlaunchファイルの生成を行う.
なお,このlanuchファイルのテンプレートは上記の参照ページの2章にリンクが貼られている.

Template Launchファイルへのリンク

以下のパスにlaunchファイルを作成し,上記リンクの内容のコピーを行う.

$~/catkin_ws/src/motoman/motoman_gp8_moveit_config/launch/moveit_planning_execution.launch

ペースト後,以下の様に修正する必要がある.
1. [robot_moveit_config]の部分は,自身の作成したパッケージの名前に変更すること.

2. 10行目のrosparamのコメントを外す(yamlファイルの名前やパスを適宜変更する)

 rosparam command="load" file="$(find motoman_gp8_support)/config/joint_names_gp8.yaml"/

3. 31行目のlaunchファイルを以下の様に変更する.

include file =“$(find motorman_gp8_support)/launch/robot_interface_streaming_gp8.launch”
arg name =“robot_ip” value =“$(arg robot_ip)”
arg name =“controller” value =“$(arg controller)”

このlaunchファイルは,必要なインターフェースノードやロボットコントローラ(今回の場合:yrc1000micro)を起動させるためのもの.

4.43行目の[moveit_rviz.launch]を以下の様に変更する.

arg name =“rviz_config” value=“$(find motorman_gp8_moveit_config)/launch/motorman.rviz”

また,4.の内容は.rvizファイルを作成した時のみ変更する
しなかった場合は、arg name =“config”value=”true” の部分はコメントアウトする.

上記の修正内容を行ったlaunchファイルを下記に示す.

<!--?xml version="1.0"?-->
 
    <!-- The planning and execution components of MoveIt! configured to run -->
    <!-- using the ROS-Industrial interface. -->
 
    <!-- the "sim" argument controls whether we connect to a Simulated or Real robot -->
    <!-- - if sim=false, a robot_ip argument is required -->
 
 
    <!-- load the robot_description parameter before launching ROS-I nodes -->
 
 
 
    <!-- run the robot simulator and action interface nodes -->
  
 
 
    <!-- - replace these calls with appropriate robot-specific calls or launch files -->
  
       <!--include file="$(find motoman_driver)/launch/robot_interface_streaming_yrc1000.launch" -->
 
 
 
 
 
   <!-- publish the robot state (tf transforms) -->
 
 
 
     <!--arg name="fake_execution" value="true"/-->
 
 
     <!--arg name="rviz_config" value="true"/-->

次に[motoman_gp8_moveit_config/config]の中に”controllers.yaml(コントローラインターフェース)”を作成する.下記の内容をコピー&ペーストすること.

controller_list:
  - name: ""
    action_ns: joint_trajectory_action
    type: FollowJointTrajectory
    joints: [joint_1_s, joint_2_l, joint_3_u, joint_4_r, joint_5_b, joint_6_t]

詳細は下記のサイトを参考にすること.
Moveit! Controllers
[Controllers.yaml]を作成後,/motorman_gp8_moveit_config/launch/motorman_gp8_moveit_controller_manager.launch.xmlの中身を下記の様に修正する.

 rosparam file="(find motoman_gp8_moveit_config)/config/controllers.yaml"/

MOTOMAN-GP8の接続方法

MOTOMAN-GP8のコントローラであるYRC1000-microに接続するために,以下の項目について確認を行うこと.

    ・MOTOMAN初期設定の確認
    ロボットコントローラに読み込ませる”MotoRosYRC1u_191.out”のダウンロード先、初期設定方法に関しては下記のサイトを参照にすること.
    MOTOMAN初期設定
    コントローラに”MotoRosYRC1u_191.out”のロード確認方法は、MOTOPlusのマニュアルを確認すること.
    使用するoutファイルは、コントローラによって違うため適宜変更すること.

    ・ロボットコントローラ(今回の場合:yrc1000micro)のIPアドレス(192.168.255.1)を確認すること
    ロボットコントローラのIPアドレスの確認方法はMotoPlusのマニュアルを確認すること.(変更しないことを推奨)

    ・ロボットコントローラとPCの接続はクロスケーブルを用いて直接接続、またはルータを介して接続する.
    1) クロスケーブルを用いる場合
    自分のPCのIPアドレスが192.168.255.(“1″以外の数字)のように設定.
    ・自身のPCのIPアドレスの確認方法
    コマンドプロンプトで”ipconfig”を入力し、Wireless LAN adapter Wi-FiのIPv4 アドレスの部分を確認する.
    自身のPCのIPアドレス変更方法について(192.168.255.5に変更する)
    PCのIPアドレス変更方法

    2) ルータに介して接続する場合
    例として、ルータのIPアドレスを”192.168.255.3″に変更する.
    ルータを介して接続する場合,ルータの固定IPアドレスを”192.168.255.3″に変更する必要がある。
    固定IPアドレスの変更の仕方は以下を参照にすること.
    ルータの固定IPアドレス変更方法
    ルーターのIPアドレスが変更できたら,1)を参考にPCのIPアドレスを192.168.255.(“1,3″以外の数字)で設定する.

    ・ペンダントがリモートモードかつ緊急停止モードが押されてないこと
    ・実機の電源を入れる
    ・ペンダントの画面が初期画面になる
    ・作成したlaunchファイルを立ち上げる

上記の設定を終えたらMOTOMANの設定は終了.

作成したlaunchファイルは,下記のコマンドで立ち上げる.

$roslaunch motoman_gp8_moveit_config moveit_planning_execution.launch sim:=false robot_ip:=192.168.255.1 controller:=yrc1000

launchファイルを立ち上げると以下の画像のようにRvizが表示される.

上記の画面表示が成功後,サーボオンにするために以下のコマンドを実行すること.

$rosservice call /robot_enable

上記のコマンド実行後,サーボオンがされる(カチッと音が鳴る).
Rviz画面で,”Query Goal State(アーム先端についているボールのようなもの)”をドラッグすると姿勢を変更可能.
[Plan and Execute]を行うと,実機とロボットモデルが動作を行う.

MOTOMANが動かない場合のトラブルシューティング

・制御用PCとYRC1000-microがネットワークの確認
以下のようにpingをうって,返答があるかどうかを確認する.
返答がない場合はネットワークの設定がおかしいので確認すること.

$ ping YRC1000microのIPアドレス;

・launchファイル実行時に「No Connect」とエラーになる場合
ロボットコントローラを再起動することで接続できることがあるので,コントローラの再起動を行う.