← サンプルアプリ一覧へ

倒れない二輪ロボット

車輪 2 つだけで立っているロボットです。何もしなければすぐ倒れますが、1 秒に 100 回「どっちに傾いているか」を測って車輪を動かし、倒れずに立ち続けます。押したり、センサーを遅くしたりして試してください。

ロボットの頭の中

この 3 つを 1 秒に 100 回くりかえしている

  1. 1測るセンサーで、体がどっちに何度傾いているか、どれくらいの速さで倒れかけているかを測る
  2. 2決める傾き・傾く速さ・目標地点までの距離・自分の速さの 4 つに重みをかけて足し、車輪を押す力を決める
  3. 3車輪を回す決めた力でモーターを回す。倒れる側へ車輪を走らせると、体が起き上がる

本物のロボットでは

ステップ本物ではこうするこのリポジトリ
測るジャイロと加速度センサー(IMU)で測る。どちらもノイズやずれがあるので、2 つを混ぜて本当の傾きを推定する(カルマンフィルタなど)04_estimation
決める4 つの重みは、ロボットの運動方程式から計算しておく(LQR という方法)。PID 制御で作ることも多い02_dynamics
03_control
車輪を回すモーターに流す電流を変える。出せる力には上限があるので、強く押されすぎると立て直せない03_control
遅れセンサー・計算・通信には必ず遅れがある。シミュレーションで立てても、実機で倒れる原因の代表07 (予定)

同じしくみで動いているもの

  • セグウェイや電動一輪車(乗っている人ごとバランスをとる)
  • ドローン(放っておくとひっくり返るので、1 秒に数百回姿勢を直している)
  • 二足歩行ロボット(片足で立つ瞬間は、この二輪ロボットと同じ状態)
  • ロケットの垂直着陸(細長い機体を立てたまま降ろす)

どれも「測る → 決める → 動かす」を高速でくりかえしています。これがフィードバック制御です。止まっているように見えても、ずっと小さく動いて立て直し続けています。