rosbridgeでmyCobotをつないでみた
myCobotで遊んでいてROSで動かす方法も試していました。myCobot単体で動かしてもいいですが、せっかくROSで動かすなら遠隔操作も試したいところです。
ただ、毎回遠隔操作のためにIPアドレスを環境変数で設定するのは手間がかかります。
IP変更が面倒だと思ったときにたまたま仕事でrosbridgeを知りました。rosbridgeを使えばWebsocketで簡単にトピックをpub/subできるようになります。
これを使えばmyCobotも遠隔で簡単に操作できるのでは?と思ったので、今回はrosbridgeでmyCobotをつないでみたいと思います。
動作環境
今回の動作環境は以下の通りです。myCobot Pi 280には予めROSがインストールされており、ROSで動かすためのパッケージもインストールされています。M5 Stack版でROSを使う場合はこちらを参考に環境構築をします。(M5 Stack版は手元にないので検証はできていません)
- myCobot Pi 280(OS: Ubuntu 18.04, ROS: Melodic)
- Websocket Clientを動かすPC(OS問わず)
- Websocket Client(今回はChromeの拡張機能にあるWebsocket Clientを使いました Broser Websocket Client)
rosbridgeのインストール
rosbridgeはRaspberry Pi版にはセットアップされてないので、以下のコマンドでインストールします。
sudo apt install ros-melodic-rosbridge-server
インストールが完了したら、rosbridgeを起動します。ここではデフォルトで入っているWebsocketサーバーを起動するlaunchファイルを使います。
roslaunch rosbridge_server rosbridge_websocket.launch
myCobotのノードを起動
rosbridgeのWebsocketサーバーが起動したところで、myCobotを制御するノードを起動します。
myCobot Piには予めパッケージがセットアップされているので、Raspberry Piのターミナル上で以下のコマンドでノードを起動します。
rosrun mycobot_280 slider_control.py _port:=/dev/ttyAMA0 _baud:=1000000
このノードは元々簡単なスライダを使って各関節の角度を制御するノードと実機を連携させるために使いますが、今回はスライダーで関節をコントロールする部分をrosbridge経由でWebsocketで操作するイメージです。
Websocketで動かしてみる
ここまででmyCobotをWebsocketで動かすための準備ができたので、実際にWebsocket経由でmyCobotを動かしてみます。
最初にWebsocketで接続するためのIPアドレスを確認します。
ip a
後は ws://【myCobotのIPアドレス】:9090
でWebsocketクライアントに接続できれば通信は問題ないです。
接続ができたら以下のメッセージを送信してアームの姿勢を指定します。
{
"op": "publish",
"topic": "/joint_states",
"type": "sensor_msgs/JointState",
"msg": {
"header": {
"stamp": {
"secs": 1679200120,
"nsecs": 106875896
},
"frame_id": "",
"seq": 48212
},
"name": [
"joint2_to_joint1",
"joint3_to_joint2",
"joint4_to_joint3",
"joint5_to_joint4",
"joint6_to_joint5",
"joint6output_to_joint6"
],
"position": [
0.6,
-0.5,
0.6,
0.5,
0.6,
-0.5
]
}
}
以下の動画のようにmyCobotの姿勢が変化すれば動作確認成功です。
まとめ
今回はmyCobotをrosbridgeで動かすことを確認できました。
今までROSはIPの設定を毎回設定する必要があると思ってましたが、Websocketでここまで簡単にアームを操作できるのはただただ感動しましたw。
何よりクライアント側がWebsocket使えるようになればOS問わず使えるのが魅力的ですね。
というわけで今度はrosbridgeを使ってロボットを操作するWebアプリを作ってみようと思います
Discussion