2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

Universal Robots向けのCLIツール作ってみた

目的

URを動かすためのツールを作ったので自慢したい

対象とする読者

この記事は仕事でUniversalRobotsのロボットを使う必要が出てきたプログラマ向けに書いています。

環境

  • コントロールボックス CB3.1 SW3.4
  • ロボット UR5
  • 言語 python3.6
  • 使用ライブラリ click

何を作ったか

スクリプトをコマンドラインから送ることのできるCLIツールを作りました。この記事で解説しましたが、Universal Robotsのロボットは外部からスクリプトでコントロールが可能です。

ロボットに送るスクリプトをコマンドラインから簡単にテストできるツールが欲しくて作りました。コマンドラインパーサーのclickを使って作ったので、ソース自体は数行でできました。

ソケット繋いで送るだけなので正直公開するか悩みましたが、とりあえずおいておきます。

もう少し機能を追加したら年内にはgithubで公開する予定です。。

アドベントカレンダー記事公開に間に合わなかった。。。

urscript_sender.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import time
import sys
import click


def to_bytes(script_str):
    return bytes(script_str.encode())


@click.command(help='UR script sending program')
@click.option('-p', '--port', 'port', type=int, default=30002, help='UR robot TCP port. 3002 is default. value between 30001 to 30004')
@click.argument('host',type=str)
@click.argument('file_path', type=str)
def send_script(file_path, host, port):
    with open(file_path, 'r') as file:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.connect((host, port))
            script = ''.join(file) ## 文字列連結
            print(script)
            s.send(to_bytes(script))


def main():
    send_script()


if __name__ == '__main__':
    main()

今後やること

  • Dashbord Serverにジョブコールに対応させる(Play Load等)
  • サブコマンドをもう少し充実させる
  • pipからインストールできるようにGithubで公開する
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
2
Help us understand the problem. What are the problem?