MDDを用いた組込みシステム開発の実践

MDD を用いた組込みシステム開発の実践
指導 清水尚彦 教授
東海大学電子情報学部コミュニケーション工学科
2ADT1211 水野 嘉久
平成 18 年 2 月 6 日
1
3.8.2
シナリオ . . . . . . . . . . . . .
19
3.8.3
シーケンス図 . . . . . . . . . .
21
3.8.4
ステートマシン図 . . . . . . . .
22
3.8.5
クラス図 . . . . . . . . . . . . .
22
. . . . . . . . . .
24
3.10 飛行情報の受信 . . . . . . . . . . . . .
24
3.10.1 方向:UDP 通信 . . . . . . . . .
24
3.10.2 位置:シリアル通信 . . . . . . .
27
3.11 プロジェクト管理の考察 . . . . . . . .
29
3.11.1 開発側の考察 . . . . . . . . . .
29
3.11.2 管理側の考察 . . . . . . . . . .
29
3.12 コンテスト結果を踏まえた考察 . . . .
29
目次
1
はじめに
4
2
MDA/MDD
4
2.1
MDA 概要 . . . . . . . . . . . . . . . .
4
2.1.1
モデルの区分け . . . . . . . . .
5
2.1.2
マッピング . . . . . . . . . . .
5
2.2
3
組込み MDD
. . . . . . . . . . . . . .
6
2.2.1
組込みシステム . . . . . . . . .
6
2.2.2
MDD での UML2.0 の活用 . . .
6
2.2.3
組込み MDD の問題 . . . . . .
6
3.9
提供システムの利用
MDD ロボットチャレンジ
7
3.12.1 モデル . . . . . . . . . . . . . .
29
3.1
チャレンジの概要 . . . . . . . . . . . .
7
3.12.2 飛行結果 . . . . . . . . . . . . .
30
3.1.1
飛行船制御システムの概要 . . .
8
3.13 ハードウェアの考察
. . . . . . . . . .
30
3.1.2
提供 API . . . . . . . . . . . .
8
3.14 MDD という開発手法についての考察 .
30
. . . . . . . . . . . . . . .
9
3.14.1 モデルの利用 . . . . . . . . . .
30
3.14.2 開発手法 . . . . . . . . . . . . .
30
3.15 スケジュール . . . . . . . . . . . . . .
31
まとめ
31
3.2
開発の前に
3.2.1
ロボットチャレンジ最終目標と
の比較 . . . . . . . . . . . . . .
9
開発システムの機能分割 . . . .
9
3.3
プロジェクト管理 . . . . . . . . . . . .
10
3.4
ハードウェアの設計と制御の戦略 . . .
11
3.4.1
ゴンドラの設計 . . . . . . . . .
11
A.1 超音波送信機 . . . . . . . . . . . . . .
33
3.4.2
飛行戦略 . . . . . . . . . . . . .
13
3.2.2
4
A 回路基礎:超音波送受信機
33
A.1.1 超音波センサの仕組み . . . . .
33
3.5
ソフトウェアモデル
. . . . . . . . . .
15
A.1.2 タイマー IC . . . . . . . . . . .
33
3.6
全体 . . . . . . . . . . . . . . . . . . .
15
A.1.3 Hex Invertar HD74LS04 . .
34
3.6.1
概念シナリオ . . . . . . . . . .
15
A.1.4 電圧レベルコンバータ . . . . .
35
3.6.2
概念図 . . . . . . . . . . . . . .
16
A.2 超音波受信機 . . . . . . . . . . . . . .
35
飛行船 . . . . . . . . . . . . . . . . . .
16
A.2.1 オペアンプ . . . . . . . . . . .
35
3.7.1
オブジェクト図 . . . . . . . . .
17
A.2.2 フォトカプラ . . . . . . . . . .
36
3.7.2
シナリオ . . . . . . . . . . . . .
17
A.3 距離の測定 . . . . . . . . . . . . . . .
37
3.7.3
クラス図 . . . . . . . . . . . . .
19
A.4 電源回路 . . . . . . . . . . . . . . . . .
37
3.7.4
シーケンス図 . . . . . . . . . .
19
A.4.1 3 端子レギュレータ . . . . . . .
37
3.7.5
ステートマシン図 . . . . . . . .
19
基地局 . . . . . . . . . . . . . . . . . .
19
3.8.1
19
3.7
3.8
オブジェクト図 . . . . . . . . .
2
B 回路基礎:赤外線送受信機
39
B.1 赤外線とは . . . . . . . . . . . . . . .
39
B.2 赤外線センサ回路 . . . . . . . . . . . .
39
B.2.1 赤外線受信モジュール . . . . .
39
B.2.2 2 段タイマー IC . . . . . . . . .
40
B.2.3 トランジスタ 2SC1815 . . . . .
41
B.2.4 赤外 LED . . . . . . . . . . . .
41
B.3 赤外線受信回路 . . . . . . . . . . . . .
42
B.4 LED での通信 . . . . . . . . . . . . . .
42
3
1
はじめに
F;
<+
719D:
近年ソフトウェア開発において、モデルを用いた開
発が注目されている。モデルを用いた開発でどのよう
719
A?C
なプロセスを踏めば効率が上がるか、現状の開発方法
58024,*6=E
から容易に転換できるか、現状のソフトウェア品質は
719
向上するのかなど議論されている。一部では、モデル
/*.-*3
を用いた開発事例の報告もあるが、少ないのが現状で
B+
>@
ある。組込みソフトウェア業界でもモデルを用いた開
発に事例が少なく、現在の開発システムからの移行を
図 1: 抽象度とプロセス
躊躇していることが多い。組込みシステムの開発は、
大規模化/複雑化し、システム全体から細かい要求まで
• UML
理解することは難しい。今こそ、研究による組込み開
モデルによって要求されたシステムを理解する。
発の事例を収集すること、これから組込み開発に携わ
ユースケース/クラス図/タイミング図/コンポジ
る者へのモデルを用いた開発教育が求められている。
ット図などの記述方法が定められている。近年
本稿は、この一年で学んだモデリング言語 UML2.0/
UML2.0 への進化で、モデル化できる対象が増え
プログラム/回路基礎、そして、これらを総合的に教
た。MDA では、CIM/ PIM/ PSM で用いる。
育題材とした「MDD ロボットチャレンジ」へ参加し
得た成果をまとめたものである。
• MOF
UML や各言語の相互運用性を確保するために、こ
2
MDA/MDD
2.1
れらを定義するために利用される。モデルのモデ
ルメタモデルを記述/拡張するための構成要素を
MDA 概要
定義し、管理するための規格である。
MDA(Model-Driven Architecture) はモデル駆動型
アーキテクチャーといい、OMG(Object Management
01.
Group) が標準化を推進しているモデル駆動開発であ
B>CA=B>C
る。OMG 標準は、オブジェクト指向モデリング言語
B>C
である UML(Unified Modeling Language)、メタモデ
7D<=D<
ル (UML で扱うモデル表現モデル) を管理するための
0- A=A=B>C
0, B>CFE
0* 20/
0+ 9@;8:?3>4=
65
仕様である MOF(Meta Object Facility)、データウェ
アハウス用のメタモデルを定義した技術仕様である
図 2: MOF 階層構造
CWM(Common Warehouse Meta-model)、MOF を
土台としたモデル情報を、ツール間でモデルを交換可
毎モデリングごとに、使うべきメタモデルが異なっ
能にするための技術仕様 XMI(XML Metadata Inter-
てくる。よって MOF では、要求仕様を、変換す
change) を持つ。
るのに都合に合わせなければならない。
4
• CWM
表 1: MDA モデル
データウェアハウス用のメタモデルを定義してい
る。CWM も UML で記述されているため、MOF
CIM
computinon independent model:
計算非依存モデル。システムの環
境や要件を表現したもの
PIM
platform independent model:プ
がベースとなっている。
• XMI
ラットフォーム非依存モデル。特
ツール間でのモデルの交換を行うために利用れる
定のプラットフォームに関する詳
これは、MDA を実現するうえで、XML を用いて
細を問わず、システムの運用を表
メタデータの交換を行うための仕様。
現したもの
MDA では、モデル作成からソースコード完成まで
PSM
platform specific model:プラット
フォーム依存モデル。特定のプラッ
トフォームに関する詳細を組み合
わせた表現したもの
PM
Platform Model:プラットフォーム
モデル。PIM と併用する、固有の
プラットフォームを構成する技術
概念、要素、サービスを定義した
もの
TM
Transformation Model:変換モデ
ル。特定の PIM から特定の PSM
への移行に必要な変換を定義・指
定したもの
の過程で、抽象度を明確にしたプロセスを踏むことが
大切である。
92
*+,
47
63
85
-+,
0/1
-.,
図 3: 開発プロセス
MDA では、要求定義→分析→設計→実装コード
といった開発の各工程に応じたモデルを規定してい
る (図 3)。関連するのは CIM(Computation Indepen-
dent Model)/ PIM(Platform Independent Model)/
MDA では、PIM と PSM を一つの設計過程モデル
PSM(Platform Specific Model)/実装 (ソースコード)
と考ず、抽象度の高い段階においては、要求や上位の
である。
ソフトウェアのフレームを決めればよい。そして、抽象
度の低い段階においては、実装する際のプラットフォー
2.1.1
モデルの区分け
ムに似合った、そして要求通りの性能や保守性が実現
MDA でのプラットフォームとは、OS(Windows/
することを踏まえなければならない。開発者側が設計
UNIX/ )/プログラム言語 (Java/ C/ )/製品 API な
の各段階で踏まえることを明確にすることで、作業ご
ど、様々な抽象度のものである。
とに必要な情報/ スキル/人的資源を効率よくを抑える
ことが出来るのだ。
抽象度の高い段階でモデルを用いることは、プラッ
トフォームフォームを想定した考えでなくてよい。抽
2.1.2
象度の低い段階では、既にプラットフォームに依存し
たモデルでなければならない。大きく分けて、この 2
マッピング
モデル間には、モデル変換仕様/ルールが必要にな
つの抽象度のモデルが定義される。
る。これをマッピングという。プラットフォームに依
前者を PIM:プラットフォーム非依存モデル、後者
存したマッピングルールを定義することにより、モデ
を PSM:プラットフォーム依存モデルと呼ぶ。
5
のため、制御したいハードウェアの仕様や性能がソフ
,*+
74680
トの組み方までも制約する。
9<.;:
2.2.2
,-+
74680
MDD での UML2.0 の活用
この現状を解決すべくモデルを活用した組込み開発
MDD の導入が提案された。MDD はモデルを活用す
る開発手法である。MDA も基本的な考えは同じであ
3/21/5
るが、MDD は抽象度が少し高いといえる。MDD は開
発にモデルを用いなければならないが、モデル言語は
図 4: マッピング
UML を使用しなければならないという制限や、明確
ル変換の自動化が可能になる。MDA はこのモデル変
な標準などがない。UML は 1∼2.0... へと進化し、モ
換の間のマッピングルールが重要であり、現在 MDA
デル言語 UML は要求分析の抽象度の高いレベルから、
を実現するためのモデル自動変換ツールが多く開発/
抽象度の低いレベルまで表現することが出来る。また、
利用されている。システム開発者は MDA ツールを利
ツールの仕様として UML が使われているため有効的
用した場合、PIM を UML で記述し、ツールが PIM
と考える。実際に市販されている変換ツールを作成/活
から PSM への変換する。自動/半自動生成によるモデ
用することも重要である。前提条件として、UML を
ル変換で、大幅な時間短縮につながる。PSM/ソース
使い慣れていることが必要である。
コード間にも変換仕様/ルールがあるが、PIM/PSM 間
:3>
同様、PSM/ソースコード間も自動/半自動生成が可能
である。ツールとマッピング定義のメリットは、一部
=5
仕様に変更があった場合は、PIM を修正することで対
8?
10*
/2+,-.
応したり、変更に従い設計図を修正、プラットフォー
ム一部に変更があった場合は、ソースコードを修正す
るのではなく、マッピングルールを変更することで、
変更を反映したソースコードが再度生成されることで
ある。
2.2
2.2.1
6<7
組込み MDD
49;@
図 5: 組込みシステムの現状
組込みシステム
表 2 に組込み MDD へのモデル適応例を示す。
組込みとは、家庭用電化製品、車載システム、携帯
電話など、コンピュータを組込んでいるシステムを指
2.2.3
す。とくに、組込みでは、普段使用する PC とは違い、
システムの制約がある。また、組込むものにより仕様
組込み MDD の問題
組込み MDD では考えなければならない課題が多い。
が異なり、動作プラットフォームが均一ではない。そ
例えば、日本の実装の多くが C 言語であるが、モデル
6
-+,
表 2: 組込みシステムでのモデリング効果
UNTI0P8O:2;1
S57FADH=
複雑なシステム
-.,
R43 * KL
↓
モデリングすることでし、携わる多くの開発者
@/>
の確実な理解が得られる。また、プラットフォー
VM6<EG?>9
ム依存/非依存性、デバイスに依存する仕様と、
B>C
そうでない仕様の分離出来る。
システムの流れの理解
JQ
↓
振る舞いや制約を付与することで、考えやすい
図 6: 組込み MDD プロセス
「動くモデル」を書く
確認
↓
装結果などの成果を発表する。本チャレンジの目的は
モデルの分割、プロセスの確認をすることで開
2 つあり、1 つは、組み込みソフトウェア技術者の育成
発の早期から動作の確認が出来る。
もう 1 つは、組込みソフトウェア開発でのモデルとの
制約の意識
関連を考察するための資料収集である。MDD ロボッ
↓
トチャレンジの総合飛行の最終的な目標は,砂漠を飛
プラットフォーム知識を外在することで要求分
行させ,野生動物などの生態をトレースすることであ
析の効率化につながる
る (図 7)。
ミスの多い手動作業、手順
↓
モデル変換過程の明確化、マッピング定義によ
*,./+,-
る自動化をする。モデリングツールによる自動
化で、手動プログラミングによる人為的ミスを
防ぐことができる。
02
をプログラム構造へうまく変換させる必要がある (図
6)。最終的にプログラムになればいいのだが、それだ
けでは組込み機器は品質の保障が付かない。MDD に
よってハード/ソフト両面での確実な品質が生まれ、現
13
状より高品質なものでなければならない。
3
MDD ロボットチャレンジ
3.1
図 7: 最終目標
チャレンジの概要
MDD ロボットチャレンジは、飛行船自律飛行シス
テムを MDD によって開発し、モデル・開発工程・実
7
3.1.1
飛行船制御システムの概要
RF 送受信または IR 受信/ US 送受センサお
よび回路/モーター/M16 マイコンを搭載し
飛行船制御システムの概要を図 8 に示す。無線通信
なければならない。
(RF 通信)/赤外線通信 (IR 通信)/超音波センサ (US セ
– ゴンドラの重さ
ンサ)/画像解析技術を使用したシステムである。飛行
船には、RF、US センサ、地上には US マトリクスが
敷かれ、上空にはカメラが設置してある。飛行船の現
ゴンドラとエンベローブがヘリウムガスの浮
在地、方向、高さデータを元に解析し RF 通信により、
力、またはヘリウムガスとモーターの力で飛
制御指令を送ることが出来る。
行船が浮くこと
飛行船の役割としては、以下の 2 つがあげられる。
>?@
– 高さ
/:71,
2-
飛行船は、高さを求めるために US センサの
跳ね返り時間を利用し、そのデータを基地局
へ送信する。
– 命令に従う
+9<=89;
飛行船は基地局から発せられる命令に従って
53
モーターを制御する。
2-
• カメラ・ImgPC
ImgPC は上空の 3 台のカメラから画像データを
受信し画像解析により推定角度を算出し、UDP 通
2-015
信でデータを送信する。UDP から送られてくる
データには推定角度の他に、検出の確度、カメラ
.21,
ID、マーカの位置なども含まれている (図 9)。
53015
53 0+42/6
• US マトリクス/USMPU
図 8: チャレンジ概要
飛行船から放たれた超音波は高さを算出するほか
にも、US マトリクスにも利用される。飛行船から
3.1.2
地面に向けて発せられた US 信号は,地上に網目
提供 API
状に配置された複数の US 受信モジュールによっ
• 飛行船
て受信される。複数の受信モジュールからの情報
競技で使用するエンベローブは指定されたものを
を集約するために専用の MPU が用意されており,
使用する。ゴンドラ部分については、各チームに
基地局 PC はこの MPU との通信によって各受信
よって異なるが、条件がある。
モジュールの検出時間間隔情報を得る。
シリアル通信で送られるデータは、直接 XY 座標
– 搭載ハードウェア
をデータとして送るのではなく、センサ ID とタ
8
145
-
+.-,*
.
3
0
,+
,,
,0
,
4
,/
1
,.
/
,9
+
2
:
;9 75:86<
0736/28;
図 10: US マトリクス
3.2
図 9: カメラの利用
3.2.1
イマー時間をデータとして送信する。US センサ
開発の前に
ロボットチャレンジ最終目標との比較
本開発システムを考えるため、砂漠を想定したモデ
ID は配置の仕方によって変わるため、大会当日
ルについて検討した。我々は始めに日本科学未来館と
に公開座標が渡される。表 3 が公開座標であり、
砂漠で飛行船を飛ばす際の違いを比較した (表 4)。そ
表中の X/Y はスタートからの位置を示している。
の結果、双方の相違点は自然現象だけであり、その点
基地局は ID と受信したタイミングから,飛行船
を考慮しなければ日本科学未来館は疑似砂漠として考
の位置を求める必要がある。飛行競技では,競技
えることができる。よって競技運営側から掲示された
エリアの全体に US 受信モジュールが配置されず、
競技仕様に対するモデリングを行うことで、本開発シ
競技エリアの一部に集中的に配置される (図 10)。
ステムは疑似砂漠を考慮したものとする。今後 MDD
したがって,US 信号が受信モジュールに届かな
ロボットチャレンジがより飛躍すれば、天候などの自
いエリアでは,US 信号を使った飛行船の位置検
然現象を考慮した開発システムが要求されるであろう。
出はできない。
• RF 通信、IR 通信
3.2.2
開発システムの機能分割
開発対象である自律飛行システムは様々な機能を持っ
RF 通信/IR 通信は基地局/飛行船をワイヤレス
ている。そのためモデリングを始める前に開発システ
で繋ぐ手段である。RF 通信は,飛行船と基地局
ムの機能分割を行い、ハードウェアとソフトウェアで
PC との間の双方向通信に利用される。飛行指令、
実現すべき機能の明確化を図った (表 5)。我々は本開
データの送信など、自由に使用できる。同じ役割
発を飛行船側と基地局側に分担し進めており、表 5 よ
を RF 通信も持っているため,チームはどちらか
りそれぞれの作業工程が明確化でき、開発を円滑に進
を選択して実装することになる.
める手助けとなった。
9
表 5: ハードウェアとソフトウェアの機能分割
飛行船
3.3
基地局
要求
H
S
要求
H
S
RF 送信
○
○
RF 送信
×
×
RF 受信
○
○
RF 受信
×
×
US 送信
○
○
US 送信
×
×
US 受信
○
○
US 受信
×
×
RFMPU とのコミュニケーション
×
×
RFMPU とのコミュニケーション
○
○
USMPU とのコミュニケーション
×
×
USMPU とのコミュニケーション
○
○
ImgPC とのコミュニケーション
×
×
ImgPC とのコミュニケーション
○
○
コマンド処理
×
○
モータ制御コマンド作成
×
○
モータ駆動
○
○
位置 (x、y) 算出
×
○
高度算出
×
○
向き算出
×
○
エラー処理
×
○
高度算出
×
×
-
-
-
画面出力
×
○
-
-
-
エラー処理
×
○
プロジェクト管理
戻りによりメンバのモチベーションの低下の可能性が
あるウォータフォール型の開発プロセス1 は不適切と判
どのような開発プロジェクトにおいても、限られた
断した。アジャイル型の開発プロセスは、動作した物
期間以内に成果物を納品することは必須である。プロ
を開発プロセスの判断材料としているため、開発プロ
ジェクトを期間以内に終えるためには、プロジェクト
セスを柔軟に変更することを前提としている。そのた
の目的が明確であり、作業項目を分ける必要がある。
め、要求仕様をできるだけ詳細化し、その詳細化した
よって、MDD ロボットチャレンジ 2005 を行うにあた
作業工程をクリアにし、その過程で発見した問題に対
り、プロジェクトの目的の明確化/作業項目の分担を行
して早期に対処することが可能になり、開発リスクを
うためのプロジェクトスケジュールの作成と修正/メ
軽減することが可能になる。また、開発プロセスの形
ンバ間のコミュニケーションの場を提供する役割とし
式化よりも開発者のモチベーションやアイディアを重
て、プロジェクトマネジメントを導入した。
視している。
プロジェクトスケジュールを作成するにあたり、開
以上のことを考慮した結果、アジャイル型の開発プロ
発を円滑に進めるために開発プロセスの検討を行った。
セスを用いることが MDD には適していると判断した。
MDD ロボットチャレンジ 2005 では、運営側から参加
アジャイルで開発を行っていくために、WBS 2 /PERT
者に競技仕様書を配布する。チャレンジャーは競技仕
3
様書から要求を読み取り開発を進めていく。しかし、
/PDCA サイクル (Plan Do Check Action)4 を用いた。
1 要求定義/外部設計/内部設計/プログラミング/システムテス
ト/運用テストと開発プロセスを明確に区別し、下位プロセスから
上位プロセスの戻りを行わなず開発を進めていくプロセス。
2 WBS は要求仕様を階層的に詳細化を行い、開発を行うために
必要な作業項目を挙げていく。
3 PERT は WBS で詳細化した作業項目のマイルストーンを設
定し開発終了までの最短スケジュールを作成する。
4 個々のマイルストーンを計画/実施/確認/実行の順でプロセス
参加を表明した時点で競技仕様が決定していなかった
ため、競技仕様の変更に柔軟に対応する必要があった。
要求の変更による作業の手戻りが発生し、期限以内
に開発を終えることができない可能性が高くなる/手
10
-1,/
表 3: US マトリクス座標
センサ ID
X[mm]
Y[mm]
0
8000
-250
1
6700
-1000
2
8000
2750
3
6700
3500
4
4100
500
5
6700
2000
6
5400
-1750
7
4100
-1000
8
8000
1250
9
6700
500
10
5400
2700
11
5400
1250
12
4100
2000
13
5400
-250
14
6700
2500
15
8000
-1750
53 0,42.6
AD@7 +0
E9;:?=;>;8
GCBF<H
3.4
ハードウェアの設計と制御の戦略
3.4.1
34,24
ゴンドラの設計
本 チャレ ン ジ で 提 供 さ れ た エ ン ベ ロ ー ブ は 、横
図 11: コンテスト
160cm/体積 400L であった (図 14)。チャレンジの概
要からもわかるように、参加者は提供されたエンベ
下/左/右)/本体/電池を 180g 以内に収める必要が
ローブ、決められたハードウェアを搭載するが、ゴン
あった。図 15 に我々が作成したゴンドラを示す。
ドラの形は決められていない。制作については、8 月
バルサ木材/プラスチック/スチロールなど用いて
上旬からハードウェアの設計/M16 の機能および C 言
軽量化を意識した。
語の学習/ 飛行船の飛行特性/流体力学空気抵抗/プロ
• ゴンドラの搭載ハードウェア
ペラの特性の調査および学習をした。以下に完成まで
図 16 に実際に搭載した M16/US 送受信/モータ
の経緯を示す。
ドライバの回路を示す。また、提供された API に
• ゴンドラ
参考に設計した回路を図 17 に示す。
エンベローブの浮力は 180g 前後であった。ゴンド
ハードウェアについては、US 送受信機の設計は
ラの総重量は RF モジュール/RF アンテナ/US 送
既に出来上がっていたため、回路基盤/ゴンドラ作
受信回路/US センサ/モータドライバ/モータ (上
成を主に行った。また、この時点で MDD ロボッ
トチャレンジ 2005 の詳しい仕様が決定していな
を行うこと。PDCA を行うことにより、断続的な改善を行うこと
が可能になる。
11
0,
*467345
0,
21
0,./2
図 13: 会場の様子
-0/+
表 4: 日本科学未来館と砂漠との比較
<:9;8=
類似点
相違点
気温の高い場所と低
障害物の位置が定かでない
い場所が存在する
図 12: コンパルソリー
位置や向きのデータ
雨や風などの自然現象によ
を取得できる
り飛行特性が変化する
かったが、委員会側が IR 通信を用いることを考
目的地が設定される
自然現象による情報障害
えていたため、IR 受信機を搭載することを考え
高度の求め方
昼は気温が非常に暑い
て作成した。この時点で設計した US 送受信機お
通信方法
夜は気温が非常に低い
よび、IR 送受信機回路を付録 A/付録 B に示す。
電源電力
-
飛行船の空気抵抗とプロペラの推力については、
流体力学の文献から調査したのだが、実験による
を ±3V する仕様に変更した。変更したことで、回
値の抽出が必要になるため、飛行実験に移ること
路配置の簡単化/消費電力の削減にもつながった。
にした。
しかし、上昇実験の際に問題を生じた。温度変化
当初、モータおよびプロペラは上下/左/右すべて
や、おもりの微小な変化により、ある程度の高さ
同じ推力/大きさの物を選択し、電池については
で上昇または、下降できなくなった。そのため、
ボタン電池 2 個と CR-2 電池、US センサについて
上昇下降用のモータおよびプロペラを変更した。
は、オペアンプに与える電圧を ±6V の回路を設
最終的に、RF モジュール/RF に使用するアンテ
計していた。次節で述べる実験を行うと電池が持
ナを装備し完成となった。結果、ゴンドラ総重量
たずに止まってしまった。原因は、設計した回路
は 160g 前後となった。
に対してボタン電池に高負荷がかかり電圧低下が
生じたある。その後、大容量で高付加に強い CR-2
電池を 2 個使用、また、オペアンプに与える電圧
12
1.>
+1G
E?B400
?@333 .-/X
NRK Y+
3G
2-5>
=A;0
GPR
,1G
=A;/
WUN
/-1>
.-/X
K/
/.> .-/X
00..T<
UVW
WO
SXW JRW
/>
=A;0
GPR
@8H010 3G
J/+ Y+
.-/X
J/, YJJ
J0+ Y,
.-/X
J0,
=A;0
WPR WSXW
WPR WSXW
@/4
52?D.2
:;:,EC,./9
1G
\[Z]
IRW
GJJ
PR
SXW
JSRWUSQ
+4G
3G
=A;0
4G
E8507/B
SXW/
SXW0
PR/
PR0
GULM
GJJ
GV
56.3
+1G
=A;/
,1G
MSU FD
+3G
1G
1G
1G
=A;0
=A;0
=A;0
図 17: 飛行船に搭載した回路
図 15: 飛行船ゴンドラ
図 14: エンベローブ
3.4.2
飛行戦略
にそれぞれの動作における飛行実験について述べる。
戦略を考える際には飛行船の飛行特性を知る必要が
• 前進/後退
ある。我々は飛行特性を飛行実験により導き出し、そ
前進動作は飛行船を長い距離前進させるのではな
のデータを基に戦略を考えた。飛行船の動作は、[前進/
く、静止→前進→静止→前進を繰り返したらどう
後退][上昇/下降][左旋回/右旋回] に分けられる。以下
かと考えた。モータ正回転時間を 1[秒]/2[秒]/3[秒]
13
図 18: 飛行船の直進-正回転時間と逆回転時間
度が高いため浮力が減り、十分に上昇できない状
態が生じた。よって、上昇/下降は室内温度に合わ
せて浮力を調節するおもりを変えることにした。
• 左旋回/右旋回
旋回するときは前進のようにモータを正回転させ
た後、逆回転させると旋回は止まったが、最後に
多少前進する現象が生じた。そのため、左右モー
タを対回転後その逆の回転を与え、最後にバック
図 16: 飛行船に搭載した回路
回転をかけて静止するようにした。実験から得た
間経過した後、逆回転時間を何秒間経過させ、静
旋回時間の 2[秒]/3[秒] 時の逆回転、バック回転、
止するかを測定した。得たデータを表 6 に示す。
開始からの旋回角度は表 7 の通りである。旋回の
動作の一例を図 19 の右部に示す。
前進の動作の一例を図 19 の左部に示す。また、特
表 7: 旋回時のモータ回転時間と角度
表 6: 前進後退時のモータ回転時間と距離
正回転
逆回転
平均総合
平均最終移動
時間 [s]
時間 [s]
時間 [s]
距離 [cm]
1
1.8
2.8
16.67
2
3.3
5.3
72.00
3
4.8
7.8
181.67
正回転
逆回転
バック逆回転
最終角度
時間 [s]
時間 [s]
時間 [s]
[ °]
2
1.69
1.60
23
3
1.98
1.63
48
飛行船自身の、前進/後退/上昇/下降/左旋回/右旋
性グラフを図 18 に示す。グラフにした結果良い
回の特性を明らかにすることで、精度の高い飛行が実
特性が得られたといえる。
現可能となる。また、精度の高い戦略を考えることが
可能になる。
• 上昇/下降
次に飛行実験で得たデータを基に考えた戦略を述べ
上昇/下降における問題は、室内温度の違いによ
る。図 20 はx軸/y軸で考えたときの飛行船の軌跡で
る飛行船の浮力の変化である。実験では、天井温
ある。図 21 はz軸で考えたときの飛行船の軌跡である。
14
飛行船の動作は、[前進/後退][上昇/下降][左旋回/右
US
旋回] があり、基本的にこれらの動作が並列動作するこ
とはなく、必ず一つの動作を終えてから次の動作をす
ることにした。例外として、スタートから US マトリ
クスが最初の US を検知する状態になるまでは上昇と
前進を同時に行う。飛行船は静止した状態からスター
トする。基地局からスタートの合図を飛行船に RF で
送る。飛行船は合図を受信するとすべてのモータを正
回転させ、US マトリクスが US を検知するまで上昇
と前進を同時に行う。その間、飛行船は US を発信し
図 20: X-Y 軸 制御戦略
続け、US マトリクスが US を検知したのをトリガに、
RF
RF
基地局は位置/高さ/方向データを基に制御コマンドを
作成し、それを RF で飛行船に送信する。飛行船は受
信した制御コマンドのみに従いモータを制御する。
US
2[sec]
US
US
US
RF
2[sec]
US
1.8[sec]
1.69[sec]
図 21: Z 軸 制御戦略
3.6
1.60[sec]
全体
飛行船は基地局からの制御コマンドのみ従い、飛行
72[cm]
する。飛行船と基地局間の装置は、データを行き来さ
せるものであり基地局が必要とするデータは、現在の
23[sec]
飛行船自身の位置/高さ/方向データである。飛行船が
必要とするデータは、GrPC が送信した制御コマンド
図 19: 飛行船基本動作の一例
データである。これを上位階層と考え、徐々に具体化
していく。
3.5
ソフトウェアモデル
3.6.1
本競技で使用する開発モデルを説明する。全体モデ
概念シナリオ
ルについてはメンバ全員で話し合い、基地局/飛行船
RFMPU/USMPU/ImgPC オブジェクトは GrPC/
については、分担してモデリングを行った。それぞれ
Airship オブジェクトヘ接続されるタイミングが違う
のプロセスの進め方は異なるが、お互いのモデルを評
ため、それぞれの振る舞いをシナリオに表した。
価し合いまとめたモデルである。
• GrPC オブジェクト
15
• ImgPC オブジェクト
Direction
– Camera オブジェクトから送られてきた画像
Command
データを受信する。
Height
GrPC
– 画像データを基に算出した結果を送信する。
Airship
• Ground オブジェクト
Position
USMatrix オブジェクト
図 22: GrPC-Airship の関係
– Airship オブジェクトから US を受信する。
– USMatrix オブジェクトの信号を USMPU オ
– Position/Height/Direction データを算出す
ブジェクトに送信する。
る。
– Position/Height/Direction デ ー タ を 基 に
Floor オブジェクト
Command データを算出する。
– Airship オブジェクトへ US の反射波を送信
– Command データを RFMPU オブジェクト
する。
へ送信する。
• Airship オブジェクト
3.6.2
概念図
全 体 概 念 図 を 図 23 に 示 す。GrPC/
– Ground オブジェクトに US を送信する。
Airship/
RFMPU/ USMPU/ ImgPC/ Ground/ Camera オブ
– Height データを算出する。
ジェクトを並べ、各オブジェクト内のシナリオから振
– Height データを RFMPU オブジェクトへ送
る舞いを抽出し配置した。また、関係線を結び、分り
信する。
やすい図を心掛けた。
• RFMPU オブジェクト
3.7
– Airship オブジェクトから Height データを受
信し、GrPC オブジェクトへ Height データ
飛行船
飛行船のモデルを作成する際、まず始めに正常な動
を送信する。
作のみを考慮したモデル (以下 正常モデル) のオブジェ
– GrPC オブジェクトから Command データを
クト図/シナリオ/クラス図/シーケンス図/ステートマ
受信し、Airship オブジェクトへ Command
シン図を作成した。このモデルは概念モデルであり、
データを送信する。
システム構成やシステム設計を捉えやすくしたもので
ある。また運営側から提供されるシステムを基に考え
• USMPU オブジェクト
たものであるため、プラットフォームに依存したモデ
– USMatrix オブジェクトからの信号を受信す
ルである。C 言語をターゲットとする開発環境を考慮
る。
しながら、概念モデルから実装モデルを作成した。正
– 基に算出した結果を GrPC オブジェクトへ
常モデルの完成後に各エラー処理を付け加えることで、
送信する。
16
GrPC
ControlAirship
表 8: 飛行船モデルの作成プロセス
Camera
Monitor
Direction
ImgPC
Position
USMPU
Height
ステージ
内容
1st ステージ
正常動作のみを考慮した
(以下 正常) 概念モデルを
作成する。
Command
RFMPU
Airship
2nd ステージ
AirshipControl
る。
TransmitAirshipCommand
3rd ステージ
ReceiveGrPCCommand
ControlMotor
DispatchPosition
MakeAirshipCommand
AnalysisCommand
正常実装モデルを作成す
正常概念モデルに異常状態
を考慮した概念モデルを作
Ground
成する。
USMatrix
Final ステージ
Floor
異常状態を考慮した実装モ
デルを作成する。
CalculateHeight
図 23: 全体概念図
3.7.2
シナリオ
各オブジェクトのシナリオを作成することにより、
モデルとしての詳細度を高めた。飛行船モデルの作成
各オブジェクトの内容を表現している。各オブジェク
プロセスを表 8 に示す。
トのシナリオは以下の通りである。
飛行船の開発言語は使用する MPU の関係上 C 言語
を用いている。C 言語は関数型の言語であり、UML
• ReceiveGrPCCommand –前提条件–
はオブジェクト指向型のモデリング言語である。その
1. RF を受信する。
ため、指向が異なる UML モデルから C 言語のソー
スコードに変換する際に、モデルと飛行船側プログラ
–正常シナリオ–
ムのソースコードが一対一になるよう、あるルールに
1. AirshipControl にデータを送る。
従ってコードマッピングを行った。このルールは、ク
–異常シナリオ–
ラス図から関数を作り、シーケンス図/ステートマシ
ン図からソースコードのフローチャートを抽出すると
1. 無し。
いったものである。
• AnalysisCommand –前提条件–
3.7.1
オブジェクト図
1. ReceiveGrPC オブジェクトからデータを受
け取る。
飛行船の各オブジェクトが意味しているのは、飛行
船に必要な機能である。各オブジェクトは競技仕様か
–正常シナリオ–
ら抽出している。抽出した結果のオブジェクトとその
1. CRC チェックを行なう。
関連を図 24 に示す。
2. TeamID チェックを行なう。
3. モータコマンドを抽出し ControlMotor に
モータコマンドを送る。
17
ControlMotor
1
CalculateHeight 1
1 MakeAirsipCommand
1 1 1
1 Airship
AnalysisCommand 1
1 1 1
ReceiveGrPCCommand 1
TransmitAirshipCommand
1
1
DispatchPosition
: AirshipObjectDiagram_10th
: 1
図 24: 飛行船のオブジェクト図
–異常シナリオ–
–異常シナリオ–
1. CRC エラーの場合、ControlMotor にストッ
1. US がある一定の時間が経過しても US を受
プコマンドを送る。
信しない。
2. TeamID エラーの場合、ControlMotor にス
2. US 受信不可データを CalculateHeight に送
トップコマンドを送る。
る。
• ControlMotor –前提条件–
• CalculateHeight –前提条件–
1. AnalysisCommand からデータを受け取る。
1. DispatchPosition のタスクが終了した。
–正常シナリオ–
–正常シナリオ–
1. モータを回す。
1. 高さ計算をする。
2. 計算結果を MakeAirshipCommand に送る。
–異常シナリオ–
–異常シナリオ–
1. 無し。
1. US 受信不可データを受け取る。
• DispatchPosition –前提条件–
2. US 受 信 不 可 デ ー タ を MakeAirshipCom-
1. ControlMotor タスクが終了した。
mand に送る。
–正常シナリオ–
• MakeAirshipCommand –前提条件–
1. US を出す。
1. CalculateHeight のタスクが終了した。
2. タイマーを開始する。
–正常シナリオ–
3. US を受け取る。
1. CRC 計算をする。
4. タイマーの時間を CalculateHeight に送る。
18
3.7.5
2. AirshipCommand を作成する。
3. AirshipCommand を TransmitAirshipCom-
ステートマシン図
ステートマシンで表現していることは、各クラスの
mand に送る。
内部状態である。また、ステートマシンはコードに変
換する際に、関数の内部状態の遷移を表現している。
–異常シナリオ–
今回、モデルを作成するにあたり、Linux 上で動作する
1. 無し。
「umbrello」というツールを仕様した。ツールの仕様上、
状態の分岐やコンポジット状態が表現できなかったた
• TransmitAirshipCommand –前提条件–
め、通常の UML の記述方法と異なったステートマシン
1. MakeAirshipCommand のタスクが終了し
を作成しなければならなかった。図 27 に「Umbrello」
た。
と通常の書き方の違いを示す。また、作成したステー
トマシンを図 28 に示す。
–正常シナリオ–
1. AirshipCommand を送信する。
3.8
基地局
–異常シナリオ–
基地局側飛行船システムについては、できるだけ状
1. 無し。
態遷移が少なく、シンプルな構成を心がけモデル設計
を行った。作成には、オブジェクト図→シナリオ→シー
3.7.3
クラス図
ケンス図→詳細ステートマシン図→詳細クラス図の順
番で具体化した。
各クラスの属性は全て AirshipControl クラスに集め、
AirshipControl クラスから属性を読み取る形式とした。
3.8.1
クラス間の関係を疎にすることで、飛行船シーケンス
オブジェクト図
の変更に強いモデルとなった。また、AirshipControl
シナリオ作成時に抽出した基地局内の各オブジェク
クラスが各クラスの操作のトリガとなるため、Airship-
トを関連で結び作成したオブジェクト図を図 29 に示
Control クラスと直接作用する全ての操作は、
「Public」
す。GrPC オブジェクトが高さ、方向、位置オブジェ
とした。各クラスの「Private」な操作は、
「Public」な
クトからデータを受け取り、制御コマンドとモニタ表
操作の内部関数を表現している。図 25 に実装クラス
示オブジェクトにその結果を渡して飛行船の制御と現
図を示す。
在の状態の表示を基本動作とする。GrPC オブジェク
ト以外のオブジェクト間の関係を疎し、後々オブジェ
3.7.4
シーケンス図
クトの実装に変更が生じても影響が小さくなるように
した。
チーム戦略より、飛行船は基地局のコマンド通りの
動作だけを行うため、異常シーケンスを考慮する必要
3.8.2
がなく、飛行船シーケンスは1パターンの正常シーケ
ンスのみを考えた。図 26 にシーケンス図を示す。
シナリオ
基地局側シナリオを下に示す。基地局が持つ GrPC/
Position/ Height/ Direction/ Command/ Monitor オ
ブジェクトの振る舞いを明確にした。
19
AirshipControl
- airship_status : status
+ Control(airship_status : status) : status
1 1 1 1 1 1 1
1
ReceiveGrPCCommand
+ ReceiveRF() : RF
DispatchPosition
1
+ SelfEcho() : RTIME
- TransmitUS()
- ReceiveUS()
- CountTimer() : RTIME
- MakeErrorData() : RTIME
TransmitAirshipCommand
1
+ TransmitRF(airship_command : RF)
ControlMotor
1
+ DriveMotor(motor_command : MOTOR)
CalculateHeight
1
+ CalculationHeight(reflection_time : RTIME) : HEIGHT
MakeAirshipCommand
1
+ MakeAirshipComannd(height_data : HEIGHT) : RF
AnalysisCommand
1
+ AnalysisGrPCCommand(grps_command : RF) : MOTOR
- CheckCRC(grpc_command : RF) : RF
- CheckTeamID(grpc_command : RF) : RF
- MakeErrorComannd() : MOTOR
- MakeMotorCommand(grpc_command : RF) : RF
図 25: 飛行船の実装クラス図
• GrPC オブジェクト
取得する。
– Monitor オブジェクトに Position/ Height/
– Position オブジェクトから Position データ
Direction/ Command データを渡す。
を取得する。
• Position オブジェクト
– Height オブジェクトから Height データを取
得する。
– USMPU オブジェクトから Matrix データを
– Direction オブジェクトから Direction デー
受信する。
タを取得する。
– Command
オ ブ ジェク ト に
– Matrix データを解析し、Position データを
Position/
算出する。
Height/ Direction データを渡す。
• Height オブジェクト
– Command オブジェクトから Command を
20
: Receive
GrPC
Command
: Airship
Control
: Analysis
Command
: Control
Motor
: Dispatch
Position
: Calculate
Height
: Make
Airship
Command
: Transmit
Airship
Command
+ Control(airship_status : status) : status
+ AnalysisGrPCCommand(grps_command : RF) : MOTOR
+ DriveMotor(motor_command : MOTOR)
+ SelfEcho() : RTIME
+ CalculationHeight(reflection_time : RTIME) : HEIGHT
+ MakeAirshipComannd(height_data : HEIGHT) : RF
+ TransmitRF(airship_command : RF)
図 26: 飛行船のシーケンス図
A normal way of writing
A normal way of writing
A way of writing in Umbllero
YES
Composite :
Composite
Is Valid CRC?
A way of writing in Umbllero
ValidCRC
CheckCRC
Composite :
state
State
InvalidCRC
NO
State
With Junction
With Composite
図 27: Umbrello での書き方
– Position/ Height/ Direction データを基に
– RFMPU オブジェクトから Height データを
Command データを作成する。
受信する。
– RFMPU オブジェクトへ Command データ
• Direction オブジェクト
を送信する。
– ImgPC オブジェクトより方向に関するデー
• Monitor オブジェクト
タを受信する。
– Position/ Height/ Direction/ Command
– 方向に関するデータから Direction データを
データをモニタに表示する。
算出する。
• Command オブジェクト
3.8.3
シーケンス図
– GrPC オブジェクトから Position/ Height/
シナリオから分るように、Position/ Height/ Direc-
Direction データを取得する。
tion/ データについては、基地局外である RFMPU/
21
Airship
ReceiveGrPCCommand
PowerON
OccurIntrumpt
PowerOFF
AirshipControl
ControlMotor
FinishTask
ReceiveRF
CalculateHeight
FinishTask
FinishAnalysisCommand
FinishDispatchPosition
DriveMotor
DispatchPosition
CalculationHeight
FinishTask
TransmitAirshipCommand
FinishControlMotor
SelfEcho :
FinishTask
FinishMakeAirshipCommnad
AnalysisCommand
TransmitRF
FnishTask
MakeAirshipCommand
FinishReceiveCommand
AnalysisGrPCCommand :
FinishTask
FinishReciveCommand
MakeAirshipCommand
FinishTask
Composite :
AnalysisGrPCCommand
InvalidCRC
FinishTask
MakeErrorCommnad
InvalidTeamID
CheckCRC
ValidCRC
Composite :
SelfEcho
CountRegistorOverFlow
TransmitUS
ReceiveInterrupt
: AirshipStateDiagram_10th
ValidTeamID
CheckTeamID
FinishTask
ReceiveUS
MakeMotorCommand
MakeErrorData
FinishTask
FinishTask
FinishTask
CountTimer
FinishTask
: 1
図 28: 飛行船のステートマシン図
USMPU/ ImgPC オブジェクトから不定期にデータが
安に内部の状態遷移を示した。
送られてくる。そのため、シーケンス図は、GrPC オブ
注意として、図の中で”Junction”という状態を用い
ジェクトと GrPC オブジェクト内の個々のオブジェク
ているが、これは状態ではなく”選択点”として用いて
トの非同期シーケンス、GrPC オブジェクト内の Mon-
いる。我々がモデリングで用いたツールに選択点の要
itor オブジェクトが実行されるまでの同期シーケンス
素がなかったため、苦肉の策として”Junction”をチー
というように、2 つのシーケンス図で基地局側の流れ
ム内の選択点の要素とした。
を表した (図 30、図 31)。
3.8.5
3.8.4
ステートマシン図
クラス図
Position/Height/Direction クラスが独立独行 (SelfReliance) に I/O アクセスし、自身を更新することを心
図 32 と図 33 に GrPC 側のステートマシン図を示
す。それぞれのステートマシン図は電源が入ると同時
がけて作成した。基地局実装クラス図を図 34 に示す。
に遷移し、終了状態は存在しない。コンポジット状態
Position/ Height/ Direction クラスのデータ更新用
になっている図に対しては内部の状態を詳しく示した。
メソッド (update メソッド) は GrPC から操作するこ
このときどれほどの粒度でステートマシン図を描くべ
とはできず、更新のタイミングも隠蔽した。実装は
きか迷ったが、中のシーケンスが分かる程度までを目
static private な update メソッドを POSIX(Portable
22
<GrPC>
: GrPC
: ControlAirship()
: Update()
<Height>
: Height
<Position>
: Position
<Direction>
: Direction
: Update()
: Update()
<Cmmand>
: Command
: GrPC
: Send(position : position , height : height , direction : direction)
<Monitor>
: Montor
: Display(position : position , height : height ,
direction : direction , command : command)
図 30: 基地局の非同期シーケンス
*((height_ *)height) = rand();
return (void *)NULL;
Monitor
}
public:
Height_(){
pthread_t pt;
pthread_create(&pt, NULL
, Height_::update, (void *)(&height));
}
1
1
GrPC 1
1 1
1
Position
1
1
Direction
: GrPC_Object
1 Command
height_ get() const{
return height;
}
1
};
Height
これにより GrPC が任意のタイミングでデータ
: 1
取得用メソッド (get メソッド) をコールしても最新
の Position/Height/Direction データを取得可能にし
た。結果として各クラスの関係が疎になり、RFMPU/
USMPU/ ImgPC の非同期なデータ到着タイミングと
独立したコマンド発行とモニタ出力が実現できた。
図 29: 基地局オブジェクト図
Operating System Interface for UNIX) Thread(以下
class GrPC_{
Position_
Height_
Direction_
Command_
Monitor_
pthread) でスレッド化して実現した。
class Height_{
height_ height;
static void *update(void * height){
while(1)
Position;
Height;
Direction;
Command;
Monitor;
void ControlAirship(){
while(1){
23
: GrPC
: Position
: Height
: Direction
: Command
: Monitor
+ Get() : position
+ Get() : height
+ Get() : direction
+ Send(position : position , height : height , direction : direction)
+ Get() : command
+ Display(position : position , height : height , direction : direction , command : command)
図 31: 基地局の同期シーケンス
タイマ IC(LM555) を接続し、M16 マイコンの出力信
Command.Send(Position.get()
, Height.get(), Direction.get());
Monitor.Display(Position.get()
, Height.get(), Direction.get(), Command.get());
}
};
号が H(5V) のときに 40KHz の US が発振する。
public:
GrPC_(){
ControlAirship();
}
};
3.10
飛行情報の受信
3.10.1
方向:UDP 通信
ImgPC/ 基地局間の UDP 通信パケット長は 64 バイ
トである。64 バイト中には GrPC が方向を知るため
の角度推定値だけでなく、画像解析によるマーカ検出
3.9
確度/ 高度推定値/ 位置推定値など含まれていた。各
提供システムの利用
バイトの内容の一部を表 10 に示す。
開発にあたりアーキテクチャ委員から提供された API
および回路図を利用した。利用状況を表 9 に示す。
方向 =
表 9 が示すとおり基地局プログラムは独自の設計で
256
角度推定値
360
(1)
開発を行った。USMPU システムと ImgPC システムは
直接に角度値が送られるのではなく、開発者側が角
競技場に設置されたシステムを利用した。RFMPU シ
度推定値を元に算出する。通信設定では、配送先アドレ
ステムではプログラムは全て提供物を利用し、ハード
ス 255.255.255.255、配送先ポート 2005 が定められた。
ウェアは提供された回路図を参考に開発した。AirMPU
我々は、方向値を得たいため、角度推定値/ マーカ
システムのプログラムは RF 通信用 API を利用し、全
検出確度を利用した。(角度推定値はマーカ検出確度と
体制御と US 通信については独自に設計した。また、
併用しなければならない) また、方向の算出の例は図
AirMPU システムのハードウェアは提供された回路図
を参考に、US 送信部の一部改変を加えて開発した (図
36 のように与えられた。UDP 受信では、次の作業が
必要である。
35)。改変した回路はプログラムによって 40KHz の周
波数を作るのではなく、M16 マイコン/US 送信機間に
• ソケットを作る
• bind する IP アドレスとポートを設定する
24
GrPC
Position
PowerOn
PowerOn
ControlAirship
SavingPositionForSelfishReasons
PowerOn
WatingData
GetData
InvalidData
CheckCRC
Monitor
ValidData
PowerOn
WatingCall
AbnormalValue
CalculatingPosition
CatchCall
FinishOutput
NormalValue
OutputOnDisplay
Direction
Height
PowerOn
PowerOn
PowerOn
SavingDirectionForSelfishReasons
PowerOn
WatingData
CheckCRC
GetData
InvalidData
CheckCRC
ValidData
CalculatingDirection
SavingData
InvalidData
ValidData
AbnormalValue
CheckLimit
NormalValue
#Composite
SavingHeightForSelfishReasons
WatingData
GetData
:
FinishSaving
SavingData
#Composite
AbnormalValue
NormalValue
FinishSaving
_GrPC_Monitor_Direction_Position_Height
#Composite
SavingData
FinishSaving
: 1
図 32: GrPC、Monitor、Height、Direction、Position のステートマシン図
• ソケットに名前をつける
struct sockaddr_in addr;
• データを受け取る
unsigned char buf[64];
Imgsock = socket(PF_INET, SOCK_DGRAM, 0);
#include <sys/types.h>
#include <sys/socket.h>
ddr.sin_family = PF_INET;
addr.sin_port = htons(SV_UDP_PORT);
#include <netinet/in.h>
#include <string.h>
addr.sin_addr.s_addr = INADDR_ANY;
#define ANGLE 8
・
・
・
・
・
・
bind(sock, (struct sockaddr *)
&addr, sizeof(addr));
・
・
・
memset(buf, 0, sizeof(buf));
int main(){
while(1){
int Imgsock , direction;
25
Command
PowerOn
GetAnOrder
WatingAnOrder
FinishSending
FinishMakingCommand
SendingCommand
PowerOn
WatingAnOder
GetAnOrder
MakingCommand
Junction
StartState
NormalState
Junction
ValidData
MakingStartingCommand
InvalidData
FinishMaking
CompareCurrentPositionAndGoal
FinishComparison
MakingBackCommand
FinishMaking
FinishSending
FinishMaking
SendingCommand
MakingNormalCommand
#composite
:
_Command
: 1
図 33: Command のステートマシン図
表 9: 自律飛行システム中の提供物利用状況
提供物の利用
GrPC
USMPU
HW SW
RFMPU
HW SW
ImgPC
AirMPU
HW SW
×
⃝
△
⃝
△
⃝
⃝
△
× 不利用 △ 一部利用 ⃝ 全部利用
if(recv(Imgsock, buf,
sizeof(buf), 0)<0){
• ソケットを作る
• 宛先を指定して送信する
}else{
direction = 256 / 360 * Imgsock[ANGLE];
printf("%d",direction);
・
・
・
・
・
下に UDP 送受信/送信例を示す。
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SENDW "DATA123\n"
・
・
・
}
#define LEN 5
int main(){
int Imgsock;
}
close(Imgsock);
}
struct sockaddr_in addr;
Imgsock = socket(PF_INET, SOCK_DGRAM, 0);
UDP 送信では、特定の IP アドレス+ UDP ポート
addr.sin_family = PF_INET;
番号で待っているサーバに対してパケットを送信する。
26
GrPC
- Position : Position
- Direction : Direction
- Height : Height
- Command : Command
- Monitor : Monitor
+ ControlAirship()
1 1 1 1 1
Height
- height : height
1 - Calculate()
- Update()
+ Get() : height
Position
- position : position
1
- Calculate()
- Update()
+ Get() : position
Direction
1 1- direction : direction
- Update()
+ Get() : direction
Monitor
1
+ Display(position : position , height : height ,
direction : direction , command : command)
Command
- command : command
1 - goalposition : position = GOALPOSITION
- goalheight : height = GOALHEIGHT
- state : state = START
+ Send(position : position , height : height , direction : direction)
+ Get() : command
図 34: 基地局実装クラス図
addr.sin_port = htons(2005);
addr.sin_addr.s_addr =
inet_addr("255.255.255.255");
・
・
・
・
・
・
・
・
sendto(Imgsock, SENDW, LEN, 0,
3.10.2
位置:シリアル通信
USMPU/基地局間のシリアル通信では、US マトリ
クスで反応した US センサの ID とタイミングが送信
されてくる。通信設定は、ボーレート 9600bps/8bit/
ノンパリティである。また、送られてくるデータ構成
を図 37/シリアル受信の例を下に示す。
(struct sockaddr *)
&addr, sizeof(addr));
・
・
・
・
#include <stdio.h>
#include <fcntl.h>
・
・
・
・
#include <termio.h>
close(Imgsock);
}
int main(){
int USfd;
27
Timer IC LM555
40KHz
timer ic on
GND V+
0.1u
+5v
Vin
MAX232
1.3K
V+
C1- Vcc
C2+ VC2C1+
Trg Di
M16
0.1u
10k
Vin
0.1u
Rst Th
74LS04
1K
O
Cnt
2200pF
0.1u
0.1u
Tin Tout
Tin Tout
UStransmiter
M16
L
H
H
L
L
L
図 35: 超音波送信回路
2503
バイト位置
1
2-6
内容
78068
未使用
赤マーカ検出確度
8
青マーカ検出確度
9
角度推定値
+-.
04231 ; ,.* : <=
図 36: 角度
未使用
...
...
...
...
17
赤マーカ位置 X 座標上位バイト
20
赤マーカ位置 Y 座標下位バイト
22
青マーカ位置 X 座標下位バイト
23
青マーカ位置 Y 座標上位バイト
29-32
<=9,** =
カメラ ID
7
10-16
<=9* =
<=9/* =
表 10: ImgPC からの受信データ
struct termios tio;
char usmsg[9];
・
・
・
・
・
・
・
・
if( (USfd = open("/dev/ttyS1"
,O_RDONLY)) < 0 );
未使用
33
高度推定値上位バイト
34
高度推定値下位バイト
37-48
未使用
61-64
未使用
printf("/dev/ttyS1 open failed.\n");
bzero(&tio, sizeof(tio));
tio.c_cflag = B9600| CS8| CLOCAL| CREAD;
tio.c_cc[VMIN] = 9;
tcsetattr(fd, TCSANOW, &tio);
while(1){
tcflush(USfd,TCIOFLUSH);
read(fd, usmsg, 9);
28
1. メンバの開発スキル
-12
2. メンバのモチベーション
,+204
/2.35
*
3. 作業項目の難易度
4. 作業に当てられる時間
また、これらの項目を把握できなければ、プロジェク
図 37: USMPU からの受信データ
トを円滑に進めることが困難になり開発が遅れる可能
・
・
・
・
性が高まる。そのため、プロジェクトマネージャは開
・
・
・
・
発の遅れを回避するために、把握できる限りのリスク
を予測し対応策を作成する必要がある。
}
プロジェクトマネージャは上記のことを心がけマイ
}
ルストーンの設定/リスクの対応策の作成を行いプロ
ジェクトを進めた。リスクの対応策として、マイルス
3.11
3.11.1
プロジェクト管理の考察
トーンの設定時に修正期間を考慮する/作業の進捗を
定期的にメンバで報告する場を設けるなどを行った。
開発側の考察
しかし、幾度か開発の遅れが生じ、マイルストーンの
WBS により要求仕様の詳細化が図られたことで、作
業の把握がしやすくスムーズに開発に着手することが
できた。しかし開発途上において、PERT の作業進行予
定と実作業進行状況にズレが生じ、再三に渡り PERT
の変更が生じた。
その原因は、メンバの開発スキル不足を要因とする
作業の遅れ/飛行船の物理モデルの不確定さを要因と
する実験項目の抽出の困難さ/マネージャの開発管理
経験の少なさを要因とする作業期間の見積りの困難さ
の三つが挙げられる。
以上より、プロジェクトマネージャから与えられた
WBS は作業工程を把握するのに役立ち、開発を進め
る際の有効な管理方法の一つであった。しかし PERT
においては、その作業日程に沿った実作業は困難で、
作業目安にはなったものの WBS に比べると有用では
なかった。PERT を有効な手段とするには開発管理者
再設定を行った。
開発の遅れが生じた原因として考えられることは、
メンバの開発スキルを調査せずマイルストーンの設定
をマネージャの判断で行ったこと/リスクの対応策が
不十分であり、(1) から (4) の項目が把握できていな
かったからだと考える。以上のことから、より良いマ
ネジメントを行うためには以下の項目が大切であると
考える。
• リスク対処法
• メンバの開発スキルの把握
3.12
コンテスト結果を踏まえた考察
大会の審査対象である、モデルと飛行競技の結果に
ついて考察を行う。
の作業期間の正確な見積りと開発者の開発スキルの向
上が必要であると考える。
3.12.1
3.11.2
モデル
モデル審査員の評価は、
「飛行船の飛ばし方について
管理側の考察
のモデルは記述してあるが、コースを攻略するための
プロジェクトマネージャはプロジェクトを円滑に進
モデルが記述されていない」であった。図 19、図 20、
め、開発期間以内に終えるために、WBS による作業
図 21 は飛行船の戦略であり、これらの図から飛行方
項目の詳細化/PERT によるプロジェクト終了までの
法を読み取ることができる。モデル審査員の評価通り、
マイルストーンの設定を行い、適切なマイルストーン
図 19、図 20、図 21 から飛行船の状態/エラー処理につ
を設定するために以下の項目を把握する必要がある。
いて読み取ることが困難である。しかし、コースの攻
29
3.13
略方法を考慮しなかったわけではない。メンバ全員で
戦略についての話し合いを行ったため、図 19、図 20、
ハードウェアに関しては、デバックの環境が非常に
図 21 から戦略を十分理解でき、これ以上、戦略の詳
悪かった。配線が切れる/取れる。マイコンのフラッ
細化を行わなかった。この評価を受け、次回のチャレ
シュROM に焼く際の手間ガかかる/ 軽量化を意識し
ンジにおいてはメンバ間のみでなく作成したモデルを
強度の弱いゴンドラでの実験、非常に効率が悪かった。
誰が読んでも理解できるモデルを作成することを心が
あらかじめ、デバックの環境の整備をする必要があっ
ける。
3.12.2
ハードウェアの考察
たと考える。
飛行結果
3.14
MDD という開発手法についての考察
コンパルソリーでは、飛行船が離陸した後、目標の
3.14.1
高さまで上昇せずタイムアップとなり得点が 1[点] で
モデルの利用
あった。飛行船が目標の高さまで上昇しなかった原因
はじめにチーム内で、シンプルなシステムを構築す
は、飛行船の浮力を調節するためのおもりが重すぎた
るように心がけたが、逆にモデルを使用することで、
ためである。このような人為的ミスを起こした原因は、
抽象度を分けることができ、シンプルなシステムを構
以下のことが重なったためだと考える。
築できたとも言える。また、メンバ全員が理解した上
で次の抽象度のモデルへ変換したため、抽象度にあっ
• それぞれの競技は 1 度ずつのチャレンジ、という
精神的プレッシャー
た良い話し合いが出来た。この結果からシステム理解
面で非常に役立ったと考える。
• 競技時間の制約
• 温度差の把握
3.14.2
上記の原因などによる人為的ミスの発生率を下げるた
開発手法
• 抽象度と分離
めに、飛行船の準備シーケンスの作成を行い、それに基
づくシミュレーション/テストを行うべきだと考える。
開発を終えて AIP を用いたモデルの位置づけが
総合飛行では、飛行船-基地局間の通信は確立され
難しかったと感じた。コンセプトしては、API 仕
ていたが、飛行船の高さ検出ができなかった。そのた
様の面から、要求分析→ PSM →ソースコードと
め、基地局側のソフトウェアが緊急モード5 に切り替
いう流れを定義した。全体概念図をモデリングし
わり、仮想バーを越えた後に飛行不可能と判断され競
た後、基地局/飛行船の異なるプラットフォーム
技終了となり得点が 9[点] であった。US の単体テスト
へモデル変換させた。その後は PSM としてモデ
の環境では、飛行船の高さを検出することができた。
リングを行った。しかし、モデリングを終えてか
しかし、ハードウェア環境を変える/RF と US の機能
らだら、全体概要図異種のプラットフォームに適
統合を行うと高さ検出ができず、この状態で大会本番
応できることから結果として唯一の PIM であっ
を迎えた。このような結果になった原因は、開発の遅
たと考える。高抽象度なりに変換定義を具体的に
れによる個々のデバイスの性質調査が不十分であった
する必要があったと考える。
こと/ 開発の遅れによる統合テストがほとんど行えな
• PSM →ソースコードマッピング
かったことだと考える。よって、次回のチャレンジで
は開発の早期にデバイスの性質調査を行い、十分な統
プログラム言語は基地局では C++言語を、飛行
合テストを行うこと/ユーザに対する準備シーケンス
船では C 言語を用いている。
の作成とテストを行うことを心がけたい。
– 飛行船
今回使用した M16 マイコンは C 言語と機能
5 緊急モードは、基地局に高さ/位置/方向のいずれかのデータが
値域外の場合に作動する。高さ/位置/方向のデータを取得するため
に、飛行船を上昇/下降/前進/後退させる。
を利用可能にするための非言語が含まれてい
30
た。手動によるマッピングでは、C 言語は各
表 12: 開発スケジュール
オブジェクトを関数で表現することでマッピ
ングを行った。はじめに非言語を考える必要
8 月上旬
M16 および C 言語の学習/
ハードウェアの作製/WBS
8 月下旬
講習会参加/飛行船の空気
があった。
– 基地局
C++言語はオブジェクト指向型の言語であ
り、クラスを用いることでモデルからコード
へのマッピングが定式的かつ明確に行うこと
ができた。
抵抗の調査/M16 の仕様確
認/WBS の変更
9 月上旬
飛 行 船 の 物 理 特 性 実 験/
ハードウェア作製/WBS の
変更
3.15
9 月下旬
スケジュール
本チャレンジの進行スケジュールを表 11 に示す。ま
10 月上旬
た、本チームの開発経過を表 12 に示す。WBS を早期
6 日間の休暇/モデリング
/WBS の変更/ハードウェ
アの作製
プログラム作成/ハードウ
ェア修正
に決定し、物理特性や一部のハードウェア作製に着手
10 月中旬
することができた。しかし、飛行船側の通信 AIP の理
解に時間がかかり RF 通信モジュール/US モジュール
RF 通信確立/MDD ロボッ
トチャレンジ本番
などすべての機能を搭載したゴンドラの完成は本番の
直前であった。
4
表 11: 提供 API の結果スケジュール
8月8日9日
講習会
8 月 23 日
MDD 講習会
8 月 31 日
RF プログラム配布
9月3日
RF モジュール、赤外線モ
ジュール届く
9 月 25 日
カメラによる方向検出のプ
まとめ
• 組込み MDD
今回実践した、モデリング/組込みシステム開発/
開発手法は初めての経験であった。UML を用い
た開発は、個人でなくチームという複数人数での
開発では非常に有効的である。
MDD ロボットチャレンジ 2005 は、10 数チームが
参加し競技や意見交換を行った。各チーム、モデ
リングコンセプト/マッピング方法/MDD という
開発手法の定義は異なった。前回 MDD ロボット
チャレンジ 2004/2005 を比べても考え方が変化が
あった。また、自分の意見ではあるが、もう一度
ロトコル仕様公表
9月
US マトリクス情報仕様変
更
10 月 4 日
競技仕様書最終版
10 月 10 日
モデル提出
このチャレンジに参加するとしたら、経験の面か
10 月 11 日
ImgPC データ出力サンプ
ルプログラム
これは、組込みシステムへの MDD 適応には、ま
10 月 15 日
日本科学未来館にてテスト
ら考えても違う MDD 手法を選択するであろう。
だ多くの考えがあることを意味している。研究と
教育面から考えても、さらに MDD を利用した組
飛行
10 月 17 日
MDD ロボットチャレンジ
本番
10 月 18 日
ワークショップ、表彰
込みシステムの事象を増やす必要がある。
• 開発プロセス/プロジェクト管理
WBS/PERT を有用に用いることができれば、プ
ロジェクトを円滑に進めることができる。しかし、
WBS/PERT を有用に用いるにはそれを作成する
31
管理者側およびそれを用いる開発者側の双方に開
発経験/開発スキルが必要である。
• ハードウェア
基礎回路の計算知識を得ることができた。また、
感光基盤での作製/ ハードウェアの軽量化/物理
特性の考慮が求められたことから、デバイスの選
定方/半田付けの技術/制御工学の知識を身につけ
ることができた。
32
A
回路基礎:超音波送受信機
センサのマイナス側に入力する電圧の位相が 180 度ず
る。そのため電位差が 2 倍になる。よって、より強い
波を出力することが出来る。
以下に、使用した各デバイスについて説明する。
A.1.1
超音波センサの仕組み
Transmit
Receive
図 38: 超音波送信機
+
図 40: 超音波センサ振動子の運動
A.1
超音波送信機
今回使用する 40KHz 超音波センサは空中用開口型
の送受信が別々のセンサである。送信用超音波センサ
+5v
0.1u
の振動子に信号電圧を加えると、振動子が屈曲運動を
起こし, 機械的共振周波数と入力した高周波信号の周
1K
波数と一致したときに超音波を放射する。
10k
また、受信用超音波センサは、受信した超音波振動が
LN
555CN
1K
振動子に屈曲運動を生じさせ、電気出力が発生する。
2200pF
電圧が高くなるほど、出力が大きくなる。
0.1uF
+5v
HD
74LS
04P
0.1uF
+5v
A.1.2
ADM
3202AN
(MAX)
(232)
タイマー IC
タイマー IC とは、抵抗やコンデンサによりクロッ
クを制御する IC である。今回は、40KHz の超音波発
0.1uF
振用として使う。
0.1uF
0.1uF
f = 40 × 103 =
1
T
T = 25 × 10−6
(2)
タイマー IC の無安定動作
図 39: 超音波送信回路
何 Hz の周波数を発振させるかは、抵抗とコンデンサ
の値によって決まる。コンデンサ C は、Ra を通じて
超音波送信機の回路を図 39 に示す。マイコンからの
充電され、Rb を通じて放電される。デューティーサイ
信号により、タイマー IC によって 40KHz の周波数を
クルに関しては Ra 、Rb 抵抗の比で設定することがで
発振される。その信号の一方を Hex Inverter に入力、
きる。
もう一方を電圧レベルコンバータへ入力した。
一方を Hex Inverter に入力することによって、超音波
33
Low_X[S]
40 × 103
=
Rb
=
(1.3 ×
103
1.44
(7)
+ 2Rb ) × 2200 × 10−12
7.5 × 103 (10K 半固定抵抗)
(8)
OneCycle_Y[S]
次にデューティーサイクルを確かめる。
図 41: デューティー比
D
7.5 × 103
(1.3 × 103 + 2 × 7.5 × 103 )
= 0.46
=
(9)
(10)
計算値と出力波形は多少の違いがるため、半固定抵抗
で周期を調整する必要がある。Vcc 5V で、周期 25 µ s、
± 2.5V の交流が出力される。
図 42: 無安定動作回路
40KHz で発振するための計算式を以下に示す。
f=
1
1.44
=
T
(Ra + 2Rb ) × C
(3)
D:デューティーサイクル (Duty cycle)
D
=
X
Y
(4)
=
Rb
Ra + 2Rb
(5)
図 43: 抵抗とコンデンサの関係
(6)
Ra ,Rb :抵抗 C:コンデンサ
仕様書の無安定動作 f-C グラフより大まかに抵抗の値
A.1.3
を決めておく必要がある。
Hex Invertar HD74LS04
Ra
= 1.3K Ω
この IC は論理回路の NOT 回路であり、DC 特性と
AC 特性で動作が異なる。Hex inverter の DC 特性は、
Rb
= 10KΩ(半固定抵抗)
入力電圧が Low のとき出力 High、出力電圧が High の
= 2200pF
とき出力 Low という動作をする。
C
今回 Hex Invertar を使用した目的は、インバーター
の交流特性を生かすためである。インバーター IC の
可変抵抗 Rb の値
AC 特性とは、入力電圧が 180 度位相がずれ出力され
ることである。交流の電圧を反転させ、180 度位相を
34
表 13: Inverter DC 特性
in out
L
H
H
L
ずらす事により、超音波発信機に入る電位差を上げて
いる。オシロスコープで見た波形を以下に示す。
図 46: ADM3202 出力電圧特性
される電圧は 10V であるはずであるが、IC の仕様電
図 44: Hex invertor In-Out 特性
圧は下図通りであり、実際も電位差が 9V 近くである。
A.2
超音波受信機
受信した超音波は、電位がとても小さい。超音波受
信センサから生じた電圧をオペアンプで約 4500 倍に
増幅させる。その後フォトカプラで交流を絶縁させ、
出力反応を得る。出力はアクティブ・ロウである。
A.2.1
オペアンプ
今回使用するオペアンプは、電圧利得が標準で 110dB
と高い NJM4580 を使用した。1段目を Ra =10KΩ、
図 45: 波形の比較
Rb =1MΩ に設定し、-40dB の電圧に増幅, さらに 2 段
目を Ra =22KΩ、Rb =1MΩ に設定し、-33dB の電圧に
増幅するように設計した。
A.1.4
これで計 73dB(4500 倍)の出力電圧が得られる事に
電圧レベルコンバータ
なる。ピーク電位は± 6V である。しかし、この± 6V
ADM3202 コンバータは、パソコン、端末間の電圧
レベル変換によく使われる。今回は、電圧レベルアッ
の電位を与えた回路の実際の出力電位は、± 4.25V 程
度である。これは、オペアンプの仕様である。(図を参
プの特性を利用した。入力電源+ 3.3V 時電荷を保存
考)
しているコンデンサ (C1) を使用して、+ 3.3V 入力電
例えば、± 1mV の電圧が超音波センサに生じたとす
源を倍の+ 6.6 V にし、この+ 6.6 V レベルを C2 を使
る。増幅が 4500 倍より、± 4.5V の電圧に増幅される
用して− 6.6 V に反転する。C3 は図では V +と VCC
が、最大電圧が± 4.25V より、± 4V ほどの交流が出
の間に接続される。また、コンデンサ C3 と C4 は、出
力される。
力リップルを低減するために使用している。今回の回
路では、Vcc を+ 5V で動作させている。このとき出力
35
4.7k
1000K
100
TLP
620
+5v
+6v
22k
2k
図 49: オペアンプの出力電圧特性
フォトカプラ
• フォトカプラ TLP620
2k
30k
10k
1000k
-6v
0.001u
NJM
4580D
A.2.2
図 50: AC フォトカプラ
図 47: 超音波受信会回路
H
H
L
L
H
H
L
L
Rb
図 51: AC フォトカプラの特性
+6V
Ra
-
交流電流を流すため、図のように赤外 LED が逆
+
並列接続されているフォトカプラ TLP620 を使用
した。
-6V
• フォトカプラと電流
図 48: 反転増幅回路
36
– フォトカプラ発光部 (赤外 LED)
このフォトカプラの発光部である赤外 LED
へ流したい電流は、最大定格が 60mA であ
ることを考慮し、最大 4.25V の電圧が入った
ときのために、30mA に設定した。この場合
の赤外 LED にかかる電圧は 1.25V である。
Airship
343m/s
h
以上のことから、発光部への入力電流を変え
40KHz
るための抵抗値は、
この電圧 − LED にかかる電圧
LED に流したい電流
GND
図 52: 飛行船の地面からの高さ
= 使う抵抗
(11)
る。この一通りの時間を計測することにより、距
離 (高さ) を算出できる。
4.25 − 1.25
30 × 10−3
=
100[Ω]
(12)
• 計算方法
今回、
「超音波を発射してから物体に反射して戻っ
てくる迄の時間 T」は 1/2 倍することにより 超
音波送受波器から地面 (床) までの距離を知ること
ができる。
例えば、反射波が検出されるまでの時間を T [μ
s] とすると、図中の高 h は、 となる。
– フォトカプラ受光部 (フォトトランジスタ)
一方、フォトカプラの受光部である、フォト
トランジスタの最大定格電流が 50mA、推奨
条件 1mA∼10mA である、10mA 時のコレ
クタエミッタ間飽和電圧が 0.3V ほどである。
h=
電源電圧 − コレクタにかかる電圧
コレクタエミッタ間に流したい電流
1
T × 343 × 10−3 = 0.17T [mm]
2
(15)
= 使う抵抗
A.4
(13)
5 − 0.3
30 × 10−3
A.4.1
=
4.7 × 103 [Ω]
電源回路
3 端子レギュレータ
(14)
今回電源回路を作製したのは、乾電池を電源にする
ためである。
A.3
距離の測定
上の図が電源回路の基本接続である。今回使用した
3 端子レギュレータの番号は「7805」である。
• 考え方
超音波は音波であり、速度は常温で音速 343m/s で
ある。1 秒間に 343m 進み、1cm を進むのに 29µS
• レギュレータ
出力したい電圧より高い入力電圧値を放熱という
かかる。マイコン信号とともに、超音波送信機か
形で、一定の電圧に安定化する。5V 安定レギュ
ら超音波信号が送信され、地面 (床) によって反
射した信号を受信機キャッチしマイコンが検出す
37
7805
6V
5V
0.1u
47u
0.1u
図 53: 3 端子レギュレータの基本回路
レータに 10V 、1A の入力電圧をくわえた場合
V × A = W (電力)[ワット]
(16)
(10 − 5) × 1 = 5[W ]
(17)
の熱が放出される。高ければ良い訳ではなく、余
分な電圧は全て放熱されるが、効率の良い放熱を
しなければならない。
• 「7805」
左の 2 つの数字で 7800 シリーズを示す。7800 シ
リーズはプラス (+) 電源の安定化に使用し、一方
マイナス (-) 電圧の安定化は、7900 シリーズであ
る。
「05」は 5V の電圧に安定化するもので、ここの
数字が直接安定化の電圧である。
• 回路説明
図中入力側の 47µ 電解コンデンサと 0.1µ 積層セ
ラミックコンデンサは発振防止用としてつけてい
る。出力側のセラミックコンデンサは、電圧の安
定を図っている。通常入力側のコンデンサには数
10 μ F 程度をつけることが望ましい。
38
B
回路基礎:赤外線送受信機
B.1
赤外線とは
図 56: 赤外線送信機
図 54: カメラから見た赤外線
カメラから見た赤外線 LED が光を放っている写真であ
る。人間の可視光線が、380nm から 780nm に対して、
近赤外線の波長範囲は、780nm から 1.5µm である。
B.2
赤外線センサ回路
今回使用する赤外線の波長は 26µS、38KHz である。
38KHz
最終的には、マイコン制御によりパルス信号と、38KHz
のを組み合わせて赤外線を送信するが、今回は、どの
くらいの距離まで赤外線センサ回路の信号が受信でき
833Hz
るかを確かめる回路として、作製した。今回使用する
赤外線受信モジュールは連続した信号を受信しない構
造のため、タイマー IC を 2 段に使いバースト波信号
600uS
を発生させている。
そして、赤外 LED を 2 つ並列に付けて指向性と感度
833Hz
を大きくした。
600uS
B.2.1
赤外線受信モジュール
図 57: 赤外線送信時のバースト波形
赤外線受信モジュールは連続した信号を受信せず、
バースト波を入力したときに反応するモジュールであ
る。推奨するバースト波の動作は、下の図の通りであ
る。
39
+5v
0.1u
1K
10k
LN
555CN
1.3K
0.1uF
0.1u
1K
10k
+5v
LN
555CN
1.3K
2200pF
図 55: 赤外線送信回路
このときの波は T=1200 μ S(833Hz) に 38KHz(26
μ S ) を組み合わせたバースト波である。また、Vcc
が 5V で出力動作は 5V のアクティブ・ロウ電圧が発
生する。
B.2.2
2 段タイマー IC
図 58: タイマー IC833Hz と 26KHz
バースト波を発生させるために、超音波送信機同様
タイマー IC「LM555」を使用し、発生させた 1200 μ
S(833Hz) の波で 26 μ S(38KHz) の波制御する形にし
た。その際の出力波形は下図の通りである。
38KHz の波が発生しているところと、していないとこ
ろがあることが分かる。
図 59: タイマー IC の出力波形
40
B.2.3
トランジスタ 2SC1815
コレクタ電流の最大定格が 150mA より 140mA 程
表 14: 光の単位
記号, 単位
放射量
物理量
単位
度の電流が流れるようにした。よって赤外 LED ひと
光束
lm(ルーメン)
放射束
W
つにかける電流は 140 / 2 = 70mA となる。140mA で
光度
cd(カンデラ)
放射強度
W/sr
のベースエミッタ間飽和電圧は約 0.9V である。
輝度
放射輝度
W/sr/m
放射照度
W/m2
cd/m
lx(ルクス)
照度
B.2.4
2
2
赤外 LED
• 光の単位
表 15: LED 一覧
最大電流 (mA) 放射強度
型番
– 照度
照度とは。光源から離れた位置にある面に対
する光の単位面先あたりの光束。1m2 あたり
にどれだけの光束が入っているかを表す値。
光源から離れれば離れるほど光束の量が少な
くなる。
半値角
TLN110
100
15
8
TLN105B
100
12
26.5
TLN115A
100
15
21
TLN201
100
20
7
TLN231
100
60
16
今回の赤外線センサは、最大 10m ほどの通
信を要する可能性がある。10m 付近で通信
– 放射束 (Radiant Flux)
単位時間ないにある面を通過する放射エネル
ギー。このエネルギーが高くてもどれだけ明
るいか、どれだけの範囲を照らすかには、直
接関係しない。
すると仮定すると、センサの向きが安定しな
い、赤外線が届いていないなど不都合が生じ
るかもしれない。よって、半値角が大きく、
放射強度の (受信効率の) 高いものにしなけ
ればならない。今回は、TLN231(上表参考)
– 光度
光度は発光体が大きいほど、強くなる。 単
位面積あたりの光度を輝度といい、 発光体
や反射体の輝きを表します。カンデラは発光
する強さを表す、光度の単位である。
1本のろうそくの光の強さを1キャンドルで
ある。すなわち、ロウソクの光の強さが約1
カンデラ (cd) となる。
を使用することにした。
– 赤外 LED の計算
Vcc=5V
R
– 輝度
輝度は1平方メートルあたりのカンデラで表
38KHz
IR_LED
about 1mA
す。まぶしさのにつながるものである。
• 赤外 LED(TLN231)
図 60: LED とトランジスタ
– 赤外 LED の選定
赤外 LED の選定で重視することは、上で述
べた LED の放射強度と、半値角 ( 21 θ) であ
る。下に、入手できる赤外 LED を示す。
TLN231 に掛かる電流の最大定格は 100mA、
今回 LED に流す順電流は 70mA での LED
へ掛かる電圧は約 2V である。以上のことか
41
ら、Vcc は 5V より、
ボタンを押す。するとリモコンからは、ある決められ
たコマンドの赤外線がテレビに放たれる。そして、テ
レビは、受け取ったコマンドを認識して局をかえる。
(供給電圧 − CE 間電圧 − LED 電圧)
流したい電流
このしくみを、模型飛行船と基地局の間の通信に応用
させる。
=R
5 − 0.9 − 2
=
140 × 10−3
= 14[Ω]
(18)
(19)
Airship
LED 一つに対して 14[Ω] の抵抗をつける。
B.3
赤外線受信回路
図 63: テレビと飛行船
例えば、基地局が送信する場合指定したコマンドを送
りそれを飛行船が受信し、コマンドと一致した動作 (上
昇、直進など)、逆に飛行船から計算した値をコマンド
で送り、基地局でコマンドから得ることもできる。
1 1 1 1 0 1 0 1
command1
図 61: 赤外線受信機
command1
Vcc_5V
図 64: コマンドの送信
R
out
47uf
GND
図 62: 赤外線受信回路
B.4
LED での通信
リモコンのボタンを押すと、テレビの局が変わるの
は、赤外線通信をしているからである。例えば、電源
42
Airship
図目次
1
2
3
4
5
6
7
8
9
10
11
12
13
17
14
15
16
18
19
20
21
22
23
24
25
26
27
28
30
29
31
抽象度とプロセス . . . . . . . . . . . .
MOF 階層構造 . . . .
開発プロセス . . . . .
マッピング . . . . . .
組込みシステムの現状
組込み MDD プロセス
最終目標 . . . . . . . .
チャレンジ概要 . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
カメラの利用 . . . . . . . . . . . . . .
US マトリクス . . . . . . . . . . . . .
コンテスト . . . . . . . . . . . . . . .
コンパルソリー . . . . . . . . . . . . .
会場の様子 . . . . . . . . . . . . . . .
飛行船に搭載した回路 . . . . . . . . .
エンベローブ . . . . . . . . . . . . . .
飛行船ゴンドラ . . . . . . . . . . . . .
飛行船に搭載した回路 . . . . . . . . .
飛行船の直進-正回転時間と逆回転時間
飛行船基本動作の一例 . . . . . . . . .
X-Y 軸 制御戦略 . . . . . . . . . . . .
Z 軸 制御戦略 . . . . . . . . . . . . . .
GrPC-Airship の関係 . . . . . . . . . .
全体概念図 . . . . . . . . . . . . . . .
9
9
11
12
12
13
13
13
14
14
15
15
15
16
17
.
.
.
.
.
18
20
21
21
22
23
23
24
GrPC、Monitor、Height、Direction、
Position のステートマシン図 . . . . . .
25
33
34
Command のステートマシン図 . . . .
基地局実装クラス図 . . . . . . . . . .
26
27
35
36
超音波送信回路 . . . . . . . . . . . . .
角度 . . . . . . . . . . . . . . . . . . .
28
28
37
38
USMPU からの受信データ . . . . . . .
超音波送信機 . . . . . . . . . . . . . .
29
33
39
40
超音波送信回路 . . . . . . . . . . . . .
33
33
32
飛行船のオブジェクト図 . . . . . . . .
4
4
5
6
6
7
7
8
飛行船の実装クラス図 . . . . . . . . .
飛行船のシーケンス図 . . . . . . . . .
Umbrello での書き方 . . .
飛行船のステートマシン図
基地局の非同期シーケンス
基地局オブジェクト図 . .
基地局の同期シーケンス .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
超音波センサ振動子の運動 . . . . . . .
41
42
43
デューティー比 . . . . . . . . . . . . .
抵抗とコンデンサの関係 . . . . . . . .
34
34
34
44
45
46
47
48
49
50
51
52
53
54
56
Hex invertor In-Out 特性 . . .
波形の比較 . . . . . . . . . .
ADM3202 出力電圧特性 . . .
超音波受信会回路 . . . . . . .
反転増幅回路 . . . . . . . . .
オペアンプの出力電圧特性 . .
AC フォトカプラ . . . . . . .
AC フォトカプラの特性 . . .
飛行船の地面からの高さ . . .
3 端子レギュレータの基本回路
カメラから見た赤外線 . . . .
赤外線送信機 . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
35
35
35
36
36
36
36
36
37
38
39
39
57
55
58
59
60
61
62
63
64
赤外線送信時のバースト波形 . . . . . .
39
40
40
40
41
42
42
42
42
無安定動作回路 . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
赤外線送信回路 . . . . . . . . . . . . .
タイマー IC833Hz と 26KHz . . . . . .
タイマー IC の出力波形
LED とトランジスタ
赤外線受信機 . . . .
赤外線受信回路 . . .
テレビと飛行船 . . .
コマンドの送信 . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
表目次
43
1
2
5
3
4
6
MDA モデル . . . . . . . . . . . . . . .
組込みシステムでのモデリング効果 . .
ハードウェアとソフトウェアの機能分割
US マトリクス座標 . . . . . . . . . . .
日本科学未来館と砂漠との比較 . . . .
前進後退時のモータ回転時間と距離 . .
5
7
10
11
12
14
7
8
旋回時のモータ回転時間と角度 . . . .
14
17
9
10
自律飛行システム中の提供物利用状況 .
飛行船モデルの作成プロセス . . . . . .
ImgPC からの受信データ . . . . . . .
26
28
11
12
提供 API の結果スケジュール . . . . .
開発スケジュール . . . . . . . . . . . .
31
31
13
14
Inverter DC 特性 . . . . . . . . . . . .
光の単位 . . . . . . . . . . . . . . . . .
35
41
15
LED 一覧 . . . . . . . . . . . . . . . .
41
参考文献
[1] 社団法人情報処理学会ソフトウェア工学研究会
”MDD ロボットチャレンジ 2004 産学連携による
組込みソフトウェア開発実践”
社団法人情報処理学会,2005
[2] Leon Starr,”Executable UML 実践入門”
CQ 出版株式会社 2004
[3] Linux オンラインマニュアル
http://www.linux.or.jp/JM/INDEX/ldp.html
[4] 独習 UML
株式会社テクノロジックアート 著 長瀬嘉秀/橋本
大輔 監修 株式会社 翔泳社 2005
[5] MDD ロボットチャレンジ競技仕様書
MDD ロボットチャレンジ 2005 推進委員会/審査
委員会
[6] 組み込み UML-eUML によるオブジェクト指向組
み込みシステム開発
著 渡辺博之/堀松和人/渡辺政彦/渡守武和記 翔
泳社 2002 年
[7] MDA(モデル駆動アーキテクチャ) と MDD(モデ
ル駆動開発)
著 沢田篤史 京都大学学術情報メディアセンター
[8] Executable UML 実践入門クラス・モデルをいか
に作成するか
著レオン・スター 監訳 長瀬嘉秀/二上貴夫 CQ 出
版株式会社
44