n-shinichi が 2022年05月07日10時28分26秒 に編集
初版
タイトルの変更
M5stickと連続回転サーボで倒立振子を作ってみた
タグの変更
倒立振子
M5StickC
連続回転サーボ
Arduino
カルマンフィルタ
SG90-HV
FS90R
BLE
メイン画像の変更
記事種類の変更
製作品
本文の変更
M5stickと連続回転サーボで倒立振子のラジコンを作ってみました。 https://www.youtube.com/watch?v=3wMUb-xvcFo 特徴 ・超簡単構成 ・・・ 基本ハード構成は M5stick、連続回転サーボ のみ。 他小物:3Dプリンタ製フレーム、サーボホーンにOリング付けたタイヤ等 ・スナップフィットで簡単組立、分解・・・ネジ、接着剤不使用です ・超小型:46g ・BLEを使ってラジコン操作 ・バランス、動作の状態を表情で表現 ・カルマンフィルタで高精度な角度推定 ・ギヤバックラッシュ処理 ・M5stickとサーボを角度をつけて組むことで、いい感じのデザインに♪ ・エンコーダなしでそこそこの位置制御 ![キャプションを入力できます](https://camo.elchika.com/3da6cf39844d4b2f031eb44a1aee35cc1c9b8308/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64626330626232342d616563392d346132392d613863382d3864363937643331373136342f31306666313633322d633966632d343266662d623538312d343262353631656566623338/) 概要 一般に倒立振子ロボ、駆動系はギヤモータ&モータドライバの組み合わせが 多いです。。。以前はその構成で作ってました...が、 ハード構成で少しハードルが上がります。 そこで・・・ できるだけ構成を簡単、低価格でできるようにしてハード製作を 小学生くらいでも簡単に作れるようなのを目指しました。 □連続回転サーボ ・・・ 秋月などで入手しやすく安いのは ★TowerPro製 SG90-HV デジタル制御です。 このデジタル制御方式、一般的なラジコンで"人の操作”に 対してサーボ動作は優れていて、低消費電力、保持力も高くていいです。 しかしながら倒立振子では100Hz程度で応答性が欲しいですが そういった動きに対応できるようには作られてないので難しいです。 これで最初作ってましたが立つには立つけど不安定です。 ★FeeTech製 FS90R 旧式のアナログ制御です。 こちらは高速まで 人の操作以上の高速な制御指令にもある程度 ついてきます。なのでこちらの方が今回の用途には合ってます。 ただし、アナログ制御なので消費電力は大きいです。 (ギヤモータ&ドライバ構成では50分程立ってられますがアナログ サーボでは現時点で24分が最高記録) □姿勢制御 ボデイーが小さくなれば振子周期が短くなり、高速な応答が必要で だんだん難しくなっていきます。 角度の検出は基本ジャイロのピッチ角速度の積分ですが、ESP32の 演算性能が高いのでカルマンフィルタを使ってちょっと精度をあげてます。 運動方程式の演算は50Hくらいでも立ちますが速くした方がいくらか 安定性が高まって100Hz辺りからはあまり変わり映えなかったので 100Hzでやってます。 小径タイヤでは路面の状態の影響を受けやすいですがパラメータを 調整して同じパラメータでカーペット、畳、フローリング、MDF板 の上で立てるようにしました。 カーペット・・・細く小さなOリングタイヤは若干埋まりぎみに なるので引っ掛かった感じに負荷が掛かってきます。 畳・・・・・・・畳の織りの畝が、小径タイヤでは無視できない 波路面になるので意外と難しいです。 フローリング・・ちょっと古めのフローリングだと合わせ板毎に 微妙なうねり、継ぎ目段差が小径タイヤでは影響あります。 MDF板・・・・ほぼ平らなので一番運動方程式通りに素直に立ちます...が、 ほんのわずかな傾きでも玉を置けば転がる方へ移動していきます。 https://www.youtube.com/watch?v=gT2x4kI1YeQ □位置制御 エンコーダがあればなんてことないのですが それも省いて簡略化した分、技術でカバーがやってて面白いとこです。 一般にモータの駆動は電圧に回転速度が比例します。 PWMで駆動してるとDutyが平均等価電圧になるので、結果、Dutyが 速度に比例してその積分で距離が計算できます。 しかし・・・ それは定速で動作してる場合はかなりの精度で計算できるのですが およそ倒立振子運動で振動してる場合は加速してる状態が多いので Dutyに加速度の要素が混ざってきます。 なので・・・ その辺の混ざり方はある程度実験しながら演算の調整です。 また・・・ 左右の車輪は同じ指令でも個体差で回転は微妙に違います。 たいていの場合、何もしないとボディーは回転していきます。 なので・・・ ジャイロのヨー角速度を積分、して回転しないよう左右の駆動輪に フィードバックを掛けて車体方向を安定させるように調整してます。 □らじこん BlynkのBLEを使ってます。 詳しくはこちらをご覧ください https://n-shinichi.hatenablog.com/