Open1

MacでmyCobotにファームウェアの書き込みをして動かすまで

toyoshitoyoshi

MacBook Pro (13-inch, M1, 2020), MacOS Big Surで確認。
myCobotのすべて を読みながらMacだけで完結できるようにしました。

ソースコードなどを取得

elephantrobotics/myCobot: myCobot is the World's Smallest Collaborative Robot Arm.をクローンする

git clone https://github.com/elephantrobotics/myCobot.git <your-path>
cd <your-path>/myCobot/API/Python
python3 setup install

を実行。python3 setup.py installで実行しました。

USBドライバーをいれる

CP210x USB to UART Bridge VCP Drivers - Silicon Labs

これでtty.SLAB_USBtoUARTとして認識されるようになります。

ファームウェアの消去と書き込み(この手順は不要)

/myCobot/Software/myCobot_firmware/inoにあるbinファイルを書き込みます。

% pip3 install esptool

#ファームウェアの削除
% esptool.py --chip esp32 --port /dev/cu.SLAB_USBtoUART erase_flash

#出荷時のファームウェア(ダイレクトティーチング)の書き込み
esptool.py --chip esp32 --port /dev/cu.SLAB_USBtoUART write_flash --flash_mode dio -z  0xe000 boot_app0.bin 0x1000 bootloader_qio_80m.bin 0x10000 MainControl.ino.bin 0x8000 MainControl.ino.partitions.bin

シリアル通信のためのファームウェアをいれる(Pythonで制御に必要)

ATOM Matrix(アーム先端のもの)

esptool.py --port /dev/cu.usbserial-1152503DF3 write_flash --flash_mode dio -z  0xe000 boot_app0.bin 0x1000 bootloader_qio_80m.bin 0x10000 AtomMain2.3.ino.bin 0x8000 AtomMain2.3.ino.partitions.bin

M5Stack

esptool.py --chip esp32 --port /dev/cu.SLAB_USBtoUART write_flash --flash_mode dio -z  0xe000 boot_app0.bin 0x1000 bootloader_qio_80m.bin 0x10000 Transponder.ino.bin 0x8000 Transponder.ino.partitions.bin

ファイルの書き換え

mycobot3.pyでデバイス名が指定されているので私の場合は書き換えが必要でした。Pythonに詳しくないのでオーバーライドの仕方などがわからず_protを直に上書きしました。

--- a/API/Python/pymycobot/mycobot3.py
+++ b/API/Python/pymycobot/mycobot3.py
@@ -26,9 +26,10 @@ class MyCobot():
     '''
 
     def __init__(self):
-        _prot = subprocess.run(['echo -n /dev/ttyUSB*'], 
-                                       stdout=subprocess.PIPE, 
-                                       shell=True).stdout.decode('utf-8')
+        _prot = '/dev/cu.SLAB_USBtoUART'
         _boudrate = '115200'

テスト動作する

REPL環境で動かしてみます。

$ipython3

In [2]: import mycobot3 as mycobot

In [3]: mycobot = mycobot.MyCobot()

In [4]: mycobot.power_on()

In [5]: mycobot.get_angles() #全サーボの角度を取得
Out[5]: 
[-37.89171974522293,
 132.64968152866243,
 152.25477707006368,
 -56.00636942675159,
 -94.92993630573248,
 46.031847133757964]

In [6]: mycobot.send_angles([0, 0, 0, 0, 0, 0], 10) #全サーボの角度を設定、速度は10。

これでアームが地面と垂直に真っ直ぐ伸びればOKです。

トラブルシュート

下記のようなメッセージが出る場合は権限が足りません

SerialException: [Errno 2] could not open port -n /dev/cu.SLAB_USBtoUART
: [Errno 2] No such file or directory: '-n /dev/cu.SLAB_USBtoUART\n'

下記のようにしましょう

$ sudo chmod 666 /dev/cu.SLAB_USBtoUART

参考にしたサイト