🐕

Universal Robotのシミュレーション環境を15分で 構築して動かすまで

2020/10/13に公開

書いてあること

  1. Universal Robot(UR)のシミュレーションソフト(URSim)をdocker上で起動する方法

  2. pythonとURsimの通信

書いていないこと

  • URについての概要
  • dockerのこと

なぜ書いたか

  • ursimとググって出てきたのがvirtual Boxでの環境構築だった。
    • 環境構築は手間がかかる作業。virtual Boxは結構難しく初心者は躓きやすい
  • pythonとursimについての具体的な通信について記事が見つけられなかった
  • ロボットアームなにもわからない、どうやって通信すればよいの?状態だった

想定読者

  • 研究や実験で実機動かす前にシミュレーションしたい人
  • 仮想ロボットアームで遊びたい人

1. Universal Robot(UR)のシミュレーションソフト(URSim)をdocker上で起動する方法

今回はdockerのレポジトリでursimを検索してドキュメントが一番多かったやつをpullします。

  1. windowsでもmacでもdockerをインストールします
  2. terminalでdocker pull arranhs/dockursimを実行
  3. terminalでdocker volume create dockursimを実行
  4. terminalで
docker run -d --name="dockursim" -e ROBOT_MODEL=UR5 -p 8080:8080 -p 29999:29999 -p 30001-30004:30001-30004 -v /path/to/mount/program/folder:/ursim/programs -v dockursim:/ursim --privileged  --cpus=1 arranhs/dockursim:latest

を実行
5.  http://localhost:8080 にアクセスするとシミュレーションを触れるようになる

2. pythonとURsimの通信

1の作業をすることで
localhostの8000ポートにURsimが起動しています。そのdocker imageの30002ポートでTCP通信を受け付けるようになっています。ポートフォワーディングで8000:30002されているイメージ?

  1. pythonをインストールします(anaconda等入ってればなにもしなくてよい)
  2. 以下のコードを貼り付けます
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import time

HOST = "localhost"
PORT = 30002

def toBytes(str):
    return bytes(str.encode())

def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    s.send(toBytes("movej([0,0,0,0,0,0], a=3.0, v=3.00)" + "\n"))
    time.sleep(3)
    data = s.recv(1024)
    s.close()
    print("Receved", repr(data))

if __name__ == '__main__':
    main()

  1. 実行します
    localhost:8000をみるとこのような姿勢になっているかと思います
  2. あとは色々パラメータをいじったりして遊びます。

参照

https://hub.docker.com/r/arranhs/dockursim
https://qiita.com/MrBearing/items/a09ab5751be9333cddc5

Discussion