🐕
Universal Robotのシミュレーション環境を15分で 構築して動かすまで
書いてあること
-
Universal Robot(UR)のシミュレーションソフト(URSim)をdocker上で起動する方法
-
pythonとURsimの通信
書いていないこと
- URについての概要
- dockerのこと
なぜ書いたか
- ursimとググって出てきたのがvirtual Boxでの環境構築だった。
- 環境構築は手間がかかる作業。virtual Boxは結構難しく初心者は躓きやすい
- pythonとursimについての具体的な通信について記事が見つけられなかった
- ロボットアームなにもわからない、どうやって通信すればよいの?状態だった
想定読者
- 研究や実験で実機動かす前にシミュレーションしたい人
- 仮想ロボットアームで遊びたい人
1. Universal Robot(UR)のシミュレーションソフト(URSim)をdocker上で起動する方法
今回はdockerのレポジトリでursimを検索してドキュメントが一番多かったやつをpullします。
- windowsでもmacでもdockerをインストールします
- terminalで
docker pull arranhs/dockursim
を実行 - terminalで
docker volume create dockursim
を実行 - 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されているイメージ?
- pythonをインストールします(anaconda等入ってればなにもしなくてよい)
- 以下のコードを貼り付けます
#!/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()
- 実行します
localhost:8000をみるとこのような姿勢になっているかと思います
- あとは色々パラメータをいじったりして遊びます。
参照
Discussion