MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

Lightning Talk の舞台裏:”動いたり光ったりする宇宙船の3Dプリントモデルのコード生成 ”

Posted by Michio Inoue,

こんにちは、井上です。寒くなってきましたね。

Lightning Talk @ MATLAB EXPO 2019 発表者特集第五弾!今回は MathWorks Japan テクニカルコンサルタントの Nicolas (ニコラ)が、業務外で取り組んでいる宇宙船の 3D プリントモデルについて熱く語ります。自宅に 4 台もの 3D プリンターが稼働しており、さながら工場の様相を呈しているそうな・・とんでもないエンジニアですね(誉め言葉)

ハンドコード無し、Coder 製品なし。Simulink から直接 Arduino に実装できる機能をフル活用して宇宙船を製造したお話です。どうぞ!

目次

  1. 背景
  2. 内部コンポーネント
  3. 航行灯
  4. メインエンジン
  5. Arduino へアップロード
  6. 操作
  7. まとめ

私にとって、時間が貴重です。 

仕事でも、プライベートでも、時間が貴重です。 

だから MATLAB を使います。 

1.背景 

もともと宇宙が好きです。そして、モノづくりも好きです。特に、数年前に 3D プリンターにはまってしまって、気づいたら家で 4 台が同時稼働していました。

マスワークスの現役エンジニアとして活躍しながら、3D プリンターを用いてどの店でも売っていない立派な 3D プリントモデルを作っています。そのモデルを YouTube(Epic Space Models)と Twitter (@EpicSpaceModels)で紹介しています。そして、2019 年のゴールデンウイークに行われた Maker Faire Kyoto で初めて出展させていただきました。

2019年の MATLAB EXPO で、次世代の再利用可能単段式スペースプレーン「スカイロン」の1/100スケールモデルを披露させていただきました。

 

2.内部コンポーネント

実は、この模型の中にたくさんの電子コンポーネントが搭載されています。

  • サーボモータ x 5(動翼、ペイロードベイドア)
  • 直流モータ +エンコーダ x 2(エンジンインテーク)
  • PWMによる明るさ調整可能なLED x 7 (航行灯、尾翼エンジン)
  • 3色LED x 8(メインエンジン)
  • Bluetooth, I2C通信
  • Arduino x 2

モータや LED を制御するには、同時に実行されるプロセス(いわゆる「マルチタスキング」)が必要です。直接に C++ 言語で書くことがなかなか大変ですが、Simulink でプログラムを作った場合に、Simulink は自動的にマルチタスキングを管理してくれます!

では、内部のプログラムがどのように構成されていますでしょうか。
スカイロンの中に、Arduino が 2 台搭載されており、モータや光の制御は 2 台に分散されています。1 台目(マスター)は Bluetooth から命令を受信し、I2C バスを用いて 2 台目(スレーブ)に転送します。それぞれの Arduino は自分が認識したコマンドを実行します。

図 1. マスターArduinoプログラム

図 1. マスター Arduino プログラム

図 2スレーブArduinoプログラム

図 2. スレーブArduinoプログラム

ここから内部の機能についてもう少し詳しく紹介します。

 

3.航行灯

航行灯(こうこうとう)は1.6 秒の周期で点滅します。最初は急に明るくなって、そしてゆっくりと消えます。

図 3. 航行灯

図 3. 航行灯

このように明るさを変えるために、Simulink の Rate Limiter ブロックを用いて明るさの上がり方と下がり方をコントロールします。最後に、Arduino Support Package の PWM ブロックを用いて信号を出力します。

図 4. 航行灯制御ロジック

図 4. 航行灯制御ロジック

 

図 5. 航行灯明るさ(上:パルス信号、下:Rate Limiter出口)

図 5. 航行灯明るさ(上:パルス信号、下:Rate Limiter出口)

 

4.メインエンジン

図 6. メインエンジン制御ロジック

図 6. メインエンジン制御ロジック

メインエンジンは NeoPixelという3色 LED を使用しています。Arduino サポートパッケージにはそれ用のブロックがまだ含まれていないので、System Object を用いてカスタムなドライバーブロックを作りました。

また、乱数を用いて明るさを変えて、LED をちらつかせることでよりリアルな光方が得られます。

図 7. メインエンジン点灯

図 7. メインエンジン点灯

 

5.Arduino へアップロード

いよいよ Simulink で作ったプログラムを Arduino に入れるときが来ました。Simulink の Build, Deploy & Start ボタンをクリックすると、Simulink のブロックで組んだプログラムがコンパイルされ、Arduino にアップロードされます。
プログラムを手でC++に書き直す必要がありません!

図 8. プログラムビルドとアップロード

図 8. プログラムビルドとアップロード

 

6.操作

スカイロンを操作するために、MATLAB の AppDesigner を用いてユーザインターフェイス (UI) を作成しました。UI から LED の色や明るいさを調節したり、サーボモータを動かしたりすることができます。

図 9 操作インターフェス

図 9 操作インターフェス

いずれかのボタンを操作したときに、Bluetooth 通信を用いて UI から指令が Arduino に送信されて、スカイロンが反応します。例えば、「Open Doors」をクリックすると、ペイロードベーの扉が開きます。

インターフェスの具体的な操作方法について、別のモデルにおいて以下の動画で解説しています。

 

7.まとめ

Arduino の IDE で C++ を書くに比べて、MATLAB/Simulink を使うことで以下のメリットが得られました。

  • ブロックを配線するだけで短時間でプログラムが書けます。
  • マルチタスキングとマルチレートプロセスが自動的に管理されています。
  • Simulink 上でシミュレーションとデバッグができます(通信プロトコルやフィードバック制御の調整に非常に便利)
  • AppDesigner を用いて、ユーザーインターフェイスを簡単に作れます。

C++ ハンドコーディングは完全に卒業しました!

もっと知りたい方は、ぜひ Twitter と YouTube でフォローをお願いします。


Nicolas さん、ありがとうございました!趣味の域を超えた・・というのはこういうものかと思い知らされました。

 

年に1度の Lightning Talkに限らず「私もこんなことやってみたよ」など披露の場を待っているネタがございましたらご連絡お待ちしております。是非ブログでも紹介させてください。

これまでのLightning Talk @ MATLAB EXPO 2019 発表者特集はこちらから:
– 第一弾:西垣様「Camera de Mouse」
– 第二弾:わたなべ様「お絵描きでMATLAB使ってます」
– 第三弾:朴木様「深層学習で板チョコの違いが分かるか」
– 第四弾:松木様「MATLABを通じた人材育成・組織改革」


 

439 views (last 30 days)  | |

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.