LoginSignup
3
3

【Simulink】Simulink Support Package for Raspberry PiでSunFounderを動かす(1)

Last updated at Posted at 2024-04-14

はじめに

Simulink Support Package for Raspberry Pi Hardwareを使用すると、Simulinkを実行しているコンピューターとRaspberry Piとの通信を簡単に行うことができます。
例えば、Raspberry Piボード上のGPIOやI2CをSimuinkから制御することが可能です。
本記事では、Simulink Support Package for Raspberry Pi Hardwareを使用して、Simulinkからロボットカー学習キットのSunFounder(Smart Video Car Kit V2.0 for Raspberry Pi)を動かしてみた例について紹介します。
Qiita記事「MATLAB Support Package for Raspberry PiでSunFounderを動かす」のSimulink版です。
分量が多いので、以下に示すように複数記事に分割して説明していきます。

  1. Simulinkモデル構造と実行制御部の説明
  2. 初期化処理サブシステムの説明
  3. 周期処理(ステアリング制御、前後進制御)サブシステムの説明
  4. ラズペリーパイへの展開

本記事では、「1. Simulinkモデル構造」について説明します。

想定読者

Simulink初級者から中級者レベルで、Simulink Support Package for Raspberry Pi Hardware の使用に興味のある方を想定しています。

開発環境

Simulinkモデル構造の説明

本記事では、「MATLAB Support Package for Raspberry PiでSunFounderを動かす」のSimulink版を作成しますが、次のような構造に分けて作成します。

  1. 下記2、3の実行制御部
  2. I2C接続のPWM/サーボドライバーPCA9685の初期設定部
  3. 操舵と前後進制御の周期駆動部

image.png

初期化と周期駆動の実行制御部

初期化と周期駆動の実行制御部のモデルを以下に示します。
初期化処理をInitialize Functionブロックに実装する方法もあると思いますが、本記事では、Switch Caseブロックを使用して、初期化と周期駆動のサブシステムの実行を選択するようにしています。
MainScheduler.png

初期化の実行制御

初期化の実行を制御するサブシステム内を以下に示します。
Function-Call Generatorブロックで、PCA9685の初期設定をするサブシステムの実行イベントを出力します。
また、初期化処理を実行した次のステップ以降、Switch Caseブロックで周期駆動のサブシステムを選択できるように、次状態(Case条件)を設定しています。
image.png

周期駆動の実行制御

周期駆動の実行を制御するサブシステム内を以下に示します。
Function-Call Generatorブロックで、操舵と前後進制御の周期駆動をするサブシステムの実行イベントを出力します。
image.png

実行制御用の列挙型

Switch CaseブロックのCase条件は、以下のような列挙型定義ファイルで設定しています。

enumMainScheduler.m
classdef enumMainScheduler < Simulink.IntEnumType    
    enumeration
		Initialize(1),
		PeriodicTask(2)
    end

    methods (Static)
        function defaultValue = getDefaultValue()
            defaultValue = enumMainScheduler.Initialize;
        end

        function dScope = getDataScope()
            dScope = 'Auto';
        end

        function desc = getDescription()
            desc = 'SunFounder動作確認用Simulinkモデルのスケジューラーで使用する名前';
        end

        function fileName = getHeaderFile()
            fileName = '';
        end

        function flag = addClassNameToEnumNames()
            flag = true;
        end
    end
end

次の記事に続きます。

3
3
0

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
3
3