DOBOT公式のROSデモでDobot Magicianを制御する


ROSでDobot Magicianを制御したかったので色々と調べていたところ、公式からROSのデモパッケージが配布されているのを発見したので、ROSの勉強も兼ねて行ってみました。

環境

・VMware WorkStation Player
・Ubuntu20.04
・ROS Noetic

公式ROSデモパッケージをダウンロード

Ubuntu上でDOWNLOAD CENTERを開き、『ROS Demo for Dobot magician』をダウンロードしてください。

その後、ダウンロードしたフォルダを展開し、dobot_wsディレクトリをホームディレクトリに移動させてください。

デモパッケージをコンパイル

1.シリアルポートの操作権限を一般ユーザに割り当てる

usernameは自身のユーザー名に置き換えてください。

$ sudo usermod -a -G dialout username

2.dobot_wsディレクトリにパーミッションを割り当てる

$ cd ~/dobot_ws
$ sudo chmod 777 ./* -R

3.コンパイルする

$ catkin_make


dobot_wsディレクトリの中にbuild, devel, srcの3つのディレクトリが作られます。

ここまで来たらディレクトリ構造が下記のようになっているはずです。

4.dobot_wsの環境変数を追加

$ echo "source ~/dobot_ws/devel/setup.bash" >> ~/.bashrc
$ source ~/.bashrc

Dobot Magicianのシリアルポート名を調べる

UbuntuにUSBでDobot Magicianを接続する前と後の2回下記のコマンドを入力し、シリアルポート名を調べます。

$ ls /dev -l


私の環境では、USBでDobot Magicianを接続すると『ttyUSB0』という項目が増えていました。これがシリアルポート名です。

デモファイルを実行

1.ROSを起動

新しくターミナルを開き、下記のコマンドを入力してください。

$ roscore

2.サーバを立ち上げる

公式のROSデモではサービス通信でDobot Magicianを制御するため、サーバを立ち上げる必要があります。

さらに新しくターミナルを開き、下記のコマンドを入力してください。
ポート名の部分は自分の環境にあったものにしてください。

$ rosrun dobot DobotServer /dev/ttyUSB0


私の環境では確認できませんでしたが、公式解説書によると間違ったシリアルポートを入力すると文字化けしたコードが表示されるそうです。

3.コマンドを実行する

さらにさらに新しくターミナルを開き、下記のコマンドのいずれかを入力すると、Dobot Magicianが動き出します。

$ rosrun dobot DobotClient_JOG
$ rosrun dobot DobotClient_PTP

ROSデモパッケージの概要

処理の流れについて

このROSデモでは、ROSで一般的によく使われるトピック通信ではなく、サービス通信で制御する構成になっています。

~/dobot_ws/src/dobot/srcディレクトリにこれらのC++ファイルがあります。

JOG(Jogging)モード

JOGモードはエンドエフェクタを指定した方向に一定の速度で動かしたいときに使用します。

$ rosrun dobot DobotClient_JOG

上記のコマンドにより、JOGモードでDobot Magicianを操作することができます。
このコマンドを実行すると、キーボードの各キーに対応してDobot Magicianを動かすことができます。

注意してほしいのが、このコマンドを実行してキーを押すと、他のキーが入力されるかアームの可動域の限界に達するまで動き続ける点です。
特にIキーでアームを下に下げる場合、やりすぎると台座が浮いて本体ごとひっくり返る恐れがあるので慎重に実行してください。

PTP(Point to Point)モード

PTPモードは指定した座標にエンドエフェクタを移動させたいときに使用します。

$ rosrun dobot DobotClient_PTP

上記のコマンドにより、PTPモードでDobot Magicianを操作することができます。
こちらは特に操作の必要はなく、自動で(x,y,z,r)=(200,0,0,0)~(x,y,z,r)=(250,0,0,0)を往復し続けます。
止めたい場合はctrl-cを押してしばらく待っていれば止まります。