1関節ロボット上の加速度センサーデータ

以下の記事の元になっているのは、この論文
1関節ロボット、アイコメ0.1(外形はこちら)上におかれている3軸加速度センサーが転倒に対してどのように反応するかを調べてみた。
正直驚いた。ロボットに載せずに、机の上で動かしたりのシミュレーションはすでに行っていて、その結果も示しているが、その結果とは大きく違っている。
垂直に立てた状態から、手を離して、5度か10度自由に傾かせて、手で止めてまた垂直に戻すというのを3回やったデータである。止めたところは、およそ、ここで関節を固定させたらいいなと、私が判断した場所である。
(1)重力の誤差が小さい。Z(縦)方向のg(重力加速度)は1で、他はゼロが理論的に予想されるところだ。ほぼ、そんな感じだ。Y軸は、私がほぼ水平(すなわち棒が垂直に立っている)と思われるように調整しているが、前後の軸(X軸)は、丁寧に調整していないのでわずかにずれている。
(2)一度の揺れを感度良く捉え、たくさんのデータを輩出している。前の結果と比べてもらえば一目瞭然だ。サーボによる調整のトリガを出す上で、とてもわかりやすい。
ここで、理論的に予測される、臨界角度を調べてみよう。アイコメ01は10センチの横棒の中央から33センチの高さ(コンピュータが置かれているアルミ板までの高さ使う)だから、その比は6.6である。この場合の臨界角βは、ラディアンで0.075869、角度で4.346973501度であることがわかっている(この論文参照)。

すると、左の図からわかるように、Y軸方向の加速度は、sinθcosθであるから、重力加速度のsinθcosθになったときが垂直からの角度がθになったときであることがわかる。このθに0.075869を入れると、上記の値は、0.001324162となる。つまり、Y軸方向の加速度が絶対値で、0.001324162ときである。
もし、この理論値が正しければ、極めて初期の段階で、関節の固定が必要となることを意味している。
サーボモータに、こんなに微妙なコントロールは不可能であるから、実際上は、センサーが倒れ始めているデータを出し始めた途端、関節を固定化するようにサーボの角度を与えることが必要になる。

1関節ロボットによる逆振り子理論の検証

以下の記事の元になっているのは、この論文である
早朝から、アルミの板と棒を切ったり穴開けたりしながら、この間議論してきた理論を実証すべく、自由な関節を1個だけ持ったロボットを作った。たくさんのボルトやナットを使ったが、一時期、電子工作に凝っていたので、その時のものでほとんど間に合わせた。
「冷蔵庫にあるものでラーメンを作った」という感じのロボットだ。
いや、「これはロボットではない」と言われればあえて否定しないが、自分では、私が自分で作った最初のロボットの筐体だと思っている。脳はあるが、まだ知恵は何も入っていない。あえて名前をつければ、AiComedian ver.0.1 である。アイコメと呼ぼうか。
アルミの縦棒が机についているあたりに、アルミの横棒があり、それらをつないでいるのが横方向にだけ自由に回転する関節、ジョイントである。
横棒には、前後に倒れないように4ミリのアルミ棒が左右に二本つけられている。だから、この縦棒は、左右にしか動かないのである。
ただし、今こうして立っているのは、上部に二つのサーボモータがついていて、下の横棒との間に0.3ミリのステンレス線が張ってあるからである。
さらにその上には、コンピュータ( RaspberryPi)と3軸加速度センサー、I2Cによるサーボコントローラを乗せたアルミの板がある。
サーボは、水平角度を0度として運用しているが、およそであって、今の状態は、手前のサーボ(1番)がサーボの角度で0度、向かいのサーボ(0番)がサーボの角度で+3度でほぼ釣り合った状態になっている。サーボの角度を下向きに変化させると、縦棒は勢いよく倒れる。
C++で加速度センサーとサーボをコントロールするクラスを、それぞれに作ってあるので、センサーの検出した傾きから、サーボをコントロールして、逆さ振り子の状態を実際に創り出したいと思っている。
ことの成否は、転倒開始時に、加速度センサーがどんなデータを送ってくるかにかかっている。