#目的
前回はロボットをスクリプトで制御する方法についてまとめましたが、今回はあらかじめティーチングペンダント(TP)で作ったプログラムを動作させる方法をまとめます。
#対象とする読者
この記事は仕事でUniversalRobotsのロボットを使う必要が出てきたプログラマ向けに書いています。(自分のメモ書き程度のつもりなので、詳しい解説など必要でしたらコメント欄にコメントいただけると助かります)
また、言語はpythonを使用していきます。pythonの解説に関しては他の記事や公式のドキュメント等を参照してください。
#環境
使用した環境を示します。
- コントロールボックス CB3.1 SW3.5
- ロボット UR5
- プログラム言語 python3.6
#方法
ロボットコントローラの29999番ポートにTCPでコネクションを張って、テキストでコマンドを送るとロボットがプログラムを実行します。用意されているコマンドは複数ありますが、単純なものについて解説します。
コマンド電文形式 | 戻り値の例 | 説明 |
---|---|---|
load <program.urp> | 成功時:Loading program: <program.urp> | あらかじめ作成されていたプログラムのロードを開始します |
play | "Starting program" | ロボットが他のプログラムを実行していない場合にはプログラムが実行される |
stop | "Stopped" | 実行中のプログラムを止める |
詳細はUR公式のリファレンス参照してください。
#プログラムを書いてみた
dashbord_server.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import time
import sys
HOST = "192.168.250.110" # ロボットのIPアドレス
PORT = 29999
PI = 3.1415926535
def toBytes(str):
return bytes(str.encode())
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
data = s.recv(1024)#コネクション確立後にURからメッセージが送られてくるのでRead
print("Receved", data.decode())
s.send(toBytes("load YOR_FILE_NAME.urp\n"))#YOR_FILE_NAMEはティーチングペンダントで作成したプログラム名に変える
data = s.recv(1024)
print("Receved", data.decode())
s.send(toBytes("play\n")) #プログラムの実行
data = s.recv(1024)
print("Receved", data.decode())
time.sleep(3)
if __name__ == '__main__':
main()
#まとめ
- URのDashbordServerの使い方をまとめた
リファレンスを見るとプログラムを実行中であるかを調べたり、コントロールボックスをシャットダウンしたりと結構色々できるみたいです。可能なら色々検証してみたいですね。
#参考文書