Internship 2026.07.27-08.07 / シーケンス株式会社

シーケンス 生産実習 — MATLAB/Simulinkで学ぶモデルベース開発

大学の生産実習で、シーケンス株式会社のMBD事業部に10日間お世話になりました。テーマは「MATLAB/Simulink モデルベース開発体験」。講義で解いてきた数式が、現場ではどんな道具になっているのかを確かめにいきました。

MBD 試作する前に、計算機の中で走らせる

初日に教わったのがモデルベース開発(MBD)という考え方です。実物を作る前に計算機上でモデルを組み、その挙動を確かめてから実機に落とす。自動車のように試作に費用も時間もかかる分野ほど、この進め方が効いてきます。

開発の流れはV字開発で説明されました。左側で要求を細かい仕様へ分解し、右側で組み上げながら検証していく。その検証を、モデルだけで行うのがMILS、実際のマイコンを繋いで行うのがHILSです。どの段階で何を確かめるかが決まっているから、手戻りが小さくて済むのだと理解しました。

Ten Days 10日間の登り方

一日の流れは決まっていて、午前はその日のテーマを座学で学び、午後はひたすら手を動かす。終業前に生産実習ノートへ気づきと翌日の課題を書いて締める、の繰り返しでした。題材は日を追うごとに、物理 → 機械・電気 → 自動車へと近づいていきます。

Day 1-3
MATLABの基礎、
自由落下・水平投射、
フーリエ変換
Day 4-6
Simulinkへ。機械系・
電気系・振動、
DCモータのPWM制御
Day 7-10
ABS・電子スロットル
などの自動車制御、
最終日はチーム開発

Matrix 線形代数が、道具に変わった瞬間

前半で印象に残ったのは、自由落下と水平投射を差分法でコードに起こす課題です。連立方程式をそのまま行列に置き換えると、逆行列から一瞬で答えが返ってくる。 講義で解いていた線形代数が、その場で道具に変わった感覚がありました。

一方で反省もあります。難しく考えすぎて、本来もっと短く書けるコードを冗長にしてしまう場面が何度もありました。解き方を知っていることと、素直に書けることは別物でした。

続く信号処理では、フーリエ級数展開で正弦波を重ねていくと波形が矩形波に近づいていき、逆にFFTでは波を成分へ分解できることを確かめました。仕上げに、ノイズの振幅へ疑似乱数を与えてデジタル通信のアイパターンとビットエラーレートをシミュレーションしています。

Simulink 式を、ブロック線図で描く

中盤からはSimulinkです。信号源・ゲイン・積分器といったブロックを繋いで、自由落下や水平投射、マス・バネ・ダンパの機械系、RC・RLC回路の電気系を線図で表現していきました。

水平投射のSimulinkブロック線図
水平投射のモデル。上段が水平方向、下段が鉛直方向で、加速度を2回積分して速度と変位を出し、XY Graphで軌跡として描かせています。

ここで覚えた勘所が変数変換でした。回路方程式をそのまま線図に起こすと配線が絡まって読めなくなるのに、一度式を置き換えてから組むと、驚くほどすっきりまとまる。 線図の見やすさは、ブロックの並べ方ではなく式の形で決まるのだと分かりました。

その後は1・2自由度の振動、フレミングの法則、DCブラシ付モータの電動と発電、PWM制御へ。上半身と下半身をマス・バネ・ダンパで表した人体力学モデルや、少林寺の体術を題材にしたKungfuモデルまで、題材の幅がとにかく広い実習でした。

作業中にPCが固まってMATLABが2回落ち、書いていたものが消えました。こまめに保存する、という当たり前のことを、身をもって覚えた日です。

Vehicles 仕様書という「言葉」からモデルを起こす

後半は一気に実車へ近づきます。サスペンションや直進走行車両のモデリングでは、数式ではなく仕様書の文章からモデルを起こす作業を体験しました。ABS、真理値表からの論理回路、RAMデータの読み込みと処理も扱っています。

さらに、アイドル回転数制御・燃料噴射・電子スロットル・点火時期制御・排気バルブタイミング制御という自動車の5系統へ。電子スロットル制御と坂道発進を含む簡易自動車システムでは、発進から徐々に加速して約500秒で時速85kmに達する挙動をグラフで確認できました。

ここではサブシステムへブロックを入れ忘れる同じミスを何度か繰り返しました。自分で抱え込まずに周りへ相談したほうが早い、というのも、この10日間で学んだことの一つです。

Team 最終日、自動販売機の中身をモデルにする

最終日は4人チームでの成果発表です。題材に選んだのは自動販売機の清算システム。誰にとっても身近なのに、中で何が起きているかは意外と知らない、という理由でした。

投入金額と商品番号を入れると、1次元ルックアップテーブルが価格表から価格を読み取り、比較(≧)ブロックで買えるかどうかを判定する。買えるなら「投入金額 − 価格」でお釣りを返し、足りなければ low balance を返す、という作りです。

自動販売機の清算システムのSimulinkブロック線図
チームで作った清算モデル。投入金額150円・商品番号7の場合、価格と比べて足りなければ「low balance」が、足りていればお釣りが表示されます。

いちばん苦戦したのは、お釣りという数値と「low balance」という文字を、同じ出口から出さないといけないところでした。データ型が違うので繋がらない。To Stringブロックで型をそろえて、ようやく一つの表示にまとまりました。

ブロックを繋げば動く、と思っていたけれど、
実際には「何が流れているか」を揃えないと繋がらない。

価格表の設計、判定ロジック、表示部、発表資料と役割を分けて、進み具合をこまめに共有しながら一つのモデルにまとめました。

Takeaway 持ち帰ったもの

数式は、
紙の上で解くもの
数式は、
動かして確かめる設計図

10日間を通して、MATLABとSimulinkという2つの手段を、物理現象から自動車制御まで一通り当てはめられるようになりました。それ以上に大きかったのは、大学で学んでいることが現場と地続きだと分かったことです。

答えを渡さずに、自分で気づけるまで待ってくださった講師の高橋様・立川様をはじめ、社員の皆様にお礼を申し上げます。