3Dプリンターでロボット作ってみる 多脚ロボット編14
前回
このロボットの3Dデータは下のリンクのものを使用しています
このロボットをある程度歩かせることに成功したので、これからは電源を内臓して独立して動けるようにしていきます。
まずは電源として電池の搭載
サーボモータの電源としてエネループ4本、Arduino駆動用に9V電池をマジックテープのベルトで搭載します。
サーボモータを動かすときにガタつく傾向があったので電解コンデンサーをサーボモータ電源に追加します。
基板とArduinoを搭載するスペースが無いので、搭載用のパーツをつくります。
まずロボットのネジの間隔を定規で測ってFusion360で設計、このときネジ穴はM3なので余裕をみてφ4mmで設計します。
それを3Dプリンターで出力します。
完成したものは特に問題なくロボットに取り付けることができました。
これで問題無く動くはずなのですが・・・
どうやら電池を搭載したことで重心の位置が変わってしまったようです。
サーボモータの動きにも不審な点があるので、今後は煮詰めて行きます。
3Dプリンターでロボット作ってみる 多脚ロボット編13
このロボットの3Dデータは下のリンクのものを使用しています
makezine.jp昨日から引き続き上のサイトを参考に逆運動学をプログラミング
そしてようやく前足が動きました
3Dプリンターでロボット作ってみる 多脚ロボット編13 逆運動学の実装
逆運動学を解いて、右前足を一直線に動かしています。
サーボモータのガタが大きいですが、これで逆運動学をしっかり実装できていることがわかります。
なかなか動かなかったのでExcelで検証したりしたかいがありました。
問題は左足です。
左足はロボット右側をx軸の基準にすると180度付近をロボットの足が動きます。
すると角度を計算するときに逆三角関数Asin Acos Atanが180度を超えたところで負の値に切り替わってしまい、プログラミングが難しくなります。
そこで座標系を右側と左側で変えることにしました。
これなら三角関数の問題は生じません。
これでようやくロボットが歩くようになりました。
3Dプリンターでロボット作ってみる 多脚ロボット編13 テスト歩行
まだ基板や電源がロボットに載っていませんし、足先が滑っています。またサーボモータの制御が甘いせいで動きがガタついています。
しかしこれで一つの山を越えることができました。
今後は基板と電源をロボットに搭載することと、制御を滑らかにすることを目標にします。
3Dプリンターでロボット作ってみる 多脚ロボット編12
このロボットの3Dデータは下のリンクのものを使用しています
昨日の続きでArduinoをいじってて気付きました。
昨日Arduinoにはアークコサインが実装されていない。
なんて大嘘書きました。
されてました。
avr-libc: <math.h>: Mathematics
Arduinoの解説ページArduino - Hにはアークタンジェントしか説明が無いのですが、そこからさらにリンクでArduinoのベースになってるAVRマイコンのページに、アークコサインがしっかり書いてありました。
こんなことに気付くのにこれまた時間を随分浪費してしまいました。反省です。
3Dプリンターでロボット作ってみる 多脚ロボット編11
このロボットの3Dデータは下のリンクのものを使用しています
ハードウェアが形になったのでソフトウェアをつくっていきます。
とりあえずの目標は、「スイッチを入れたらロボットが前進する」という動作ができることにします。
ロボットの歩かせ方で参考にしたのはこのサイト
makezine.jp
とりあえずこのサイトを参考にする場合に必要なのが運動学と逆運動学。ロボット系の書籍には大体書いてありますが、要は手足の先の位置と関節の角度の関係を表す方法です。
こういう図を見たことがある人も多いと思います。
関節が二つあるロボットの腕、又は脚をモデルにしたもので、
という数式で表すことができます。これをこのまま逆にしてxとyを入力すると関節の角度が出てくる方程式を作ってもいいのですが、結構ややこしいので今回は簡略化します。
右端が足先、左が脚の根元として、この問題は脚の根元から足先までの距離Lを求め、距離Lを実現するための角度θ1を求める問題になります。
足先までの距離Lは
で座標から簡単に求めることができます。
ここでLをl1,l2で表すと
sinとcosが消えて
これを変形して
足先の位置と脚の長さがあれば、角度を表せることがわかりました。あとはこれを逆三角関数に入力すれば角度を求めることができます。
ここまでやってさて実装してみようとArduinoIDEを開いたのですが、重大な問題に気付きました。Arduinoにはアークコサインが実装されていない。
無いものは作るしかありません。
cos関数は実装されているので数値を比較することで段々目的の角度に近づけるアルゴリズムをわざわざ実装してつくりました。
Acos 0.5 = 60deg
top 0.00 , buttom 180.00
top 0.00 , buttom 90.00
top 45.00 , buttom 90.00
top 45.00 , buttom 67.50
top 56.25 , buttom 67.50
top 56.25 , buttom 61.88
top 59.06 , buttom 61.88
top 59.06 , buttom 60.47
top 59.77 , buttom 60.47
top 59.77 , buttom 60.12
top 59.94 , buttom 60.12
top 59.94 , buttom 60.03
top 59.99 , buttom 60.03
top 59.99 , buttom 60.01
top 60.00 , buttom 60.01
top 60.00 , buttom 60.00
top 60.00 , buttom 60.00
top 60.00 , buttom 60.00
top 60.00 , buttom 60.00
top 60.00 , buttom 60.00
top 60.00 , buttom 60.00
top 60.00 , buttom 60.00
top 60.00 , buttom 60.00
60.00deg
結構計算を無駄にやっている感じがしますが、実際に答えを出力してくれるようになったので問題ありません。
この関数ができた後、ふと数学は専用のヘッダーファイルとかがあるのでは?という考えにようやく至り、検索してみたした。
ありましたアークタンジェント
これがあるならアークサインもアークコサインも出せますね。
結局ほぼ丸一日棒に振ってしまいました。
3Dプリンターでロボット作ってみる 多脚ロボット編10
このロボットの3Dデータは下のリンクのものを使用しています
www.thingiverse.comどうにもサーボモータの一つの動きがおかしい
コネクターの辺りを触ると動いたり動かなかったり
これはひょっとしてコネクターがガタガタになってるのかなと思ってコネクターを交換してみました
でも直らない
いろいろ試しても直らず、これはもうサーボモータを交換するしかないかと思って配線を外している最中に基板を裏返したらこの通り
GNDの線のハンダが外れているだけでした
たったこれだけのトラブルですが、解決に何時間もかかってしまいました。
「基板のハンダはそうそう簡単に外れたりしない」という思い込みのせいで随分時間を無駄にしてしまいました。
思い込みはダメですね。あとハンダ付けはしっかりしないといけません。
3Dプリンターでロボット作ってみる 多脚ロボット編9
something-make.hatenablog.comこのロボットの3Dデータは下のリンクのものを使用しています
www.thingiverse.com前回はArduino 日本語リファレンスを参考にサーボモータ制御プログラムを書いたのですが、サーボモータが二つ動いていませんでした。
どうにもおかしいのでいろいろと調べた結果、出てきたのは
Arduinoのデジタル出力は0番と1番のRX TXを極力使用しないこと
要はこの0番と1番はチップの書き込みなんかに使用したりもしているので、使用すると不具合が生じる可能性が高いということ。
実際0番と1番の使用をやめて2~13番のデジタル出力を使うようにしたら問題は解決しました。リファレンスに書いてなかったんですが、界隈では常識みたいですね。
まさかこんなに簡単に解決できるとは思っていませんでした。
これでプログラムを書いていくことができます。
3Dプリンターでロボット作ってみる 多脚ロボット編8
something-make.hatenablog.comこのロボットの3Dデータは下のリンクのものを使用しています。
とりあえず適当な角度で電源を投入してみました。
サーボモータが二つほど動いていません。
他のサーボモータはしっかり動いているのに謎です。
明日は原因を探っていきたいと思います。