MyCobot 280 ハンドルコントロールガイド

# MyCobot 280 ハンドルコントロールガイド

## はじめに

Elephant Robotics の MyCobot 280 ロボットアームは、ゲームパッドを使用して制御でき、グリッパーや吸引ポンプを使用して精密な動きや物の操作が可能です。このガイドでは、ゲームパッドを使用したセットアップ、接続、および制御プロセスを説明し、その実装の実例を示します。

### ゲームパッドによる制御

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/138d94d5-11c3-50dc-efce-8e277499a619.png)


ゲームパッドのボタンは、MyCobot の動きや操作を制御するためにさまざまな機能にマッピングされています：

- **動きの制御:**
  - **1**: RX 方向の座標値を増加
  - **2**: RX 方向の座標値を減少
  - **3**: RY 方向の座標値を減少
  - **4**: RY 方向の座標値を増加
  - 
  - **5**: X 方向の座標値を増加
  - **6**: X 方向の座標値を減少
  - **7**: Y 方向の座標値を減少
  - **8**: Y 方向の座標値を増加
  - 
  - **9**: Z 方向の座標値を増加
  - **10**: Z 方向の座標値を減少  - 
  - **11**: RZ 方向の座標値を減少
  - **12**: RZ 方向の座標値を増加
  - 
  - **13**: ハンドルをウェイクアップ。接続後、長時間使用しないとスリープモードに入ります。このボタンを押してウェイクアップします。
  - **14**: 機械の接続状態を確認。Atom LED が緑に3回点滅すると機械が正常であることを示し、赤に3回点滅すると異常状態を示します。

- **グリッパーと吸引ポンプの制御:**
  - **X**: ボタンを押し続けると、顎が開き続けます
  - **Y**: ボタンを押し続けると、顎が閉じ続けます
  - **A**: 吸引ポンプを開く
  - **B**: 吸引ポンプを閉じる

- **ロボットの初期化とトルク制御:**
  - **左1**: 2秒間押し続けると、ロボットをジョイントゼロ状態に初期化します
  - **左2**: 2秒間押し続けると、ロボットのトルク出力を停止し、全ジョイントをリラックスします
  - **右1**: 2秒間押し続けると、ロボットを初期位置に移動します
  - **右2**: 2秒間押し続けると、ロボットのトルク出力をオンにし、全ジョイントをロックします

### 参考資料。座標系の説明

MyCobot 280の座標系は、ロボットアームのベースを基準とした直交座標系（デカルト座標系）です。以下のように定義されています：

- X軸: ロボットアームの前方方向
- Y軸: ロボットアームの右方向
- Z軸: ロボットアームの上方向

座標系の原点は、ロボットアームのベースの中心にあります。これにより、エンドエフェクタ（ロボットアームの先端）の位置と姿勢を3次元空間で表現することができます。

エンドエフェクタの座標系について
エンドエフェクタの座標系は、エンドエフェクタ自体に固定された直交座標系です。これにより、エンドエフェクタの位置だけでなく、姿勢（回転）も指定できます。エンドエフェクタの座標は、次のように表現されます：

- X, Y, Z: エンドエフェクタの位置（ベース座標系に対する相対位置）
- Rx, Ry, Rz: エンドエフェクタの姿勢（ベース座標系に対する回転角度）

## 手順

### 1. デバイスの接続

MyCobot とゲームパッドをコンピュータに接続します。

### 2. 必要なライブラリをインストール

コードをダウンロードします：https://github.com/elephantrobotics/pymycobot

ターミナルを開き、`pymycobot/demo/handle_control` フォルダーに移動し、以下のコマンドを実行します。

```bash
pip3 install -r requirements.txt
```

### 3. ポート番号を変更

`handle_control.py` ファイルを編集します。

```python
import pygame
import time
from pymycobot import MyCobot
import threading
# コンピュータで検出されたポート番号に com7 を変更
mc = MyCobot("com7")
...
```

最後に、プログラムを実行します。

```bash
python3 handle_control.py
```

> 注：プログラムを実行した後、最初に **14** ボタンをクリックして機械の接続状態を確認します。機械の接続状態が正常であることを確認したら（異常な場合、他の操作はできません。まず異常接続の問題を解決してください）、**右1** ボタンをクリックして、機械が初期位置に達してから他の操作を行うことができます。

## 参考資料

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/85056352-4cba-0dbd-c9d4-fc5dc3d38f89.png)

## 座標制御

座標制御は、逆運動学アルゴリズムの制御方法です。逆運動学とは、ロボットのエンドエフェクタの座標位置が既知の場合に、各ジョイントのパラメータ（角度）を計算するプロセスを指します。これにより、ロボットのエンドの座標を調整することでロボットを動かし、現在の状態でのロボットのジョイント角度のパラメータを計算することができます。

左側のボタンは理解しやすく、空間内でロボットアームの端の位置に対応し、上下左右に直線的に動きます。つまり、ロボットアームの端は空間内で前後左右上下に移動し、主に直線的な動きとなります。デカルト座標系では、「Rz, Ry, Rx」は通常、z軸、y軸、およびx軸周りの回転を表します。これらの回転は通常、右手の法則に従います。つまり、右手の4本の指が回転方向に曲がる場合、親指が指す方向が回転軸の方向です。

一般的には：

● "rz": z軸周りの回転。これにより、ロボットアームの端がx-y平面内で回転し、エンドエフェクタのヨー角が変わります。

● "ry": y軸周りの回転。これにより、ロボットアームの端がz-x平面内で回転し、エンドエフェクタのピッチ角が変わります。

● "rx": x軸周りの回転。これにより、ロボットアームの端がy-z平面内で回転し、エンドエフェクタのロール角が変わります。

簡単に言えば、これはロボットアームがx, y, z軸周りで回転することを意味します。
Operation video
https://youtu.be/8JBhk55pz8I

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/3300220e-70bf-44d1-ea72-89623e50b3dd.png)