こちらのライブラリを使用して,PythonからDobot Magicianを動作させたいと思います.
環境
$ lscpu
Architecture: x86_64
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
install
以下コマンドでpipからインストールします.
pip3 install pydobot
自分の環境では以下のバージョンがインストールされました.
$ pip3 show pydobot
Name: pydobot
Version: 1.3.2
Summary: Python library for Dobot Magician
Home-page: https://github.com/luismesas/pydobot
Author: Luis Mesas
Author-email: luismesas@gmail.com
License: UNKNOWN
Location: /home/hoshina/.local/lib/python3.8/site-packages
Requires: pyserial
Required-by:
実行
まずdobotに電源を入れPCとUSBで接続し,dmesg
コマンドでデバイス名を確認します.確認するとcp210x converter
がttyUSB0
に割り当てられたと最終行に書いてあります.Linuxでは,デバイスは/dev/
ディレクトリ内に割り当てられるので(参考:https://qiita.com/nys9302/items/a8ddeedd3cd9d0deb332)
/dev/ttyUSB0
がDobotMagicianの割り当てられたファイル名となります.ちなみにPCから見るとDobotMagicianはProduct: CP2102 USB to UART Bridge Controller
という内容からCP2102 USB to UART Bridge Controller
という製品名として認識されていることが分かります.そして,基板上にUSB-UART変換コントロールCP2102チップ(参考:秋月電子 CP2102使用 USBシリアル変換モジュール https://akizukidenshi.com/catalog/g/gK-14993/ )が搭載されておりPCとのインターフェイスの役割をしているということが分かります.
$ dmesg
[43589.052023] usb 1-2: new full-speed USB device number 9 using xhci_hcd
[43589.232192] usb 1-2: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00
[43589.232207] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[43589.232213] usb 1-2: Product: CP2102 USB to UART Bridge Controller
[43589.232219] usb 1-2: Manufacturer: Silicon Labs
[43589.232223] usb 1-2: SerialNumber: 0001
[43589.241480] cp210x 1-2:1.0: cp210x converter detected
[43589.242146] usb 1-2: cp210x converter now attached to ttyUSB0
pydobotのサンプルをもとに作成した以下のプログラムを実行します.port名にはDobotMagicianのCP2102が割り当てられたファイル名を記載します.
from serial.tools import list_ports
import pydobot
available_ports = list_ports.comports()
print(f'available ports: {[x.device for x in available_ports]}')
port = available_ports[0].device
device = pydobot.Dobot(port=port, verbose=True)
(x, y, z, r, j1, j2, j3, j4) = device.pose()
print(f'x:{x} y:{y} z:{z} j1:{j1} j2:{j2} j3:{j3} j4:{j4}')
device.move_to(x + 20, y, z, r, wait=False)
device.move_to(x, y, z, r, wait=True) # we wait until this movement is done before continuing
device.close()
まずデバイスの読み書きを許可します.(参考:chmodコマンド https://atmarkit.itmedia.co.jp/ait/articles/1605/23/news020.html)
sudo chmod 666
そして実行します.
python3 basic_example.py
実行するとDobotMagicianが現在位置からx方向に20mm移動し,もとの位置に戻るという動作を2回繰り返します.
suction cup(ポンプ) の on/off
配線はポンプのシール記載の通り,ポンプGP1をMagician背面のGP1に,ポンプのSW1にGP1を接続
3秒ポンプを起動,し停止
from serial.tools import list_ports
import time
import pydobot
available_ports = list_ports.comports()
print(f'available ports: {[x.device for x in available_ports]}')
port = available_ports[0].device
device = pydobot.Dobot(port=port, verbose=True)
device.suck(True)
time.sleep(3)
device.suck(False)
エラー対処
通信がうまく行かない
-
usb device '/dev/ttyUSB*'が認識されていて以下のエラーが出た場合リセットボタンを押す
-
リセットや再起動をしても治らない。DobotStudioに接続もできない場合。以下の記事を参考にFirmwareを書き直す。
- あとDobotMagicianのファームウェアバージョンが最新(現時点ではv3.7.0)でないとうまく動作しない。v1.0.0では通信部分が不安定に。