Openmanipulator-xをProcessingで動かしてみたかった

# はじめに
こんにちは、しがない高校生をしているBasalteと申します。
今日は少しRobotis製品を触ってみたという記事です。
Openmanipulator-xやDiynamixelなどのRobotis製品は、製品の3DデータやROSのパッケージなどのオープンソースが数多く公開されています。
その中でもROSを使わない方法でOpenmanipulator-xを制御をしてみたかったので、Processingを使う環境を構築していきます。
まだ動いたわけではないので、自分用の備忘録として残しておきます。うまくいったらその時にまた更新します。

# 環境
・Intel MacOS sonoma
・Arduino IDE 2.2.1
・Processing 3.5.4
こちらの公式サイトに3.4.5で動作するという記載があったのでこちらを使用します。(最新は4.3)

# Arduinoの構築(完了)
まず、Arduino IDEにボードを追加する必要があります。
左上のメニュー画面から、
Arduino IDE > perferences...
のsettingsの画面の下の方にURLを記述する欄があるので、こちらを追加します。
```
https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/arduino/opencr_release/package_opencr_index.json
```
次に、OpenCR用のライブラリをインストールします。
左上の Tools > Board: > Board Manager...
するとライブラリのリストがたくさん出てくると思うので、OpenCRを選択してInstall

最後に
File > Examples... > OpenManipulator > Chain > Open_Manipulator_Chain
を選択して書き込むとモーターを制御する下準備は完了です。

ちなみにですが、OpenCRの電源を落とすときや違うプログラムをOpenCRに書き込むときは必ずアームに手を添えるか地面に降ろしておくべきです。急にモーターの制御が止まるとアームが地面などに落下して衝突するからです。


# 現状(12/2現在)
今のところ動いていないです。
エラーがいくつか出ているので今後解決していきます。
今は出ているエラーと解決した(?)エラーを備忘録しておきます。

## Serial関連のエラー
```
Please, Set On Controller
[0] "/dev/cu.Bluetooth-Incoming-Port"
[1] "/dev/cu.URT0"
[2] "/dev/cu.usbmodemFFFFFFFEFFFF1"
[3] "/dev/tty.Bluetooth-Incoming-Port"
[4] "/dev/tty.URT0"
[5] "/dev/tty.usbmodemFFFFFFFEFFFF1"
Error, disabling serialEvent() for /dev/tty.usbmodemFFFFFFFEFFFF1
null
```
こちらのエラーは
```
connectOpenCR(5); // Inside the brackets depends on a laptop enviroment.
```
この(5)の部分がデフォルトでは(0)になっているので、これを上のログの中からOpenCRが接続されている番号に書き換えましょう。多分治ります。

## 描画関連のエラー
OPENGLを使うな、setup()の中でsize()を使うななどといった警告が出てきますが、
そもそも描画がされないのでなんとも言えない状態です。
Javaのバージョンの問題かOPENGLの依存の問題かなと思っていますが、あまり深く確かめられていません。

## .objが読み込まれない(?)
この辺りは自分が知識がなく、よくわからないので突っ込みすぎる前に寝かせています。
今の所、次のようなコードで
```
/*******************************************************************************
* Get shape
*******************************************************************************/
void initShape()
{
  goal_link1_shape       = loadShape("meshes/chain_link1.obj");
  goal_link2_shape       = loadShape("meshes/chain_link2.obj");
  goal_link3_shape       = loadShape("meshes/chain_link3.obj");
  goal_link4_shape       = loadShape("meshes/chain_link4.obj");
  goal_link5_shape       = loadShape("meshes/chain_link5.obj");
  goal_left_palm_shape   = loadShape("meshes/chain_link_grip_l.obj");
  goal_right_palm_shape  = loadShape("meshes/chain_link_grip_r.obj");

  ctrl_link1_shape       = loadShape("meshes/chain_link1.obj");
  ctrl_link2_shape       = loadShape("meshes/chain_link2.obj");
  ctrl_link3_shape       = loadShape("meshes/chain_link3.obj");
  ctrl_link4_shape       = loadShape("meshes/chain_link4.obj");
  ctrl_link5_shape       = loadShape("meshes/chain_link5.obj");
  ctrl_left_palm_shape   = loadShape("meshes/chain_link_grip_l.obj");
  ctrl_right_palm_shape  = loadShape("meshes/chain_link_grip_r.obj");

  ctrl_link1_shape.setFill(color(200));
  ctrl_link2_shape.setFill(color(200));
  ctrl_link3_shape.setFill(color(200));
  ctrl_link4_shape.setFill(color(200));
  ctrl_link5_shape.setFill(color(200));
  ctrl_left_palm_shape.setFill(color(200));
  ctrl_right_palm_shape.setFill(color(200));

  setCtrlJointAngle(0, 0, 0, 0);
  gripperOff();

  receive_gripper_pos[0] = 0.030 * 1000 ;
  receive_gripper_pos[1] = receive_gripper_pos[0] * (-2);
}
```
以下のようなエラーに遭遇します。
```
User
Unsupported format: meshes/chain_link1.obj
Unsupported format: meshes/chain_link2.obj
Unsupported format: meshes/chain_link3.obj
Unsupported format: meshes/chain_link4.obj
Unsupported format: meshes/chain_link5.obj
Unsupported format: meshes/chain_link_grip_l.obj
Unsupported format: meshes/chain_link_grip_r.obj
NullPointerException
```
正直自分もよくわかっていないので、しばらくは大人しくROSを使う方法の構築をやってみます。
どなたかわかる方がいらっしゃれば教えていただけると幸いです。