[ロボ実験記録] Dobot magicianをpythonで動かす(シリアル通信ver&重要用語集)
Dobot magicianとは?
15万円程度で購入できる、お勉強用のロボットアームです。
ちょっと可動域が狭いですが、色々と遊ぶには十分な性能です。
Afrelという会社から購入しました。
関連サイト
代理店
ライブラリ
動かした例
制御ライブラリのインストール
追記: 以下の手法だと、シリアル通信に失敗し、うまくクラスを初期化できないできないことがあります。理由がまだ良くわかっていません。公式APIを使った方が、安定でしたので、こちらがおすすめです。
非公式ですが、dobotの操作をシリアル通信で行う、便利なライブラリが公開されています。
アームの簡単な操作をするだけなら、これを入れればOKです。
pip3 install pydobot
ロボットとの接続
ロボットとPCを接続後、ポートを探して、接続するだけです。
import pydobot
from serial.tools import list_ports
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=False)
現在の姿勢の取得
(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}')
各変数の意味は以下の通り
x,y,zはアームの位置
rはエンドエフェクタの回転状態
j1-j4は関節の回転状態
アームの移動
move_toで簡単に動かせます。
可動域外に座標を設定した時は、何も応答しないようです。
device.move_to(x+2 , y, z, r, wait=False)
移動速度を調整したり、エンドエフェクタのON/OFFを調整する機能もあるようです。
用語集
ロボットの勉強していて、ちょっと詰まった単語のメモを記します
エンドエフェクタ
ロボットの手先のこと。ものを掴んだりする部分
把持
掴むこと
QRコードのようなもの。画素数が低く、認識がしやすい
N軸ロボット
ロボットアームの可動部の数。Nが大きいほど、基本的にハイスペック
6軸くらいあると、かなり自由度が高いようです
dobot magicianは4軸
自己位置推定
自分がどこにいるのかを推定すること
ROS (Robot Operating System)
ロボット制御のためのライブラリ群
非同期通信などをいい感じに行ってくれるようで、業界のデファクトスタンダードの模様
奥行き方向も計測できるカメラ
点群
点の集まり
物体を3Dで認識したときに、物体を点の集まりとして認識する
点群に主成分分析(PCA)をかけて、掴む場所を決めたりするようです
次のタスク(予定)
Arucoマーカーを用いた位置推定