🌏

rosbridgeでmyCobotをつないでみた

2023/03/21に公開

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の姿勢が変化すれば動作確認成功です。

https://twitter.com/k_miura_io/status/1637321874345689089

まとめ

今回はmyCobotをrosbridgeで動かすことを確認できました。

今までROSはIPの設定を毎回設定する必要があると思ってましたが、Websocketでここまで簡単にアームを操作できるのはただただ感動しましたw。

何よりクライアント側がWebsocket使えるようになればOS問わず使えるのが魅力的ですね。

というわけで今度はrosbridgeを使ってロボットを操作するWebアプリを作ってみようと思います

Discussion