『LEGO 部品と Arduino を利用した「倒立振子」の開発レシピ ― やっぱりモノを動かしてみたいでしょ！』のサポートページ

![title2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/8cf96169-4665-74a4-e36a-a226389a74aa.jpeg)


 <!-- ********************************************************* -->
# <font color="#0084B4">1. はじめに</font>
 <!-- ********************************************************* -->

　ここは，[システム制御情報学会](https://www.iscie.or.jp/)の学会誌「[システム/制御/情報](https://www.iscie.or.jp/pub/journal)」における解説記事

:::note warn
川田昌克：[LEGO 部品と Arduino を利用した「倒立振子」の開発レシピ ― やっぱりモノを動かしてみたいでしょ！](https://doi.org/10.11509/isciesci.68.3_84)，システム/制御/情報，Vol.68, No.3, pp.84-89 (2024)
:::

のサポートページです．<b><font color="#0084B4">本記事を参考にされた場合は，参考文献に記載していただければありがたいです（この URL を含む）．</font></b>

　学会員以外の方は，無料の[アーカイブ](https://www.jstage.jst.go.jp/browse/isciesci/list/-char/ja)を刊行から半年後（2024 年 3 月に刊行なので，おそらく 2024 年の 9 月頃）に閲覧することができます．3 月に読みたい方は，会員になってください！（大学だと，図書館で購入しているかもしれませんよ．）

====> [こちら](https://doi.org/10.11509/isciesci.68.3_84)で公開されました！

　本記事の執筆のきっかけは，2022 年 5 月に開催された SCI'22（第 66 回システム制御情報学会研究発表講演会）での発表です．そのときのプレゼンについては，以下に公開していますので，興味があればご覧ください．

https://www.youtube.com/watch?v=MfhpdYHZtJ0

　なお，工作などの一連の作業はすべて自己責任でお願いします！


 <!-- ********************************************************* -->
# <font color="#0084B4">2. 実験動画</font>
 <!-- ********************************************************* -->

　まずは，実験動画をみてみましょう！

https://qiita.com/Carter/private/fbb82bb32f276cc99dfd





 <!-- ********************************************************* -->
# <font color="#0084B4">3. 使用した部品</font>
 <!-- ********************************************************* -->
　ここでは，実験装置の製作に使用した部品について説明します．
 
 <!-- ********************************************************* -->
## <font color="#0084B4">3.1　LEGO 部品</font>
 <!-- ********************************************************* -->

https://qiita.com/Carter/private/bff8fb5397e217707558

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/f2b82235-16ca-133c-51ae-7fd00e4a1ca0.png)




 <!-- ********************************************************* -->
## <font color="#0084B4">3.2　マイコンとモータ，センサ</font>
 <!-- ********************************************************* -->
### <font color="#0084B4">3.2.1　MinSegShield M2V5 を使用する場合の部品</font>
 <!-- ********************************************************* -->

　円安で随分とお高くなりましたが，お財布に余裕がある場合は，こちらが楽です．解説記事では，こちらの構成を利用しています．

https://qiita.com/Carter/private/7d4842327b97920b1db7

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/559400d2-e078-b640-c5e4-ce09117e6371.png)


 <!-- ********************************************************* -->
### <font color="#0084B4">3.2.2　MinSegShield M2V5 を使用しない場合の部品</font>
 <!-- ********************************************************* -->

　お財布が厳しい場合は，こちらをお勧めします．純正の Arduino Mega を購入しても，合計 1 万 2 千円程度でマイコン部を構成することができます．

https://qiita.com/Carter/private/e05464f09ed87a020a1b

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/ebc29543-23d5-ed41-a860-6204a7fc43ae.png)



 <!-- ********************************************************* -->
## <font color="#0084B4">3.3　その他の部品</font>
 <!-- ********************************************************* -->

https://qiita.com/Carter/private/20ed4bb3179f611a439b

 

 <!-- ********************************************************* -->
# <font color="#0084B4">4. 組み立て</font>
 <!-- ********************************************************* -->
## <font color="#0084B4">4.1　LEGO 部品を使って組み立てよう！</font>
 <!-- ********************************************************* -->

https://qiita.com/Carter/private/91189f879fec1245f164

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/d1108ea0-c4d2-54b3-6745-48b6174648ad.png)



 <!-- ********************************************************* -->
## <font color="#0084B4">4.2　少しだけ電子工作しよう！</font>
 <!-- ********************************************************* -->

 <!-- ********************************************************* -->
### <font color="#0084B4">4.2.1　共通事項</font>
 <!-- ********************************************************* -->

https://qiita.com/Carter/private/74940a34d260b23ccfa2



 <!-- ********************************************************* -->
### <font color="#0084B4">4.2.2　MinSegShield M2V5 を使用する場合の電子工作
 <!-- ********************************************************* --></font>

https://qiita.com/Carter/private/0a6dd74750d1a5b748d4


 <!-- ********************************************************* -->
### <font color="#0084B4">4.2.3　MinSegShield M2V5 を使用しない場合の電子工作</font>
 <!-- ********************************************************* -->

https://qiita.com/Carter/private/da6784482e6c90b64dc8




 <!-- ********************************************************* -->
# <font color="#0084B4">5. 配布する MATLAB/Simulink ファイル</font>
 <!-- ********************************************************* -->
## <font color="#0084B4">5.1　RASPLib + Simulink Support Package 用</font>
 <!-- ********************************************************* -->

　MinSegShield M2V5 を使用する場合（[<font color="#0084B4"><b>3.2.1</b></font>](), [<font color="#0084B4"><b>4.2.2</b></font>](https://qiita.com/Carter/private/0a6dd74750d1a5b748d4)），MinSegShield M2V5 を使用しない場合（[<font color="#0084B4"><b>3.2.2</b></font>](https://qiita.com/Carter/private/e05464f09ed87a020a1b), [<font color="#0084B4"><b>4.2.3 (b)</b></font>](https://qiita.com/Carter/private/da6784482e6c90b64dc8#b%E6%8C%AF%E5%AD%90%E7%94%A8%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%80%E3%81%AE%E7%B5%90%E7%B7%9A-rasplib-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88-)）のいずれであっても，

 * [RASPLib (Rensselaer Arduino Support Package Library)](https://jp.mathworks.com/matlabcentral/fileexchange/62702)
 * [Simulink Support Package for Arduino Hardware](https://jp.mathworks.com/matlabcentral/fileexchange/40312)
 
 を併用して Simulink モデルを実装することができます．
 
https://qiita.com/Carter/private/f35dc63a07190f076eaf



<!-- ********************************************************* -->
## <font color="#0084B4">5.2　Simulink Support Package 用</font>
<!-- ********************************************************* -->

　MinSegShield M2V5 を使用しない場合（[<font color="#0084B4"><b>3.2.2</b></font>](https://qiita.com/Carter/private/e05464f09ed87a020a1b), [<font color="#0084B4"><b>4.2.3 (c)</b></font>](https://qiita.com/Carter/private/da6784482e6c90b64dc8#c%E6%8C%AF%E5%AD%90%E7%94%A8%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%80%E3%81%AE%E7%B5%90%E7%B7%9A-simulink-support-package-%E3%81%AE%E3%81%BF%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88-)），
 
 * [Simulink Support Package for Arduino Hardware](https://jp.mathworks.com/matlabcentral/fileexchange/40312)
 
 のみで Simulink モデルを実装することができます．
 
https://qiita.com/Carter/private/6d625d60c08bf09240d0



<!-- ********************************************************* -->
# <font color="#0084B4">6. MATLAB/Simulink ファイルの実行例</font>
<!-- ********************************************************* -->

　ソフトウェア環境については，[<b><font color="#0084B4">付録</font></b>](https://qiita.com/Carter/items/f64d6236005be6d9d931#%E4%BB%98%E9%8C%B2%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E7%92%B0%E5%A2%83)を参照してください．

　Simulink モデルを実行する前に，以下の事項を確認してください．
 
:::note alert
<b>確認事項</b>

* <b>AC アダプタ</b>を Arduino Mega に接続してください．
* <b>MinSegShield M2V5 を使用する場合</b>は，スイッチを以下のように設定してください．
     * Driver Enable：ON 側
     * Driver Voltage：BATT 側
     * Battery Switch：ON/OFF のいずれでも可（乾電池を使用しないこと） 


:::



<!-- ********************************************************* -->
## <font color="#0084B4">6.1　動作確認</font>
<!-- ********************************************************* -->

<!-- ********************************************************* -->
### <font color="#0084B4">6.1.1　アーム用エンコーダの動作確認</font>
<!-- ********************************************************* -->

https://qiita.com/Carter/private/7d16369428144e1dfa36

<!-- ********************************************************* -->
### <font color="#0084B4">6.1.2　振子用エンコーダの動作確認</font>
<!-- ********************************************************* -->

https://qiita.com/Carter/private/a6bedce64da2bc9d47fb

<!-- ********************************************************* -->
### <font color="#0084B4">6.1.3　モータの動作確認</font>
<!-- ********************************************************* -->

https://qiita.com/Carter/private/8889551c213f346b92aa


 
<!-- ********************************************************* -->
## <font color="#0084B4">6.2　回転型倒立振子の数理モデル</font>
<!-- ********************************************************* -->

https://qiita.com/Carter/private/0dec8516d3997401a2a6
 
<!-- ********************************************************* -->
## <font color="#0084B4">6.3　アーム駆動系のパラメータ同定</font>
<!-- ********************************************************* -->

https://qiita.com/Carter/private/35e596a67f255d9eb9cc
 
 <!-- ********************************************************* -->
## <font color="#0084B4">6.4　振子系のパラメータ同定</font>
 <!-- ********************************************************* -->

https://qiita.com/Carter/private/85f754800dcb6244310f

 <!-- ********************************************************* -->
## <font color="#0084B4">6.5　レギュレータ制御</font>
 <!-- ********************************************************* -->
 <!-- ********************************************************* -->
### <font color="#0084B4">6.5.1　クレーンの振れ止め制御</font>
 <!-- ********************************************************* -->

　この内容は本解説記事には未掲載です．

https://qiita.com/Carter/private/f040f2574b9d22ee2ffa

![block_crane.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/6f02e9fc-e769-d73d-4c80-d6c079e7bb9f.gif)


 <!-- ********************************************************* -->
### <font color="#0084B4">6.5.2　倒立振子の安定化制御</font>
 <!-- ********************************************************* -->

https://qiita.com/Carter/private/689c31f475e28221ed05

![block_ip.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/8cd791b8-e300-24ac-ef5c-ec10c6e5a645.gif)


 
 
<!-- ********************************************************* -->
## <font color="#0084B4">6.6　倒立振子の目標値追従制御</font>
<!-- ********************************************************* -->

https://qiita.com/Carter/private/b8163a46c5177ae4da73

![block_ip_servo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/5ef51bd6-9cf5-0e62-e231-cf48b8c79ad9.gif)



<!-- ********************************************************* -->
## <font color="#0084B4">6.7　外乱補償</font>
<!-- ********************************************************* -->

　ここでは，岡島らにより提案されている<font color="#0CA274"><b>モデル誤差抑制補償器 (MEC: Model Error Compensator)</b></font> により外乱補償を行います．MEC に関する詳細は，たとえば，

* [岡島：モデル誤差抑制補償器を用いた既存制御系のロバスト化，計測と制御，Vol.62, No.3, pp.168-175 (2023)](https://doi.org/10.11499/sicejl.62.168)
* [モデル誤差抑制補償器](https://sites.google.com/view/model-error-compensator)

を参照してください．また，MEC と外乱オブザーバの関係については

<!-- *********************************************************
* [松井，綾野：外乱オブザーバの実装法について，電気学会研究会資料，CT18022, pp.77-80 (2018)](https://www.bookpark.ne.jp/cm/ieej/detail/IEEJ-CT18022-PDF/)
********************************************************* -->

* [川田：零点と不安定極をもたない 2 次系に対する外乱オブザーバとモデル誤差抑制補償器の関係について，計測自動制御学会論文集，Vol.60，No.2，pp.101-103 (2024)](https://www.jstage.jst.go.jp/article/sicetr/60/2/60_101/_article/-char/ja) <br>…… 会員外は 2025 年 2 月末に web 上で閲覧可能


で議論されています．

<!-- ********************************************************* -->
### <font color="#0084B4">6.7.1　外乱補償されたレギュレータ制御</font>
<!-- ********************************************************* -->

　この内容は本解説記事には未掲載です．
 
https://qiita.com/Carter/private/c558d1060234a9ad7eaf

![block_ip_mec.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/32244674-8c35-934d-b3d5-e13535ebfe4f.gif)

<!-- ********************************************************* -->
### <font color="#0084B4">6.7.2　外乱補償された目標値追従制御</font>
<!-- ********************************************************* -->

https://qiita.com/Carter/private/3e37957017ee342ec043

![block_ip_servo_mec.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/15bc0aab-8a96-6a2d-03d3-0c98afa28504.gif)

 
<!-- ********************************************************* -->
## <font color="#0084B4">6.8　倒立振子の振り上げ安定化制御</font>
<!-- ********************************************************* -->

https://qiita.com/Carter/private/3e84edddc501664b03b3
 
 <!-- ********************************************************* -->
# <font color="#0084B4">7. おわりに</font>
<!-- ********************************************************* -->

　本記事では，LEGO / Arduino / Simulink を利用して倒立振子を開発しました．なお，以下の方々が本実験装置のレプリカを製作されています．皆さんも是非，チャレンジしてみてください！

* <b>山口大学</b>

https://twitter.com/atouch_11/status/1657298564870197254


* <b>熊本大学</b>

https://twitter.com/control_eng_ch/status/1724750504394473957

* <b>大阪大学</b>

https://twitter.com/yuki373/status/1774304256117600511




<!-- ********************************************************* -->
# <font color="#0084B4">付録　ソフトウェア環境</font>
<!-- ********************************************************* -->

<!-- ********************************************************* -->
## <font color="#0084B4">A.1　インストール</font>
<!-- ********************************************************* -->
　本解説記事では，Windows11 でバージョン R2023a の

* MATLAB
* Simulink
* Control System Toolbox

に加えて，Arduino 用の無償の Simulink パッケージ（ライブラリ）

* Simulink Support Package for Arduino Hardware
* Rensselaer Arduino Support Package Library (RASPLib)

を使用して，制御系解析/設計および実機実験を行いました．Simulink Support Package や RASPLib のインストール方法については，

https://qiita.com/Carter/items/cc7faa5084aa4a69f4e7

を参照してください．


<!-- ********************************************************* -->
## <font color="#0084B4">A.2　Simulink Support Package for Arduino Hardware の使い方</font>
<!-- ********************************************************* -->

https://qiita.com/Carter/items/5526a72d05f90d073377