LoginSignup
22
22

More than 3 years have passed since last update.

トランジスタ技術7月号「倒立振子」の制作記録

Last updated at Posted at 2019-07-05

記事の概要

2019年7月号のトランジスタ技術において特集されていたカルマンフィルタを利用した倒立振子を実際に制作しました。
他の方の制作に参考になればと、その制作記録をここに公開します。
作業工程を羅列しているだけなので、技術面の解説は本誌をご覧ください。

部品購入

部品リスト(PDF)に従って購入しました。

期間限定ですが、現代制御ロボティクス学習キット(限定生産)という便利なセットがあるので、そちらを利用するのもいいかもしれません。
あちらこちらを回って部品を集める手間が省け、CQ出版社調達のカップラのような、自力では入手が難しい部品も手に入ります。

(2020年7月に販売終了を確認)

マイコンボード

部品_マイコン.jpg 秋月電子にて購入 [STM32 Nucleo Board STM32F401](http://akizukidenshi.com/catalog/g/gM-07723/) 1個

加速度センサ・ジャイロセンサなど

部品_センサ.jpg

電解コンデンサ470uFはモータードライバの電源近くに配置するもので、記事中の回路図では220uFでした。
0.1uFと並列に接続されているので合成静電容量は、どちらでもほぼ0.1uFです。パスコンの役割を果たしていると思われます。
わざわざ電解コンデンサを入れる理由が分からずに調べたところ、ノイズ対策やアバランシェ破壊対策の為に、電源の近くになるべく大きいコンデンサを入れるそうです。
【復刻】ロボコン向けモータドライバの作り方 Vol.4
なるべく大きければいいということで、容量は適当に数百uFを選択すればいいと思われます。

モータードライバなど

部品_モータードライバ.jpg

単3電池は1.2Vの充電式ニッケル電池を4本使って4.8V(約5V)にします。1.5Vのアルカリ電池を使用すると電圧が6Vになってしまい、5Vレギュレータが必要になります。

写真の基板はサイズが小さすぎたので、自宅にあった以下の基板を使用しました。
140mm×95mmの片面基板です。

部品_基板.jpg

シャーシ

部品_基板.jpg

千石電商にて購入
ユニバーサルプレート 210×160 1個

ギア・ボックスとタイヤ

部品_モーター.jpg
  • タミヤ ハイパワーギアボックスHE 2個
  • タミヤ スポーツタイヤセット56㎜径 1個

千石電商 秋葉原本店にて購入。通信販売はしていませんが、Amazonなどでも購入できます。

XHコネクタ

部品_XH.jpg

細々と揃えるのが面倒だったので、AmazonでXHコネクタキットを購入しました。
実は今回このコネクタは使用していません。モーターと基板を接続するのに使用するはずでしたが、実際には、導線を接ぎ木のように足して、直接基板につけました。

LED、抵抗など

以下は自宅にある在庫を使用しました。

  • LED 赤、青、黄色 各1個
  • カーボン抵抗 220Ω 4個
  • カーボン抵抗 3.3kΩ 2個
  • カーボン抵抗 2.2kΩ 2個

カップリング

カップラ.jpg

千石電商にて購入
4Pカップリング

ロータリーエンコーダとギア・ボックスのシャフトを接続するのに使用します。
後述しますが、接続の際にはシャフト側に少しだけ工夫が必要になります。

スペーサーなど

スペーサー.jpg

秋葉原の専門店で購入。
基板とシャーシを固定するのに使用します。

電子工作道具

普段から電子工作をしている人には必要ないと思いますが、以下の道具を使用します。マルツパーツやAmazonなどの通販で全て揃います。

  • ハンダごて
  • ハンダ
  • ニッパー
  • 導線
  • ワイヤーストリッパー
  • 精密圧着ペンチ
  • ピンセット

傾斜計の作成

分割ロングピンソケットをマイコンボードにつけます。
傾斜計1.jpg

マイコンボードとセンサ用のICソケット6P を基板にハンダ付けして、配線をします。
傾斜計5.jpg
傾斜計4.jpg

センサにピンをハンダ付け
傾斜計2.jpg

内蔵プルアップ抵抗を有効にするためにJP4とJP5を接続。
3.3Vを有効にするためにJP7を接続。トランジスタ技術にはJP7とJP8を接続すると書いてあったのですが、データシートには、その組み合わせは存在しませんでした。

それと、ピンが邪魔で作業しづらかったので、この作業はピンをつける前にすべきでした。
傾斜計3.jpg

傾斜計の動作確認

開発環境構築

mbedアカウントでオンラインの開発環境を利用します。
付録DVDの付記資料に従って進めます。

mbed 内の NUCLEO-F401RE のページ にアクセスし、「> Open Mbed Compiler」をクリックします。
mbed1.png

プラットフォーム名の「NUCLEO-F401RE」を選択し、新規からテンプレートを元にプロジェクト作成します。
私は試験毎に、新しいプロジェクトを作成しました。
mbed2.png

ST-Link driverをインストールします。
STSW-LINK009b.png

UART通信試験

付録DVDを参照して、UART通信ができることを確認します。
UART試験1.png

I2C Read/Write試験

付録DVDを参照して、センサとI2C通信ができることを確認します。
i2c_read_write試験.png

センサにchip ID要求命令を書き込み、応答を読み出せるか確認しています。

加速度センサ試験

付録DVDを参照して、加速度センサが正常に動作しているかを確認します。
加速度センサ試験.png

ジャイロ試験

付録DVDを参照して、ジャイロが正常に動作しているかを確認します。
ジャイロ試験1.png

センサ2000回測定

加速度センサから角度を2000回測定し、グラフ化します。
加速度計のヒストグラム.png

ヒストグラムは、正規分布の形になっています。
「測定雑音が正規分布に従っている」ことが分かったので、カルマンフィルタを適用する根拠になります。

データはTeraTermのログ機能を利用してテキストに保存しました。
計算とグラフ化はPythonを使用しています。

同様に、静止状態のジャイロセンサを2000回測定してばらつき具合を確認します。
ジャイロのヒストグラム.png

これも正規分布になっています。

カルマンフィルタ試験

雑誌に掲載されているカルマンフィルタを実装します。
USB接続部を上にして、なるべく角度を固定した状態で、前後左右上下に振ります。
その計測結果を見ると、正規分布になっており、加速度の激しい揺れによる角度変化が起きていません。
フィルタが正しく機能していることの証左であります。
傾斜計試験結果.png

倒立振子の作成

センサとカルマンフィルタが正常に機能していることが分かったので、次はいよいよ倒立振子を作成します。

ギア・ボックスの組み立て

基本的に付属の手順書通りに組み立てます。
組み立て時の注意点は以下の通りです。

  • ギア比は64.8:1を選ぶ
  • シャフトは2本あるが、両端に穴が開いているタイプを選ぶ
  • シャフトの通し穴は2つあるが、真ん中の穴に通す
  • シャフトの固定位置を、内側が穴のギリギリになるようにする
ギアボックス_シャーシ.jpg

タイヤを取り付けます。
ギアボックス_シャーシ2.jpg
ギアボックス1.jpg
ギアボックス_シャーシ3.jpg
ギアボックス_シャーシ4.jpg

ロータリーエンコーダとギア・ボックスの接続

シャフトとロータリーエンコーダを接続するのにはカップリングを使用します。
シャフトの径は細すぎて固定ネジが届かないので、ギアボックス付属のナットを使って径を太くします。
ギアボックス_シャーシ5.jpg

カップリングを仲介して、シャフトとロータリーエンコーダを接続します。
ギアボックス_シャーシ6.jpg

スペースの固定には適当にスポンジを挟みました。
ギアボックス_シャーシ7.jpg

シャーシの下から7番目の穴の高さにギアボックスを取り付けて、両端2ヶ所をネジとナットで固定します。
ギアボックス2.jpg

配線

雑誌の回路図通りに配線します。

配線1.jpg 配線2.jpg

写真はまだグランドとモーターの配線はしていない時のものです。

配線は単純な作業ですが、5時間ほどかかりました。
キットを購入すれば、専用基板が用意されているので、この手間が省けます。
配線をしながら回路構成を何度も確認するので勉強になりますが、手配線は大変で、ミスによる動作不良も起きやすくなるので、カルマンフィルタの学習に専念したい方はキットを購入する価値があると思います。

組み立て

組み立て.jpg

ギアボックス、ロータリーエンコーダ、基板、電池ボックスを組み立てます。
基板をシャーシに固定するのは、ギアボックス付属のネジを使用しました。
電池ボックスは、取り付け用のネジ頭が平たいものがなく、臨時でテープで貼り付けて固定しました。後でキチンと固定します。

モーターはコネクタで接続するのではなく、ハンダで直付けしました。
モーターは青い線をモータードライバのOUT1に、赤い線をOUT2に接続しました。
モーターには極性があるので、反対に接続すると、サンプルプログラムの出力も反対にしないといけないはずです。そうしないと意図しているのと逆方向に回転してしまいます。

ロータリーエンコーダのコネクタの長さが足りず、裏で導線で接ぎ木のように伸ばしています。
また、ノイズ対策に、モーターとセンサに0.1uFを追加してあります。

動作確認

作成した倒立振子にサンプルプログラムInverted_Pendulum_Kalman.cppを書き込んで動作確認します。

電池は充電式のニッケル電池1.2Vを使用しています。アルカリ電池を使用すると1.5Vなので4本で6Vになってしまいます。

直立させた状態で電源スイッチを入れ、黄色LEDが点灯してから消灯するまで固定します。
(調整不足のせいだと思いますが、やや手前に倒しておくと、その後の動作が安定しました。)

私の場合、以下のように、不安定ながらも倒れずに動作しました。
モーターやセンサーまわりに配線不良のないことが分かりました。
ただ、赤色LEDが点灯しないので、何が原因か調査する予定です。

今後の予定

倒立振子を作成して動作するところまでは確認しました。
次は実際に自分で倒立振子のシミュレーションをして、パラメーターを求める予定です。
力学モデルも自分の作成した倒立振子に合わせて計算しなおしたいです。

また、雑誌後半の理論面の解説記事を実際に計算しながら読んでいきたいと思います。

新しく進捗や発見があれば、また別途記事にしたく思います。

22
22
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
22