1. はじめに
本稿では、ROS を使ったプログラムでMG400を実際に動かす方法をご案内します。ここでは、例としてPythonを使って書いたプログラムをご紹介します。
WindowsにROSをインストールする方法は、以前の記事をご参照ください。
2. 環境
以下の環境にて、この手順が有効であることを確認しています。
OS: Windows 10 (64bit)
WSL: version 2
Ubuntu: 20.04
ROS: Noetic
3. 手順
3.1 MG400_ROS パッケージのインストール
ROSでMG400の実機を動かすためには、弊社のMG400_ROSのパッケージを使用する必要があります。
以前の 記事 でDobot社のMG400_ROS のパッケージをインストールしていた場合は競合してしまうため、以前のパッケージを削除するか、新しいワークスペースを作りそこに新たなパッケージをダウンロードしてください。
(1) ワークスペースにソースコードを展開する。
(2)ビルドする。
- cd ~/catkin_ws
- catkin_make
(3)環境設定をする。
- echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
- source ~/.bashrc
3.2 プログラムを書く
(1)ファイルを作成し、ノードを実行可能にする。ここでは、sample.pyにプログラムを書いていきます。
- cd ~/catkin_ws/src/MG400_ROS/mg400_bringup/
- mkdir scripts
- touch scripts/sample.py
- chmod +x scripts/sample.py
(2)Pythonでプログラムを書く。
ROSでMG400を操作するために、MG400_ROS/mg400_bringup/srv、/msg 内のファイルで定義されているさまざまなサービスおよびトピックを利用することができます。ここで利用するサービスは以下の通りです。
・MovJ(引数 – float64 x y z r、戻り値 – int32 res): 与えた直交座標系の点まで動かす。成功したら 0 を返す。
・EnableRobot(引数 – なし、戻り値 – int32 res): ロボットを有効化させる。
・DisableRobot(引数 – なし、戻り値 – int32 res): ロボットを無効化させる。
・ClearError(引数 – なし、戻り値 – int32 res): エラーを取り除く。
各サービスの情報を表示させたい場合、ターミナルで以下のコマンドを実行します。
たとえば、サービス名にmg400_bringup/srv/MovJ を入れると、
- rosservice info mg400_bringup/srv/MovJ
- Node: /mg400_bringup
- URI: rosrpc://VortexNote-03:50085
- Type: mg400_bringup/MovJ
- Args: x y z r
サービスの引数、戻り値を確認したい場合は、以下を実行します。
たとえば、
- rossrv show mg400_bringup/MovJ
- float64 x
- float64 y
- float64 z
- float64 r
- ---
- int32 res
sample.py には、MG400が3点を移動するサイクルが10回繰り返されるプログラムを書きます。サービス MovJ を利用して指定した点へMG400を動かしています。前の動きが完了してから次の動きのリクエストを送るため、トピック RobotStatus を購読し、ロボットのステータスに応じて待つか次の動きに進むかを判断しています。
ロボットの動作を変更するためには move() 関数内を変更します。wait() や sleep() 関数等を使用して各動作を反映させます。
pythonプログラム
3.3 プログラムを実行する
(1)MG400 の LAN1とPCをケーブルで繋げ、電源を入れる。
(3)MG400のIPアドレスを指定しながら mg400_bringup パッケージを起動する。
※MG400のコントロールファームウェアがv.1.5.9.0以上の場合、DobotStudioProからモードの変更を行う必要がございます。
DobotStudioProを接続後、設定>>リモコン>>現在のモードにて、"TCP/IP二回開発"へ変更いただくと正常に接続することができます。
- roslaunch mg400_bringup mg400_bringup.launch robot_ip:=192.168.1.6
3.4 うまく動作しない場合
・ プログラムを実行してもMG400が動かない
解決方法:mg400_bringupを起動させながら、別ターミナルで
- rosservice call /mg400_bringup/srv/ResetRobot
を呼んだ後、再度プログラムを実行する。他にも、サービスをターミナルから直接呼ぶには「rosservice call <サービス名>」コマンドが使用できる。
・ エラーでLEDライトが赤くなり停止する
解決方法:MovJ などで指定した座標が可動域外でないか確認する。一時的なエラーの場合は、
- rosservice call /mg400_bringup/srv/ClearError
でエラーを取り除き、再度プログラムを実行する。
繰り返しエラーが起こるならば、DobotStudio Pro をつなぎながらエラーが発生するプログラムを実行し、エラー内容を確認してください。DobotStudioPro セットアップ方法はこちら。
・ 「/usr/bin/env: 'python\r': No such file or directory」と表示される
解決方法:改行コードを「LF」に変更する。
変更しても「/usr/bin/env: 'python': No such file or directory」と出る場合は、「python -V」でpython 3がインストールされていることを確認してから、実行するファイルの最上部にある「#!/usr/bin/env python」を「#!/usr/bin/env python3」に変更する。
3.5 プログラムの実行結果
今回作成したsample.py を実行させると、MG400が以下のように動くのが確認できます。
本稿では、ROSを利用したPythonのプログラムでMG400の実機を動かす方法をご紹介しました。