<追記>進捗が出ておらず積みマイコンが1台生えたところで止まっているが、この件の方々は既成品を購入したとのこと。精密な動きが出来るものを作る能力があれば自分のおもちゃ制作に他人のお金を使えたということで自分の無能を大変後悔している。具体的にはハードのプロトタイプと動作イメージ確認のためのプログラムをさくっと作る能力もほしい。</追記>
ロボットアームを使って実験動物の手術をしてみたい人がいる。市販のものは少し大きいのと、自由度が足りないように見え、小さくて細かい動きが出来るものがあると便利だろう。
調べてみると自作している人はいるようで(リンク)、パルス波の周波数を変化させて角度を制御できるサーボモーターというものがあり、それで腕の角度を変化させるらしい。自作するとなるとモーター、アームの素材選びも必要だが、そもそもどう制御するかが分かっていないと手術をできるレベルのものは難しいだろう。以下はロボットアームの運動について調べものをしたメモ。
産業ロボットには水平多関節ロボットと垂直多関節ロボットがある。おそらく使いやすいのは垂直多関節タイプで、上で紹介した市販のものもそのタイプ。
運動についてはウェブの資料その1、その2、その3が分かりやすい。
資料その1
- ロボットの腕の長さ、角度を指定してその先端の位置を計算するのが順運動学
- ロボットの先端の位置を指定してから各関節の角度を決めるのが逆運動学
- 順運動学では床の関節から順に計算を進める。例えばn番目の関節まで含めて計算してから、n+1番目の関節を計算する。n+1番目、n+2番目でも同様の計算方法でよい。
- 座標変換を考えることで関節ごとに複雑な計算をしなくて良くなる。
- 同時座標$\begin{pmatrix}p_{n}\\1\end{pmatrix}$というものを使えば行列計算だけで計算が完結する。
- n+1番目のアーム先端の座標を計算するときは、をn+1番目の座標系から見たアームの先端方向、Rをその座標系を得る回転行列とすると、$\begin{pmatrix}p_{n+1}\\1\end{pmatrix} = \begin{pmatrix}R &p_{n}\\0 &1\end{pmatrix} \begin{pmatrix}r_{n+1}\\1\end{pmatrix}$として計算できる。
- 同時座標に掛けた行列を座標変換行列という。
- 座標変換については参考その1にも記載あり。
- DH(Denavit-Hartenberg)法というものが出てくるが、これは座標変換行列の計算を機械的にやりましょうという程度のもの
資料その2
- 座標変換行列は各関節の回転角で表されるため、先端の座標xは展開してやると$\bold{x}=f(\theta_{1},\cdots, \theta_{n})$のように表される。これを微分して出てくる$\displaystyle\frac{\partial x}{\partial \theta}$などが含まれる行列がヤコビアンと呼ばれている。
- ヤコビアンに逆行列が存在しない場合、先端の座標変化に対して各関節に必要な微小変化が求まらないことになる。そのような位置関係を特異姿勢という。
- 特異姿勢については参考その2が分かりやすい。
- 資料2にはロボットアームの先端にかかる力から各関節に必要な力を計算する方法もある
資料その3
- 2次元2自由度のロボットアームなら直接解ける
- それ以上だと数値計算になる(ヤコビアンを使う)
- 自由度を多めに取っていると余分に制約を加えないと計算できず、疑似逆行列を用いる
- 計算を簡単にするためにはロボットアームの設計時にアームの手首部分に3自由度を与えておくとよい。
参考
- https://core.ac.uk/download/pdf/46893969.pdf: 博士論文?こだわるならこの資料は多分よくまとまっているのだろう
- http://www.ee.saga-u.ac.jp/control/res_mech_rob/res_mech_rob.html: これを見るにロボットアーム自体の重量が重いと制御が大変になる模様
- Arduino、Raspberry Pi等で使える1000円以下の安サーボモータ比較~我々はどのサーボを使うべきか - nomolkのブログ
- Raspberry Piでサーボモータ(SG90)を制御する|Buffer Overruns
大体雰囲気が分かったがプログラムを書くのは面倒だな...(結構難しそう)。アームは直感に反しないように滑らかに動く必要もある。術野はとても小さそうなのでそもそもロボットアームが必要なのではなく、手の震えを拾わなければ何でも良いという感じもしてきた。