document15_B.pdf

公立はこだて未来大学 2011 年度 システム情報科学実習
グループ報告書
Future University Hakodate 2011 System Information Science Practice
Group Report
プロジェクト名
モノを動かすソフトウェアプロジェクト
Project Name
Applied Embedded System
グループ名
ラジコンヘリ班
Group Name
Radio-controlled model helicopter Group
プロジェクト番号/Project No.
15-B
プロジェクトリーダ/Project Leader
b1009030
Mayuki Komaki
小牧真幸
グループリーダ/Group Leader
b1009066
Yoshitaka Ono
小野 義貴
グループメンバ/Group Member
b1009066
小野 義貴
Yoshitaka Ono
b1009020
横井 史也
b1009070
今 竜也
b1009081
吉田 孝太郎
Humiya Yokoi
Tatsuya Kon
Koutarou Yoshida
指導教員
長崎健准教授
佐藤仁樹教授
Advisor
Takeshi Nagasaki assaociate professor
Hideki Sato professor
提出日
2012 年 1 月 18 日
Date of Submission
Janualy 18, 2012
概要
我々はラジコンヘリの自律飛行を目的として, 目的地を検出するための画像処理プログラム, ホ
ストコンピュータとラジコンヘリの通信プログラム, 非線形多変量解析に基づくラジコンヘリ
の物理モデル, および簡易最適制御を用いた自律飛行プログラムを開発した.
キーワード
キーワード ラジコンヘリ, 画像処理, 自律飛行, 非線形多変量解析, 簡易最適
制御
(※文責: 今 竜也)
-i-
Abstract
We developed an automous control program of radio-controlled helicopter, which contains image processing program for detecting a destination, a communication program
to connect a host computer and a radio-controlled helicopter, a physical model of a
radio-controlled helicoputer based on nonlinear multivariate analysis, and an automous
control program using simple optimal control.
Keyword
radio-controlled helicopter, image processing, autonomous control, nonlinear multivariate analysis, simple optimal control
(※文責: 今 竜也)
- ii -
目次
第1章
背景
1
1.1
現状及び問題点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
課題の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
課題
3
第2章
2.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
通常の授業ではなくプロジェクト学習で行う利点 . . . . . . . . . . . . . .
3
ラジコンヘリの仕様と通信 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
本プロジェクトにおける目的
2.1.1
2.2
2.3
2.4
2.5
2.2.1
ラジコンヘリの規格 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.2.2
動作環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2.3
ラジコンヘリのハード . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2.4
ラジコンヘリの通信手続き . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.5
センサについての検討 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.6
ラジコンヘリのセンサの切り替え . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.7
ソフトウェア開発キットの通信不具合解消 . . . . . . . . . . . . . . . . . .
6
2.2.8
ラジコンヘリの仕様変更
. . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.2.9
ラジコンヘリの仕様変更への対応 . . . . . . . . . . . . . . . . . . . . . . .
7
2.2.10 ラジコンヘリのカメラ切り替え . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2.11 コンソール画面の二画面化 . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.2.12 コンソール画面の不具合解消 . . . . . . . . . . . . . . . . . . . . . . . . .
8
画像処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3.1
ラジコンヘリのピクセルデータ . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3.2
目標物の位置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.3.3
目標までの距離測定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.3.4
色判別プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.3.5
形状判別プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.3.6
赤丸判別のプログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.3.7
楕円検出 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.3.8
ラジコンヘリの画面に文字の描写 . . . . . . . . . . . . . . . . . . . . . . .
16
2.3.9
ラジコンヘリの表示画面の二画面化
. . . . . . . . . . . . . . . . . . . . .
17
ラジコンヘリの物理モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2.4.1
行列式の計算プログラム
. . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2.4.2
ダイナミックスのモデル化 . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.4.3
検算プログラムの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
2.4.4
誤差を検出するプログラム . . . . . . . . . . . . . . . . . . . . . . . . . .
20
2.4.5
次元数の増加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.4.6
簡易最適制御 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
簡易最適制御プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
- iii -
第3章
3.1
第4章
4.1
第5章
2.5.1
オープンループプログラムの作成 . . . . . . . . . . . . . . . . . . . . . . .
22
2.5.2
ラジコンヘリのフィードバックプログラム . . . . . . . . . . . . . . . . . .
23
2.5.3
簡易最適制御を用いたプログラム . . . . . . . . . . . . . . . . . . . . . . .
24
企画
27
前章で紹介した以外の課題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
課題解決の詳細
37
スケジュール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.1.1
小野 義貴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.1.2
横井 史也 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.1.3
今 竜也 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.1.4
吉田 孝太郎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
結果
41
5.1
プロジェクトの結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
5.2
成果の評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
5.3
担当分担課題の評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
5.3.1
小野 義貴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.3.2
横井 史也 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.3.3
今 竜也 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
5.3.4
吉田 孝太郎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
第6章
今後の課題と展望
47
付録 A
用語集
49
付録 B
活用した講義
51
参考文献
53
- iv -
Applied Embedded System
第1章
背景
本プロジェクトグループでは, 動かずして物を運んでくる物体の作成を目標として活動を開始し
た. イメージとしては空を飛ぶ UFO キャッチャーの作成である. 陸を動く物体は障害物の回避に
横移動のみであり, 平面の移動であるため時間がかかる. しかし飛行物体は障害物を縦, 横の移動と
立体で移動するために回避が容易であり, 目的地まで陸移動よりも早く到達できるのである. また,
今までの本プロジェクトでは自動車など陸地を移動する物体の作成を行っていた. そのため今回の
プロジェクトでは, 新しく飛行制御に挑戦するという観点からも飛行物体が起用された. 飛行物体
にはラジコンヘリを採用し, アームの追加, 自動着陸, 自律飛行, 障害物の自動回避を実装すること
を目標とした.
(※文責: 小野 義貴)
1.1
現状及び問題点
従来のラジコンヘリはサイズが大きい, 操作が複雑である, 価格が高い, コンピュータからの操
作設定が容易ではないなどの理由から手軽に挑戦することができなかった. 近年ラジコンヘリ,
AR.Drone が販売された. このラジコンヘリはソフトウェア開発キットの公開によるソフトウェア
の開発のしやすさ, 操作性, 安全性の向上や低価格から手軽にソフトウェアの開発ができる.
ラジコンヘリはソフトウェア開発キットが公開されているものの, 本来は iPhone 上で操作する
物であり, iPhone の傾きセンサを利用して操作を行うために操作の難しさが目立つ. また, ソフト
ウェア開発キット自体にもエラーやバグが多数存在しており, 中には公式ホームページ上で宣言さ
れているバグやエラーもある. 他にもラジコンヘリは飛行物体であるため室内においても, 風など
の外乱の影響を簡単に受けてしまう問題が挙げられる.
(※文責: 小野 義貴)
1.2
課題の概要
本プロジェクトグループの課題は, ラジコンヘリを使用して自律飛行させることである. ラジコ
ンヘリとは別に操作をするコンピュータが存在し, 人間がコンピュータでラジコンヘリを操作する.
その後, ラジコンヘリのカメラによって目的地を発見した場合, 自律飛行を行い, 目的地に着陸する
ことを動作目標とした. 自律制御をすることによる利点は 2 つある. それは, コンピュータに判断
させ目的地へと到着させる, 人が直接操作することができる. また, ラジコンヘリを iPhone 上での
操作からコンピュータ上での操作への移行, アームの実装, 目的地の判別, 障害物の判別, 自律飛行,
障害物の回避, 目的地への自動着陸も課題として挙げられる. iPhone 上での操作からコンピュー
タ上での操作への移行は, ラジコンヘリを操作する上で最も重要な課題であり, ソフトウェア開発
キットの解析が必要である. アームの実装はラジコンヘリがどれほどの重量に耐えることができる
のか, 目標物を持ち上げる余裕があるかなど問題が存在する. 目的地の判別は, ラジコンヘリに実装
されているカメラを使用し, 物体判別の画像処理プログラムの知識, 作成が課題となる. 自律飛行
Group Report of 2011 SISP
-1-
Group Number 15-B
Applied Embedded System
は, ラジコンヘリのソフトウェア開発キットの解析, 開発のためにプログラムの知識, 技術が必要で
ある. また, ラジコンヘリの空間情報を取得することや, 処理するプログラム, ラジコンヘリそのも
のが単位時間当たりに進む距離のデータの取得が課題である. ラジコンヘリの単位時間あたりに進
む距離のデータを取得することによって, ラジコンヘリの数秒後の位置情報を計算することができ
る. この計算を利用することによりラジコンヘリの動作を予測でき, 障害物の回避及び自動着陸の
精度が向上する. 障害物の回避は, ラジコンヘリにセンサの実装が必要である. センサの実装には
アームの実装と同じくラジコンヘリの重量の問題が挙げられる.
(※文責: 小野 義貴)
Group Report of 2011 SISP
-2-
Group Number 15-B
Applied Embedded System
第2章
2.1
課題
本プロジェクトにおける目的
ラジコンヘリのソフトウェア開発キットを用いてラジコンヘリの自動着陸を目的とする. 自動
着陸の条件は 3 つある. 1 つ目は目的地が赤色の丸である. 2 つ目は目的地発見までは人間がコン
ピュータ上でラジコンヘリを手動操作する. 3 つ目は目的地を発見したら着陸の処理を手動でス
タートするである. ラジコンヘリを自動的に着陸させるためにラジコンヘリが単位時間当たりに進
む距離を知る必要がある. そして, 単位時間当たりのデータからラジコンヘリが数秒後に存在する
位置の計算を行うことで自動着陸の精度が上がる. このために必要な技術として目的地を発見する
ために必要な画像処理のライブラリ OpenCV の知識及び技術, ソフトウェア開発キットに使用さ
れている C 言語, C++ 言語の知識と技術, ソフトウェア開発キットの解析, ラジコンヘリのデータ
の取得, 計算にはオペレーションズリサーチ, 制御理論, 行列計算の知識が挙げられる. プロジェク
トを通してそれらのことで活用する.
(※文責: 今 竜也)
2.1.1
通常の授業ではなくプロジェクト学習で行う利点
本プロジェクトグループは, 1 年を通して行う. そのためスケジュール管理, グループメンバー
との協力が利点として最初に挙げることができる. 複数人で同じ目標に向かって作業するため, グ
ループメンバーそれぞれに別々の仕事が割り当てられ複数の作業工程を並列的に進めることができ
る. よって, 複数の仕事が同時に進むことで個人で作業するよりも早く全体の工程が進むため個人
で行うよりも高く目標を設定することができ, 且つ完成度がより高い成果を挙げることができる.
(※文責: 吉田 孝太郎)
2.2
2.2.1
ラジコンヘリの仕様と通信
ラジコンヘリの規格
機体を選定するにあたりソフトウェアの開発ができること, 超音波センサなど追加部品を搭載し
ても飛行できること, 低コストであること, 安全性が高いことの 4 つを条件に設定した. これらを
条件に設定した理由は 3 つある. (1) ソフトウェアに関して、本プロジェクトが”モノを動かすソ
フトウェア”であるため. (2) 積載重量に関して追加でセンサを導入する予定であったため. (3) 安
全性に関して, 自律飛行を行う上で予期せぬ事態に陥った場合, あるいは衝突した場合でも保護す
るクッションや緊急停止など危険を回避するものが必要である. これらの条件を満たすラジコンヘ
リとして Parrot 社の AR.Drone を採用した. 図 2.1 は AR.Drone の全体像である. AR.Drone
を採用した理由として, (1) ソフトウェア開発に関して, AR.Drone は Parrot 社からソフトウェア
開発キットが無料提供されており, プログラムの追加, 改変が非常に容易であったため. (2) コスト
に関して, 平成 23 年 5 月の時点で 299 ドル, 日本円で約 3 万円であったため. (3) 安全性に関して,
Group Report of 2011 SISP
-3-
Group Number 15-B
Applied Embedded System
AR.Drone にはハルと呼ばれる室内用保護クッションが付属している, プロペラに物体が触れると
緊急停止する機能が備わっているため. (4) 重量に関して, 300g までは搭載することが可能なこと
が確認できた.
(※文責: 今 竜也)
図 2.1 ラジコンヘリの全体像
2.2.2
動作環境
本題では使用したソフトウェアの動作環境を述べる. 使用 OS は windows Vista 32bit 版であ
る. 開発環境は Microsoft Visual C++ 2008 Express Edition である. ソフトウェア開発キット
は AR.Drone SDK 1.5 version である. 画像処理は OpenCV 1.1 pre である. 通信規格は Wi-Fi :
IEEE 802.11b/g である.
(※文責: 今 竜也)
2.2.3
ラジコンヘリのハード
ラジコンヘリは4つのプロペラ, 水平と垂直にある2つのカメラ, 腹部にある超音波センサ, 中央
の基板, AR.Drone 専用バッテリー, ラジコンヘリ外部を保護するハル(保護クッション)で構成さ
れている. 最高飛行速度は 18km/h で最高高度は 6m である. プロペラは 15W の 3500rpm でブラ
シレスモーターを採用している. 充電池は AR.Drone 専用のリチウムポリマーバッテリーである.
90 分の充電で約 12 分の飛行が可能となっている. ラジコンヘリの基盤, プロペラ, モーターなどは
部品別で自由に取り替えることもできる. 例えばラジコンヘリの一部が破損した場合, 破損した部
品を交換することで修理することが可能である. 水平カメラは画角 93°で解像度は 640 × 480 と
なっている. 腹部カメラは画角 64°で解像度が 176 × 144 となっている. また, 腹部カメラは慣性
計測ユニットと連結しているため弱い風による横揺れを補正するため安定した飛行が可能となって
いる. センサは腹部に超音波高度計が搭載され, 計測可能高度は 6m から 20cm である. 内部には 3
軸加速度センサ, 2 軸ジャイロスコープ, 1 軸偏揺れ精密ジャイロスコープ が搭載されている.
Group Report of 2011 SISP
-4-
Group Number 15-B
Applied Embedded System
(※文責: 今 竜也)
2.2.4
ラジコンヘリの通信手続き
本題ではコンピュータとラジコンヘリの通信の手続き方法を述べる. 手続き方法は以下の 5 つの
手順で行う. (1), ラジコンヘリと通信を行うコンピュータの立ち上げを行う. (2), ソフトウェア開
発キットのソリューションを Microsoft Visual C++ 2008 Express edition で立ち上げる. (3), ラ
ジコンヘリとリチウムイオンバッテリーを接続して, ラジコンヘリの 4 つのランプが赤色から緑
色に変化することを確認する. (4), ラジコンヘリと無線ネットワーク接続を行う. (5), Microsoft
Visual C++ 2008 Express edition でソフトウェア開発キットのプログラムを実行する.
本プロジェクトでは OS, ”Windows Vista 32bit 版”を使用した. しかし, 他 OS ではラジコン
ヘリの通信を行わなかった. そのため, 他 OS を用いて今回行った通信手続き方法が適用されるか
は検証していない. よって, 他 OS でラジコンヘリと通信する場合, 注意をする必要がある.
(※文責: 吉田 孝太郎)
2.2.5
センサについての検討
ラジコンヘリが障害物の回避を行うためには水平カメラだけでは 3 次元空間を正確に認識するこ
とができない. そのため追加でセンサの導入を検討した. しかし今回は導入を見送った. 見送った
理由として時間的余裕が見つけられなかったためである. 当初の到達目標として障害物の回避と自
動着陸の 2 つを挙げていた. 課題の優先度を決定した際に障害物回避の課題優先度を低く設定し
た. 本プロジェクトグループで行った再検討では, 進捗状況と残りの課題を比べた結果すべての課
題を達成することが困難だと判断したため優先度の低い障害物回避を到達目標から除外した. その
ため障害物回避に含まれていたセンサの導入が見送られた.
(※文責: 今 竜也)
2.2.6
ラジコンヘリのセンサの切り替え
ラジコンヘリには腹部センサがあらかじめ搭載されている. この腹部センサによってラジコンヘ
リは高さを判別している. そのため障害物の回避及び, 目標物をアームによって掴む場合, 腹部セン
サが反応し, 自動的に急上昇してしまう. これを回避するために腹部センサの ON 及び OFF の切
り替えが課題として挙げられる. 本プロジェクトの課題として自動着陸と設定した. そのため障害
物の自動回避および, 目標をアームによって掴むなどの動作はなく, この課題は検討のみで終了し
た. 障害物の自動回避を行う場合この課題は最優先で行う必要があるため, 今後の課題ともいえる.
また, 腹部センサの ON, OFF はラジコンヘリのソフトウェア開発キットを用いて設定することが
可能である. その為この課題を行う場合はに関係する講義は, プログラミング演習 1・2, 情報アー
キテクチャ演習の講義が挙げられる. また必要技術として C++ 言語, C 言語の技術がある.
(※文責: 今 竜也)
Group Report of 2011 SISP
-5-
Group Number 15-B
Applied Embedded System
2.2.7
ソフトウェア開発キットの通信不具合解消
公式ホームページの AR.Drone open API platform[3] を参照にソフトウェア開発キットの不具
合を解消した. ソフトウェア開発キットのソースファイルのうち誤った宣言を行われている箇所が
3 つある. その 3 つのうち, 2 つは画像に関するプログラムにあり, 他の 1 つはラジコンヘリから送
信される情報を扱うプログラムにある. それらをラジコンヘリの仕様と同じ宣言に書き換えること
で通信の不具合は解消された. これを行うことで, ラジコンヘリとコンピュータとの通信が可能に
なった. そしてカメラ情報を扱うプログラムを変更し, 図 2.2 の構造体を加える. 同じくカメラ情
報を扱うプログラムにある switch 文に図 2.3 を加える. カメラ情報を扱うプログラム中の switch
文に図 2.3 のような処理が含まれておらず, プログラムを実行した時点でエラーが出る. これらの
プログラム変更をして通信エラーは解消された. その結果, コンピュータからのラジコンヘリの動
作制御が可能になった.
(※文責: 吉田 孝太郎)
図 2.2 構造体の例
図 2.3 switch 文の例
2.2.8
ラジコンヘリの仕様変更
ソフトウェア開発キットは元々カメラ画像を表示するときにライブラリである DirectX を使用
していた. しかし, 本プロジェクトは画像処理を利用しなくてはならない. なぜならば, 自律飛
行をする際に目的地判別をしなくてはならないからである. また, 画像処理はライブラリである
OpenCV での開発が適していた. したがって, ソフトウェア開発キットの画像出力方式を DirectX
から OpenCV へ変更しなくてはならなかった. ふろくらぶろぐ [6] を参照して画像出力方式を変
更した. ソフトウェア開発キットに 6 ファイルを追加した. そして, DirectX で画像出力方式を
OpenCV での画像出力方式に変更した. また, 同じく画像出力方式に図 2.4 の関数を追加した. 以
上の操作を加えることによって OpenCV での画像出力を可能にした.
(※文責: 吉田 孝太郎)
Group Report of 2011 SISP
-6-
Group Number 15-B
Applied Embedded System
図 2.4
2.2.9
関数の例
ラジコンヘリの仕様変更への対応
ラジコンヘリのソフトウェア開発キットは初期状態は DirectX 上で動作している. しかし, 着陸
場所を判別するための画像処理は OpenCV 上で実行している. その為, ラジコンヘリのソフトウェ
ア開発キットを OpenCV 上で動作させる必要がある. ソフトウェア開発キットの使用を DirectX
から OpenCV へと変更しただけでは画面を表示することも画像処理を行うことも困難である. し
たがって, OpenCV 上でどのように動作しているかを把握し, 画像処理が正常に動作できているか
を確認するためにラジコンヘリの表示画面をコンピュータ上で作成する必要があった. ソフトウェ
ア開発キット上のカメラ及び画像処理に対応するプログラムと, カメラの画像を DirectX 上から
OpenCV 上へとコンバートしているプログラムソースコードの解析を行った. その後画像処理を
行いやすいよう, 下準備として必要な変数及び複数の表示画面の作成を行った. また, 現在は画像関
連を OpenCV でそれ以外の操作を DirectX 上で動作させている. この課題に関係する講義は, 画
像工学, プログラミング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言
語, OpenCV ライブラリの技術が必要である.
(※文責: 小野 義貴)
2.2.10
ラジコンヘリのカメラ切り替え
ソフトウェア開発キットには水平カメラと腹部カメラの切り替え処理が存在していなかった. そ
のため水平カメラと腹部カメラの切り替え処理をソフトウェア開発キットの中に加えた. この切り
替え処理はキーボードを使用し, 特定のキーを押すごとに水平カメラ, 腹部カメラ, 水平カメラと腹
部カメラとの混合 2 種類の計 4 パターンに切り替えることができる. カメラ切り替え処理を書き
加えたことで自由に水平カメラ, 腹部カメラを設定できるようになり, 初期状態のカメラの表示設
定も可能になった. その為, 腹部カメラを初期設定としてコンピュータ上に表示することができる.
しかし, ラジコンヘリの初期設定が水平カメラであるため初回起動は必ず水平カメラになる. 一度
起動したラジコンヘリとの通信を切らずに起動した場合は指定した初期状態のカメラで起動するこ
とができる. また, 初期設定が水平カメラであるためか, 腹部カメラを初期設定と指定して起動する
ことを想定されていないためか, 起動時にエラーが発生することがある. このほかにもラジコンヘ
リのソフトウェア開発キット自体にもバグが存在し, カメラの切り替えを行うときにエラーが発生
する. 以上より 完全なカメラの切り替えを実現するにはラジコンヘリのソフトウェア開発キット
のより深い理解と解析が必要であり今後の課題である. この課題に関係する講義は, 画像工学, プロ
Group Report of 2011 SISP
-7-
Group Number 15-B
Applied Embedded System
グラミング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語, OpenCV
ライブラリの技術が必要である.
(※文責: 小野 義貴)
2.2.11
コンソール画面の二画面化
初期のラジコンヘリのソフトウェア開発キットではエラーやバグのため, コンソール画面が全て
エラーが表示され続けていた. そのためコンソール画面に文字の表示やソフトウェア開発キットに
元々記述されているラジコンヘリの状態表示を行う処理が正確に表示することができなかった. こ
れを踏まえ, ラジコンヘリの表示を別のコンソール画面またはその代案となる画面に表示すること
を目標とし, コンソール画面の分割, または 2 画面化を検討した. しかしコンソール画面を 2 画面
化することはできず, 代案となる表示画面を選定, 特定できなかったため, ラジコンヘリのソフト
ウェア開発キットのコンソール画面表示エラーを再度修正することとした. この課題に関係する講
義は, プログラミング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語の
技術が必要である.
(※文責: 小野 義貴)
2.2.12
コンソール画面の不具合解消
図 2.5 は不具合が解消される以前のコンソール画面である. そして, 図 2.6 は不具合が解消され
た後のコンソール画面である. 図 2.5 のようにプログラムを実行するとコンソール画面にエラーが
表示されていた. 具体的にはコンソール画面に「checksum failed」と表記されていた. よって, ラ
ジコンヘリからコンピュータに送信されるデータの確認が困難ということである. そのことから,
ラジコンヘリからのデータはコンピュータに送信されていることがわかる. しかし, プログラム内
でそのデータを受け渡し間違いしているということがわかった. 公式の開発者用サイトを参照に
した. その結果, 図 2.3 の switch 文の空文字列を代入している箇所で問題があった. その箇所を”
((uint8 t ) navdata option ptr) + (navdata option ptr->size)”に置き換えた. その結果, 図 2.6
のコンソール画面が表示された.
(※文責: 吉田 孝太郎)
Group Report of 2011 SISP
-8-
Group Number 15-B
Applied Embedded System
図 2.5 不具合解消前のコンソール画面
図 2.6 不具合解消後のコンソール画面
2.3
2.3.1
画像処理
ラジコンヘリのピクセルデータ
簡易最適制御及び画像処理のみの自動着陸プログラムを実行するにあたり, ラジコンヘリのカメ
ラを使用している. 表示上のプログラムは目的地の中心とカメラの画像の中心の距離から進む方向
を決定している. しかし, 自動着陸のプログラムを作成するにあたり取得した物理モデルのデータ
はセンチメートル単位である. ラジコンヘリの表示画像はピクセルで構成されているが, カメラが
写した画像と実際の距離の縮尺がわからなければ, 1 ピクセル当り何センチメートルで計算すれば
いいのかがわからなくなる. その為にこの課題が必要であった. この課題を解決するために, ラジ
Group Report of 2011 SISP
-9-
Group Number 15-B
Applied Embedded System
コンヘリのカメラが写すピクセル当りの距離をはかり, その距離が何センチメートルであるかを実
際に計測した. このとき, 一度だけの計測であると飛行物体である特性上, 高さによって見える距離
が変化する. そのために複数の高さでラジコンヘリのカメラの距離と実際の距離との対比を計測し
た. この課題に関係する講義は, 画像工学である. また C++ 言語, C 言語, OpenCV ライブラリの
技術が必要である.
(※文責: 今 竜也)
2.3.2
目標物の位置
腹部カメラを用いたフィードバック制御ではラジコンヘリと目標物の位置関係をラジコンヘリが
判断して自動的に中心へと動く仕組みになっている. そのためラジコンヘリに実装されている腹部
カメラから目標物の位置を知る必要があった. 手順として位置を知るための座標 0 の地点をラジコ
ンヘリの表示画面の中央に設定する. 次に, 画像処理を行い発見した目標物から中心点の座標を取
得する. 発見した目標物の座標をそれぞれ X 軸, Y 軸に分け, ラジコンヘリの表示画面の中心点と
X 軸 Y 軸座標の差をそれぞれ計算する. 計算して出た座標の差をピクセルデータからセンチメー
トル単位へと変換し, 実際の距離を求め, ラジコンヘリから目標物の位置を求めた. この求めた位置
情報を, 画像処理を用いたフィードバックプログラム及び簡易最適制御のプログラムに使用した.
この課題に関係する講義は, 画像工学, プログラミング演習 1・2, 情報アーキテクチャ演習の講義
である. また C++ 言語, C 言語, OpenCV ライブラリの技術が必要である.
(※文責: 今 竜也)
2.3.3
目標までの距離測定
ラジコンヘリと着陸地点との距離を測ることができなければ, 自動着陸をすることができない.
なぜなら, 着陸地点を発見することができても着陸地点まで離れている距離を判断することができ
ない. 結果として到達目標を通過して行き過ぎる, 検討違いの方向へと進行していくなど問題が発
生する. また, 簡易最適制御を行うにあたり, 着陸地点への明確な距離が判明していなければ計算を
行うことができない. そのためこの課題が必要である. 手順として, 今回の目標までの距離は, 到
着目標の中心からラジコンヘリのカメラの中心がどの程度離れているかで判断することとする. こ
の課題の初期状態はピクセルを単位として距離が判明する. 目標までの距離計測にはラジコンヘリ
の基本スペックに存在する腹部カメラと高さセンサを用いた. そして, 前述したラジコンヘリのピ
クセルのデータから実際の距離を計算によって求めた. また, この課題を行うに当り, まず最初に
web カメラを用いて実際の距離を計測するプログラムを作成した. このプログラムは手順の通りに
なっているが, 実際の距離だけはラジコンヘリで計測したピクセルデータを用いて計算している.
次に, web カメラを用いたプログラムをラジコンヘリのソフトウェア開発キットに追加し, 実装し
た. この課題に関係する講義は, 画像工学, プログラミング演習 1・2, 情報アーキテクチャ演習の講
義である. また C++ 言語, C 言語, OpenCV ライブラリの技術が必要である.
(※文責: 今 竜也)
Group Report of 2011 SISP
- 10 -
Group Number 15-B
Applied Embedded System
2.3.4
色判別プログラム
特定の色を判別するために元画像を赤, 青, 黄の 3 色に分け, 指定の色とそれ以外の色に区別す
る. 今回は目標物の色を赤色としたので赤色を抽出した. 赤色を選んだ理由として, 赤, 青, 緑, 黒,
白の 5 色の中から最も鮮明に認識したからである. 認識した赤色を白, 認識しないそれ以外の色を
黒として 2 値化をする. 2 値化をする理由は 2 色で表せるので白と黒, すなはち 1 と 0 として扱え
るからである. 抽出する際に抽出する色のみを選択すると太陽光や屋内の照明など外部の影響で認
識することができない. そのため実際には, 抽出したい色よりも認識の範囲に幅を持たせて認識範
囲を広げる. 実際に認識する際に影響してくる太陽光や屋内の照明だが, 色認識を行う上で全てを
ノイズとして除外することは不可能である. なぜならば太陽光や照明はカメラを向けている向きや
距離, 時間帯が変化すれば光量や反射が変化するからである. そのため色認識を行う環境が変化す
る場合は認識範囲の調整が必要である. 図 2.7 は実際に使用したプログラムの例である. この課題
に関係する講義は, 画像工学, プログラミング演習 1・2, 情報アーキテクチャ演習の講義である. ま
た C++ 言語, C 言語, OpenCV ライブラリの技術が必要である.
(※文責: 今 竜也)
図 2.7 色判別プログラム例
2.3.5
形状判別プログラム
形状判別を行うにあたって, 多くの形状を検討した結果円形に決定した. 候補として挙がった形
状は円形, 正方形, H 型の 3 種類であった. 円形を選択した理由は, 2 つある. 1 つ目は形状が簡単
であるためにわかりやすい. 周囲と比較して目標として認識することが容易という利点が挙げられ
る. 2 つ目はどの方向から見ても同様の形状をしているためである. 円形の問題点として円から遠
ざかると円は歪んで楕円形に見えてしまう. 楕円形になった円は認識することができないが, 今回
使用したカメラは画角が狭いため円が歪む前にカメラから目標物が見えなくなるため懸念した問題
は起きなかった. 円形判別をするために画像をグレースケール化する. グレースケール化する理由
は, 使用した関数が 8 ビット,シングルチャンネル,グレースケールのいずれかしか対応していな
Group Report of 2011 SISP
- 11 -
Group Number 15-B
Applied Embedded System
いためである. グレースケール化した画像から円形が検出されるが, その際, 値は円の半径と中心点
の 2 次元座標 XY としてエンコードされる. 検出した円は元の画像に円と中心点の 2 つを描写す
る (図 2.8). 検出は円として認識した部分はすべて描写するため初期状態では多量で大小様々な円
形が検出される (図 2.9). 多量の誤認識を防ぐために検出する円形の最大半径と最小半径を設定し
て明らかに違う円形を除外する. しかしこの方法にも限界があり, 近似の円形は誤認識してしまう.
図 2.10 は実際に使用したプログラムの例である. この課題に関係する講義は, 画像工学, プログラ
ミング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語, OpenCV ライ
ブラリの技術が必要である.
(※文責: 今 竜也)
図 2.8 成功例
図 2.9 失敗例
Group Report of 2011 SISP
- 12 -
Group Number 15-B
Applied Embedded System
図 2.10 形状判別のプログラム例
2.3.6
赤丸判別のプログラム
2.3.4 と 2.3.5 で製作したプログラムを組み合わせて最終的にラジコンヘリに組み込むプログラ
ムを製作した. 手順として第 1 に, 色判別で 2 値化した画像を平滑化する. 平滑化する理由として,
平滑化を行わない場合と色判別で抽出した画像の 1 と 0 の境界部分が荒く, うまく円形として認識
しないためである. また, 平滑化する前の 2 値化画像は目標物の輪郭の解像度が荒く, 円形が欠け
ていたり円形の中に気泡のように穴が空いていたりするため平滑化をして欠けた部分や穴の空いた
部分をぼかしてなめらかな画像にする. 図 2.11 が平滑化をする前の画像で図 2.12 が平滑化した後
の画像である.
図 2.11 平滑化前
Group Report of 2011 SISP
- 13 -
Group Number 15-B
Applied Embedded System
図 2.12 平滑化後
平滑化した 2 値画像を用いて形状判別を行う. 2 値画像だが, グレースケールとして扱うことが
可能であるため使用することができる. 2 値画像で検出した円はカメラで取得した画像に描写する.
2 値画像と取得した画像はサイズが同じのため描写した部分が検出した部分に該当する. 図 2.14 が
円と中心点を描写した画像で図 2.15 が検出した半径と中心点の座標を表示したコンソール画面で
ある. 図 2.15 の値は画像上の値であるため実際の距離ではない. そのためラジコンヘリの腹部に搭
載されている超音波センサから取得できる高さの値と組み合わせて実際の目標物の位置を計算す
る. 今回2つのプログラムを組み合わせた理由として, どちらのプログラムも認識精度が低い点に
ある. 色認識は今回は赤なので赤色をした物体ならばすべて認識してしまう. 形状判別は円の大き
さは限定できるが類似の大きさの円は認識してしまう. どちらも範囲を狭めてしまうと認識するこ
とが難しくなってしまう. しかしこの2つを組み合わせることによってお互いの欠点を補う形でプ
ログラムを組むことができるので精度の向上が期待できる. 形状判別で大量に起こる誤認識を防ぐ
ために色判別で範囲をある程度限定することができる. そして色判別でできた画像を形状判別する
ことによって甘かった認識範囲から正しい範囲で認識することができる. しかしながら今回組み合
わせたプログラムでは円の形はほぼ真円なので色判別で多少ぼやけた画像でも認識することができ
るが色判別の時点でうまく抽出できずに円が欠けてしまうと形状判別がうまく機能してくれない.
逆に認識が過剰に反応して, 2値化がうまくいかず, 目標物以外のものが混ざってしまうことも多
かった (図 2.13). 今回はある程度範囲を抑えることに成功したがこの方法では環境が大きく変化す
ると対応することができない場合が出てくる. 実際に, 開発をしていた場所ではうまくいっていた
がデモンストレーションを行う環境に移って試したところ調整が必要になった. プログラム自体の
問題も残っている. プログラムを起動したままでいるとコンピュータがフリーズしてしまう現象が
起きてしまう. 原因は画像を取得する際にメモリの一部を確保して処理が終わったら解放するよう
にプログラムを組んでいたが, その確保と開放がうまく噛みあわず, 画像を取得するたびにメモリ
を確保し, その確保した部分が積み重なってメモリが限界を超え, コンピュータが停止することだ
と考えられる. 図 2.16 では 4 回起動した. メモリが増加していることが一見してわかるほどに増加
している. このように大きな課題が 2 つ残った. この課題に関係する講義は, 画像工学, プログラミ
ング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語, OpenCV ライブ
Group Report of 2011 SISP
- 14 -
Group Number 15-B
Applied Embedded System
ラリの技術が必要である.
(※文責: 今 竜也)
図 2.13 判別プログラムで発生したノイズ
図 2.14 プログラム描画例
Group Report of 2011 SISP
- 15 -
Group Number 15-B
Applied Embedded System
図 2.15
コンソール画面例
図 2.16 メモリの使用率
2.3.7
楕円検出
形状判別する1つの方法として楕円形を用いて判別する方法があった. 楕円形の利点は斜めから
目標を認識した場合でも円を認識することができる点である. 認識できる理由として, ラジコンヘ
リと目標物が離れていて円が歪んでいる場合でも円を楕円として認識することができるからであ
る. また, 楕円には最大半径と最小半径があるためそれらの差を求める. 求めた値と画像上の位置
を比べると目標物とラジコンヘリとの位置を知ることができる. しかしこの方法を使用するには正
しく目標物の形と画像上での大きさを認識する必要があった. 今回組んだ色識別のプログラムでは
プログラムの都合上目標物の大きさを取得することができなかったため楕円での形状認識を見送っ
た. この課題に関係する講義は, 画像工学, プログラミング演習 1・2, 情報アーキテクチャ演習の講
義である. また C++ 言語, C 言語, OpenCV ライブラリの技術が必要である.
(※文責: 今 竜也)
2.3.8
ラジコンヘリの画面に文字の描写
ラジコンヘリの仕様変更に対応した時, OpenCV の画像処理がラジコンヘリと代替装置として使
用した web カメラの両方で同じ動作をするか確認をしなければならない. そのために OpenCV で
簡単に動作することができる文字描画を使用した. 手順として, 最初に web カメラ上で文字描画を
Group Report of 2011 SISP
- 16 -
Group Number 15-B
Applied Embedded System
行い, その後ラジコンヘリで同様に処理を行うことで, OpenCV 上でソフトウェア開発キットが動
作するかの確認及び web カメラとの差異の確認にも使用した. また, ラジコンヘリのフィードバッ
クプログラム及び簡易最適制御のプログラムを使用していく過程でプログラムが正常に動作を開始
しているか, 画像処理によってプログラムが起動できる状態かを判断できる機能が必要であった.
その条件として, プログラムの動作開始をキーボードによる手動開始とした. プログラムの動作中
及びプログラムの動作を開始できる状態になった場合, ラジコンヘリのカメラを表示している画面
に文字を描画するよう設定した. 図 2.17 はラジコンヘリのカメラを表示している画面に文字描画
プログラムが動作している場合の画像である. この課題に関係する講義は, 画像工学, プログラミン
グ演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語, OpenCV ライブラ
リの技術が必要である.
(※文責: 小野 義貴)
図 2.17
2.3.9
文字描画例
ラジコンヘリの表示画面の二画面化
ラジコンヘリには腹部カメラと水平カメラの 2 つのカメラが搭載されている. その 2 つのカメラ
をコンピュータ上で同時表示するためにカメラの表示画面の 2 画面化を目標とした. しかしラジコ
ンヘリから送られてくる画像を画面に表示するために使われている処理は現在 1 つだけであるため
カメラの同時表示は完成することができなかった. これは今後発展させることができると考える.
また, 画像処理の結果を表示するための画面の作成のためにもこの課題は必要であった. 画像処理
を行う過程で 2 値化処理を行う必要があった. その画像処理の結果を確認するためには初期状態
の画面と画像処理結果を表示する画面の最低 2 つが必要であった. そのためこの課題に取り組み,
表示画面を複数作成することに成功した. そのほかにも初期表示の画面に色ごとのフィルターをか
けるために画面を増やし結果の表示を確認するために使用した. この課題に関係する講義は, 画像
Group Report of 2011 SISP
- 17 -
Group Number 15-B
Applied Embedded System
工学, プログラミング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語,
OpenCV ライブラリの技術が必要である.
(※文責: 小野 義貴)
2.4
ラジコンヘリの物理モデル
2.4.1
行列式の計算プログラム
図 2.18, 図 2.19, 図 2.20 は実際に使用したプログラムである. 配列 c, inv a は空の配列である.
また, 配列 a,b はそれぞれ定数行列であることを示している.
プロジェクト目標の自律飛行に必要であるラジコンヘリの位置予測式を作成する. そのため, 観
測データからラジコンヘリの動作を数式化をする. その際に行列の和, 積の計算と逆行列を利用
する. しかし, 観測データが膨大であるため人手を用いた行列計算を行うことは困難であり, コン
ピュータを用いた行列計算を行うことが効率的である. よって, 行列計算のプログラムを作成する
ことになった.
具体的には行列式の宣言方法の決定, 行列の和・積と逆行列のプログラム作成を行った. 行列式
の宣言方法は 2 次元配列を使用した. 理由として, 実際に使用する行列は 2 × 2 よりも多い次元数
を要するためである. 行列の和は for ループ構文を使用した. なぜならば, 行列の次元数の増減に対
応することで, 様々な行列和計算を可能にするためである. 配列cの各要素に配列 a と配列bの各
要素を足したものを代入してるのである. 行列の積も同じく for ループ構文を使用した. 図 2.19 は
3 重ループを使用している. 配列 c の各要素に配列 a と配列 b の各要素の積を足しているのである.
逆行列は BlueSky lab[8] を参考にした. 掃き出し法に用いるための単位行列を配列 inv a に作成す
る. そして, 掃き出し法によって逆行列を求める. 掃き出し法を用いた理由として, 逆行列にする際
に正方行列の次元数の増減に対応することで, 様々な正方行列を逆行列にすることを可能にするた
めである.
(※文責: 吉田 孝太郎)
Group Report of 2011 SISP
図 2.18
行列和のプログラム例
図 2.19
行列積のプログラム例
- 18 -
Group Number 15-B
Applied Embedded System
図 2.20 逆行列のプログラム例
2.4.2
ダイナミックスのモデル化
簡易最適制御を行うため, 非線形多変量解析に基づくラジコンヘリのダイナミックスのモデル化
を行い, それをプログラム化した. モデル化の手順は, 観測した物理モデルを基にあらかじめ定義し
たベクトル
をローデータの要素数分作成した. それらのベクトルの平均を求め, 観測データの共分散行列を
算出した. COVxx の逆行列 COV xx− 1 を求め, パラメータ
を算出した. 式 (9) と式 (3), 式 (4) から, パラメータ
を算出した. 式 (9) と式 (10) から,
Group Report of 2011 SISP
- 19 -
Group Number 15-B
Applied Embedded System
を算出した. 以上の手順によってラジコンヘリの t 秒後のダイナミックスをモデル化することが
可能となった.
モデル化のアルゴリズムを人手を用いた計算では, 計算量が肥大化するため, C 言語による計算
プログラムを作成し, 瞬時に正しいパラメータの値を算出することを可能にした. プログラムでは
物理モデルのローデータをテキストファイルにコピーし, ファイル読み込みによりデータを取得で
きるようにした. その際, for 文が繰り返された回数をカウントし, 定義したベクトル x の次元数と
要素数を記憶できるようにした. それにより, 定義したベクトル x の次元数や要素数に変動があっ
た場合もプログラムソースを書き換えることなく, 常に同様の計算を行うことが可能となった. つ
まり, 入力値の大きさや使用する機体が変更になり, パラメータチューニングを再度行う場合も, プ
ログラムソースを書き変えることなく対応することが可能となった. しかし, 現在のプログラムは,
定義したベクトル x が 18 次元より大きい場合, 正常な値を算出することができないという問題が
ある. 原因は, 逆行列の計算で値が肥大化しオーバーフローを起こすことである. この問題の解決
と, ベクトル x の次元数の増加が今後の新たな課題である. この課題に関係する講義は, プログラ
ミング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語の技術が必要で
ある.
(※文責: 横井 史也)
2.4.3
検算プログラムの作成
パラメータを求めるプログラムの計算アルゴリズムが正確である事を確認するため, 検算方法の
学習をし, それをプログラム化した.
検算の手順は, 10 個のベクトル x とパラメータ B, b0 を用意する. 式 (11) によりベクトル z を
10 個算出し, 10 個のベクトル x とベクトル z をパラメータを求めるプログラムで計算する. 用意
したパラメータの値と計算結果のパラメータの値がほぼ等しくなっていればアルゴリズムは正しい
といえる.
テキストファイルに用意した 10 個のベクトル x とパラメータ B, b0 をファイル読み込みし, 式
(11) を使用して z を算出する. 次に, パラメータを求めるプログラムからそのまま流用した計算ア
ルゴリズムで計算する. 計算結果と最初に用意したパラメータの値が同値である場合, コンソール
画面に”一致しました. 検算終了です.”と表示されるよう設定した. この課題に関係する講義は, プ
ログラミング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語の技術が
必要である.
(※文責: 横井 史也)
2.4.4
誤差を検出するプログラム
パラメータを使用して算出した座標の予測値と, 実際の座標との誤差の平均を計算するプログラ
ムを作成した. 物理モデルからベクトル x を式 (5) の計算にかけ, 計算結果と式 (2) のベクトル z
の位置・速度を比較し, 絶対値の計算により誤差をもとめる. 物理モデルで取得した要素数個分の
比較後, 座標誤差を足し合わせ, 要素数で割ることで平均を求める. 最終的に, 前後共に位置の誤差
平均を 3.0cm 以内に抑えることに成功した. しかし, この誤差によって自律飛行中に目的地を見失
う可能性があるため, 今以上の精度向上が今後の新たな課題となる. この課題に関係する講義は, プ
Group Report of 2011 SISP
- 20 -
Group Number 15-B
Applied Embedded System
ログラミング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語の技術が
必要である.
(※文責: 横井 史也)
図 2.21 誤差の平均を算出したコンソール画面
2.4.5
次元数の増加
ラジコンヘリのモデル化の際, 定義するベクトル x の次元数を増加させることにで座標の予測
位置の精度を向上させることが可能である. 目的地に自動着陸させるためには, 実際の位置と予測
した位置の誤差をどれだけ小さくできるかが課題となる. 初期の次元数は 6 次元で, 誤差平均は
7.5cm であるのに対し, 最終的には 18 次元にまで拡張し, 誤差の平均を 4cm 以上縮めるた. しか
し, 次元数を増やす過程で, 同じ項目を加えたとしても, 加える順番が違うだけで精度に違いが見ら
れた. プログラムの問題も考えられるが, 18 次元より小さい値が正しく算出できない組み合わせも
見られた. 以上の理由からも, この課題は向上の余地があるといえる. プログラムを更に多くの次
元を扱う計算にも耐えられるよう拡張すること, より誤差の平均が 0 に近づく組み合わせを発見す
ることが今後の新たな課題となる. この課題に関係する講義は, 確率統計の講義である. また C++
言語, C 言語の技術が必要である.
(※文責: 横井 史也)
2.4.6
簡易最適制御
非線形多変量解析により簡易最適制御を用いることを決定した. 当初の計画は PID 制御を行う
ことであった. PID 制御とは指令操作量を, 偏差信号の比例成分, 積分成分, 微分成分の和で決定す
る制御方法である. しかし, 私たちが使用するラジコンヘリは出力方法が ON/OFF であるため制
御方法としては適さないと判断した. 別の案として ON/OFF で制御できる Bang-Bang(ヒステ
Group Report of 2011 SISP
- 21 -
Group Number 15-B
Applied Embedded System
リシス)制御に着目した. Bang-Bang 制御とは, 上限値と下限値を設けて, その間に制御量が留ま
るように ON/OFF を繰り返す制御のことである. 具体例として, ヒーターが挙げられる. 室温が
20 度以下になればヒーターを起動して, 25 度以上になればヒーターを停止するなどである. しか
し, 私たちが用いる出力パターンは多次元である. そのため, この制御方法では制御式を求めること
が困難になると判断した. そこで, 現在の時間を t 秒とする. そのとき t+1 秒後の全てのラジコン
ヘリの位置から最も目標に近くなるような位置を選択して, 出力を決定する簡易最適制御を用いる
ことにした.
ラジコンヘリの出力の大きさを一定とする. その中で現在ラジコンヘリがいる位置から前後左右
4 方向の出力が可能である. したがって, t+1 秒後のラジコンヘリは前方向に出力した位置, 同じく
他 3 方向も出力した位置として 4 ある. それに加え出力しなかった位置もあるので 5 ある. その中
で最も目標位置に近い出力を選択して, ラジコンヘリの出力を決定する.
(※文責: 吉田 孝太郎)
2.5
簡易最適制御プログラム
飛行速度の変更
ラジコンヘリは傾きによってその速度が決定する. ラジコンヘリのソフトウェア開発キットの仕
様では, 初期に設定された一定の速度でしか飛行することができない. しかし, 画像処理を取り入れ
た動作をさせるには初期設定の速度では早いため簡単に目標地を見失う, またラジコンヘリの傾き
が大きい場合, 移動中の意図しない状況で着陸してしまう. そのためラジコンヘリの傾きを変更し
飛行速度を調整する処理を書き加えた. 現在ラジコンヘリの傾きは 100 段階まで変更する事が可能
である. これをラジコンヘリの自律飛行の簡易プログラム, フィードバックプログラム, 簡易最適
制御を用いたプログラムに使用した. この課題に関係する講義は, プログラミング演習 1・2, 情報
アーキテクチャ演習の講義である. また C++ 言語, C 言語の技術が必要である.
(※文責: 小野 義貴)
2.5.1
オープンループプログラムの作成
簡易的な動作制御の実験として, 決められた動きをするオープンループプログラムの作成をした.
実際に組まれたプログラムはラジコンヘリが離陸してある程度前進, その後右旋回をして元の位置
に戻り着陸するものである. 動作内容から前進する時間を同じにすることでほぼ同じ位置に戻って
くると予想した. よって, ライブラリである Windows API に含まれ, そのときの時刻を取得する
関数を利用した. 実例として, プログラム起動時の時刻を変数 old time に代入した. その後プログ
ラムが回る毎に変数 new time に時刻を代入した. そして, 変数 new time から変数 old time を引
いたもの, つまりプログラム起動時から経った時間を変数 time に代入した. この変数と if 構文で
分岐を利用して簡易的な動作プログラムを作成した.
アルゴリズムとしては手動でプログラムの実行を行う. それと同時にタイマ関数が始動する. そ
してプログラム実行後から 5 秒経過すると離陸ホバリングを開始, 10 秒経過すると前方移動を開始
する. 次に 15 秒経過すると前方移動を停止してホバリング状態になる. 次に 16 秒が経過すると右
旋回を開始, 17 秒経過すると右旋回を停止してホバリング状態になる. 次に 18 秒経過すると前方
移動を開始, 23 秒経過すると前方移動を停止してホバリングを開始する. 最後に 24 秒経過すると
Group Report of 2011 SISP
- 22 -
Group Number 15-B
Applied Embedded System
ホバリング状態から着陸を開始する.
結果として, 予定した動作を行った. しかし, 風の影響を受けてしまい動作に安定感がなかったこ
とと, 決められた動作しかできないことが問題点としてあげられた. また, プログラムが回る毎に変
数へ時刻を代入するため, 等間隔で時刻が代入されないのである. そのため正確な時間が得られな
い問題点もあげられる.
(※文責: 吉田 孝太郎)
2.5.2
ラジコンヘリのフィードバックプログラム
ラジコンヘリのソフトウェア開発キット, 及び web カメラを用いたフィードバックプログラムの
2つを統合した. 本プログラムの作成条件として web カメラを用いたフィードバックプログラム
同様に目標とラジコンヘリの画面の中央の距離を割り出した. その後, 割り出した距離からラジコ
ンヘリの動作の条件付けを行った. 動作の条件は横軸, 縦軸, 横軸と縦軸, 高さの 4 つであり, これ
らの条件及びラジコンヘリのソフトウェア開発キットからコントロールの記述を使用しプログラム
を作成した. 作成したプログラムはソフトウェア開発キットのラジコンヘリをコントロールするプ
ログラムに記述した.
フィードバックプログラムのアルゴリズム
(1), 手動でプログラムを始動する.
(2), ラジコンヘリのカメラによって目的地を発見する.
(3), 発見した目的地の座標を計算する.
(4), (3) から, 横軸を見る. その次に, 横軸の値から左右の進行方向を決定し移動する.
(5), ラジコンヘリの高さを判定し高さの変更を行う.
(6), (3) から縦軸を見る. その次に, 縦軸の値から上下の進行方向を決定し移動する.
(7), 高さの値と目的地への座標が一定以上の場合, (2) へ戻る.
(8), 高さの値と目的地への座標が一定以下の場合, 着陸する. これらを使用してプログラムを作
動させる.
図 2.22 のプログラムは実際に作成したプログラムである. 変数”xx”及び”yy”は画像処理
から送られてきた目的地のそれぞれの座標である. ”pitch”及び”roll”はラジコンヘリの傾
きを決定する変数である. ”copy altitude”はラジコンヘリの高さを決定する変数である. ”
ardrone tool set ui pad start()”はラジコンヘリの起動及び終了を行う処理である. プログラム
の手順としては画像処理のプログラムから送られてきた距離のデータから行動を決定する. プロ
グラムの (1) はキー入力の処理である. 今回のプログラムの場合はキーボードの”2”を入力し
た時, 処理が開始されるように設定した. (2) は横方向への移動である. 画像処理から送られて
きた距離のデータから横軸のデータを”xx”へと代入し, その値が中心から 10 以上ならば, 右方
向へ移動つまり, roll へ-0.06f の値を代入する. また, -10 以上ならば左方向へ移動, つまり roll
へ +0.06f の値を代入する. (3) は縦方向への移動である. (2) と同様に, 画像処理から送られてき
た距離のデータから縦軸のデータを”yy”へと代入し, その値が中心から 10 以上ならば前進, つ
まり pitch へ-0.06f の値を代入する. また, -10 以上ならば後退となり pitch へ +0.06f の値を代入
する. (4) は高さの変更である. copy altitude から読み込んだ高さの値を参照し, 一定以上の高さ
の場合は降下する処理である. (5) は着地処理である. 着地処理は (2) と (3), 及び (4) の条件か
ら, 行動を決定する. (2) と (3) 同様に画像処理から送られてきた距離データの値から”xx”及び”
yy”の値が± 10 の範囲内であり, 尚且つ高さの範囲が 600 以下であるならば着地する. つまり
Group Report of 2011 SISP
- 23 -
Group Number 15-B
Applied Embedded System
ardrone tool set ui pad start() に 0 を入力するという事である. このプログラムは画像処理から
送られてきた距離データを基に行動を決定している. そのため, 移動速度やラジコンヘリの傾き, 画
像処理の精度など環境の変化に簡単に影響を受け望まない移動をしてしまう, 一方向へ進み続け着
地目標へと到達しない, 目標とは違う場所に着地してしまうなど問題が上げられる. この課題に関
係する講義は, 画像工学, プログラミング演習 1・2, 情報アーキテクチャ演習の講義である. また
C++ 言語, C 言語, OpenCV ライブラリの技術が必要である.
(※文責: 小野 義貴)
図 2.22
2.5.3
フィードバックプログラムの例
簡易最適制御を用いたプログラム
目的地に自動着陸させるためのフィードバック制御として簡易最適制御を用い, 実際にラジコン
ヘリのソフトウェア開発キットにプログラムとして組み込んだ. その際, 9 通りの入力から最適な
入力を選択するプログラムと, 81 通りの入力から最適な入力を選択するプログラムを作成した.
プログラムの流れは, まず初めに画像認識プログラムで取得したラジコンヘリの現在値の座標を
常に記録する変数を用意し, それを基に
Group Report of 2011 SISP
- 24 -
Group Number 15-B
Applied Embedded System
の形のベクトルを作成する. 次にパラメータにより 0.4 秒後のラジコンヘリの位置と速度を計算
する. そのとき, 式 (6) の末尾に入力値を加え, 入力の組み合わせの数だけ式 (1) のベクトルを用意
し, 計算する. そして予測した 9 通りの位置をそれぞれ 2 乗し,
値が最も小さかった場合の入力を制御入力
として決定する.
9 通りのプログラムで求めた計算結果を基に, 式 (6) のベクトルを 9 通り用意する. それぞれの
ベクトルに入力の組み合わせの数だけ式 (1) のベクトルを用意し, 計算する. そして予測した 81 通
りの値を 2 乗し,
最も値の小さかった入力を制御入力とする. つまり最終的には 81 通りの入力パターンの中から
0.8 秒後に最も目的地に近くなる入力を制御入力として決定している.
プログラムのアルゴリズムは以下の 11 通りである. (1), 手動でプログラムを始動する. (2), ラ
ジコンヘリの腹部カメラによって目的地を発見する. (3), 発見した目的地の座標からラジコンヘリ
の現在位置を特定する. (4), 特定した現在位置から目標への距離を計算する. (5), 計算した距離を
メートル単位の実数値へと変換する. (6), 変換した実数値から式 (5) を用いた計算を行い 0.8 秒後
の位置を予測する. (7), 予測した位置が最も目標に近くなるラジコンヘリの移動を式 (9) を用いて
選択する. 選択した移動は前後及び左右のどちらか一方である. (8), 選択した移動は前後を優先し
て行う. (9), 前後の移動後に左右の移動を行う. (10), ラジコンヘリの高さを判定し一定の値以上
の高さであるならば高さの変更を行う. (11), 着陸する.
手順としては, 最初に (1) を行う. (1) を行ったことで (2) が絶えず行われる. (2) が実行される
ことで (3) が実行される. (3) から (4) を経て (5) が実行される. (5) から (6) を実行し, (7) が求め
られる. 次に (8) あるいは (9) を実行する. (8) あるいは (9) が実行されたならば (10) を実行する.
(10) が実行されたならば (8) あるいは (9) を実行する. もし (10) を実行したとき高さが一定以下
であるならば (11) を行う. この課題に関係する講義は, プログラミング演習 1・2, 情報アーキテク
チャ演習の講義である. また C++ 言語, C 言語の技術が必要である.
(※文責: 横井 史也)
Group Report of 2011 SISP
- 25 -
Group Number 15-B
Applied Embedded System
第3章
3.1
企画
前章で紹介した以外の課題
1. 企画
本プロジェクトグループでは最初に, 目標を決定するための会議を行った. モノを動かすソ
フトウェアプロジェクトの目標からプロジェクトグループ全体の課題を決定した. 次に, 飛
行物体の条件付けと機体の選定を行い, プロジェクト内でプレゼンテーションを行った. こ
のほかにも, 中間発表及び最終発表のスライド, ポスターやデモンストレーションの内容決
め, 各自の作業の分担及び課題決めを行った.
(※文責: 小野 義貴)
2. スライド
プロジェクトの企画段階において本プロジェクトグループが課題として設定し, 挑戦する内
容を効率よく伝えるために作成した. しかし, 文字ばかりで具体的なイメージとなる図が存
在しないため, イメージが伝わりにくいという問題がでた. また, 最終発表において, ポス
ターの補足説明として使用した. 前述した反省点を生かして図を使用し, わかりやすく纏め
ることができたが, 専門的内容についての説明が不足していた. 今後の課題としては専門的
内容の図や文章をいかに解り易くするかが課題である.
(※文責: 小野 義貴)
3. 先行研究の検索
ラジコンヘリを用いてプロジェクトを進行すると決定をした後, どのようなラジコンヘリが
適切か, ラジコンヘリを用いた研究や開発について調べた. ラジコンヘリは一般的なシング
ルローターの類が多かった. 例として, カリフォルニアのスタンフォード大学では人間の動
作の軌跡を用いて順最適を行い, より最適な軌跡を学習するアルゴリズムを搭載した自動操
縦を実現させている. [16] 変わった形状として, 4 枚のプロペラでラジコンヘリを制御する
タイプもあった. こちらは TBS テレビの技術局が開発したラジコンヘリである. テレビ番
組の空撮手段として使用している. [15]
Parrot 社の AR.Drone は価格が安価であり, 4 枚のプロペラで構成された形状をしている.
また, プログラムを開発することができるラジコンヘリであった. このラジコンヘリは高い
安全性から初心者でも気軽に飛ばすことができる. 開発元がアプリやソフトウェア開発キッ
ト を配布しているため研究と開発が行い易い環境となっている. 特に配布しているソフト
ウェア開発キット は windows, iOS, LINUX を通して開発することができ, 非常に敷居の
低いものとなっている. Web サイト, 工学ナビでは iPhone での操作であるラジコンヘリを
windowsPC で操作できるようにしていた. [7] こちらの Web サイトでは Processing を使
用してプログラミングを行い, キーボードでの操作を可能としている. また, Kinect ライブ
ラリと連携させてある深度領域の物体をトラッキングを行っていた. これによって画面左に
あればラジコンヘリが左に,画面右にあれば右に,画面上にあれば上に,画面下にあれば下
に,Kinect に近づくと前に, Kinect から遠ざかると後ろに進む研究をしていた. 他にも, ラ
Group Report of 2011 SISP
- 27 -
Group Number 15-B
Applied Embedded System
ジコンヘリ本体の腹部に軽量のカメラを取り付け, 撮影した Web サイトもあった. こちら
では取り付けたカメラの動作及びバランスを取り, 追加で着地用の足を付け足すなどを研究
していた. [17] 有線であったがプロポーショナルシステムを使用して手動操縦を実現したと
ころもあった. [11]
(※文責: 今 竜也)
4. コンピュータの開発環境設定
ラジコンヘリの公式ホームページよりソフトウェア開発キットをラジコンヘリの動作制御を
するコンピュータにダウンロードした. しかし, ソフトウェア開発キットのみではラジコン
ヘリをコンピュータから制御できないのである. よって, 開発環境の設定をしなくてはなら
ない.
最初に開発環境”Microsoft Visual C++ 2008 Express edition”(VC++2008) をインス
トールをした. その他に”Microsoft Windows SDK”と”Microsoft DirectX SDK”のソ
フトウェア開発キットをインストールも行う. そして VC++2008 に 2 つのソフトウェア開
発キットのライブラリを追加した. また, 同じく”SDL-devel-1.2.14-VC8.zip”をダウロー
ドした. そして, そのファイルのライブラリを VC++2008 に追加した.
次にディレクトリ設定を自分の環境用に変更した. そのためにラジコンヘリのソフトウェア
開発キット内部の”ArDrone properties.vsprops”を開き, そのファイルにある 2 つの変数
Value を適切なディレクトリに指定変更した.
最後に画像処理を行うために必要であり, ライブラリである OpenCV のダウンロードをし
た. そして VC++2008 にこのライブラリをインクルードした. これらを設定することに
よって, 開発環境設定は完了した. しかし, ソフトウェア開発キットは不完全であり, 環境設
定をするのみではコンピュータからの動作制御はできないのである.
(※文責: 吉田 孝太郎)
5. C++ の学習
ラジコンヘリのソフトウェア開発キットに C++ 言語が使用されている. このことからソフ
トウェア開発キット解析と平行して学習した. 具体的に学習したことは 3 つある. 1 つ目は
配列の宣言方法である. C 言語では配列の大きさを宣言しなくてはならない. しかし, C++
言語では大きさを指定しなくても宣言できることである. 2 つ目はヘッダファイルの使用方
法である. あるヘッダファイルをインクルードしたファイルはヘッダファイルで使用されて
いる関数などを使用することができることである. 3 つ目はローカル変数の宣言方法である.
C 言語ではエラーとされてしまう宣言位置は C++ 言語では宣言可能であることである.
(※文責: 吉田 孝太郎)
6. OpenCV の学習
画像処理を実現するために OpenCV を学習した. OpenCV は主に画像処理関係に特化し
たライブラリで構成されている. OpenCV は C 言語, C++ 言語, Python 用ライブラリと
なっている. OpenCV の実装分野は大まかに分けて画像処理(Image Processing), 構造
解析(Structural Analysis) , モーション解析と物体追跡(Motion Analysis and Object
Tracking) , パターン認識(Pattern Recognition) , カメラキャリブレーション3次元再構
成(Camera Calibration and 3D Reconstruction) , 機械学習(Machine learning), ユー
Group Report of 2011 SISP
- 28 -
Group Number 15-B
Applied Embedded System
ザーインターフェイス(User Interface)で構成されている. その中で今回重点的に学習し
た分野は画像処理, 物体追跡の2つである. 画像処理では特に勾配・エッジ・コーナー, 補
間, 幾何変換, フィルタと色変換, 輪郭検出, マッチングを学習した.
(※文責: 今 竜也)
7. 公式エラーの把握
ラジコンヘリの公式ホームページよりソフトウェア開発キットをダウンロードをした. ソフ
トウェア開発キットに含まれる導入方法説明書に従いコンピュータをセットアップした. し
かし, コンピュータとラジコンヘリの通信ができなかった. 原因は公式ホームページで公開
しているソフトウェア開発キットは現在販売されているラジコンヘリとのバージョンが異な
る点が原因であった.
ラジコンヘリとコンピュータの接続時にコンピュータの画面上には水平カメラの画像だけが
表示されていた. ラジコンヘリからコンピュータへ送信されるカメラ情報は前方, 腹部の 2
種類である. したがって, ソフトウェア開発キットには腹部カメラの画像を表示させる箇所
が抜けていることを発見した. また, そのエラーを解消した後に, 水平カメラと腹部カメラ
の表示切り替えを実装した. しかし, 表示切り替えを数回行うとエラーが発生し, 通信が強
制終了される. これは, AR.Drone open API platform[3] で未だ解決されていない問題であ
る. そのため, 水平カメラと腹部カメラの表示切り替えのエラーは解消が困難である.
プログラムを実行し, ラジコンヘリと通信を接続する際にコンソール画面に常時”checksum
failed”が表示された. 通常コンソール画面に表示されるはずであるセンサ情報やバッテリー
情報などが表示されないエラーを発見した.
(※文責: 吉田 孝太郎)
8. ソフトウェア開発キット解析
自律制御での目的地着陸をするために, ソフトウェア開発キットを使った C/C++ 言語の
オープンソース解析が必要であった. しかし, ソースファイルが膨大であり, 全て解析するこ
とは困難である. したがって, 目的地着陸に最小限必要であるソースファイルに絞り解析を
した. ラジコンヘリの動作制御, 前方・腹部カメラ情報を受信・表示に関するソースファイ
ルを探し, 解析することに決定した. 先述よりラジコンヘリの動作制御に関するソースファ
イルがわかった. ソースファイルのある関数内に前後移動, 左右移動, 左右旋回, 上下運動の
4 つの動作に関する変数が存在した. 4 つの変数には 1 から-1 で小数第 3 位までの実数を代
入することができることがわかった. その他には離着陸をある関数で制御することがわかっ
た. 実際にある関数で 1 を宣言すると離陸してホバリングを開始する. また 0 と宣言をする
と着陸する.
(※文責: 吉田 孝太郎)
9. コンピュータでのラジコンヘリ操作
コンピュータからラジコンヘリの操作を行うことでデータを取った. このデータは 3 つあ
る. (1), ラジコンヘリからコンピュータにカメラ情報を送信して表示するまでに起こるラグ.
(2), ラジコンヘリを安定して動作制御するための場所の条件. (3), コンピュータからの命令
が送信できなくなった際の緊急停止方法である. 1 つ目のラグの計測では, コンピュータと
ラジコンヘリに起こるラグは約 0.3 秒であることがわかった. そのことから自動制御の際に
Group Report of 2011 SISP
- 29 -
Group Number 15-B
Applied Embedded System
ラジコンヘリの動作速度を小さくしなくてはならないことがわかる. なぜなら, 動作速度が
大きいとコンピュータに表示される画像情報から非線形多変量解析に基づくラジコンヘリの
位置予測の式を使用して, 算出されるラジコンヘリの位置と実際のラジコンヘリの位置の差
が大きくなるためである. 2 つ目は風がほとんどなく, 広い場所が必要な条件である. なぜな
ら, ラジコンヘリは軽量である. したがって, 風の抵抗を受けやすく, 制御に支障がでる. ま
た, 狭い場所で飛行を行うと壁との距離が近くなる. そのことからラジコンヘリのプロペラ
から発せられる風が壁を反射して, ラジコンヘリへと当たる. そのため, ラジコンヘリが自身
の風の影響を受けてしまう. 3 つ目はラジコンヘリを裏返すかプロペラの動作を止める特定
のキーボタンでの強制停止である. 危険防止のために機体が地面と垂直になると全ての動作
を停止するようにプログラミングされている. 同じようにプロペラに負荷がかかると動作を
停止する. 特定のキーボタンでもラジコンヘリの動作を強制終了が可能である.
(※文責: 吉田 孝太郎)
10. 積載重量の検討
本プロジェクトの目的にはラジコンヘリに機能を追加することが必要不可欠である. ラジコ
ンヘリにアーム及び外部センサを追加するに当り, ラジコンヘリの出力の問題及び, 追加後
のラジコンヘリのバランスが重要となる. そのためにこの課題は重要である. ラジコンヘリ
にアーム及び外部センサを搭載する為には, ラジコンヘリがどの程度の重さまで耐えて飛行
することが出来るかが問題となる. ラジコンヘリは約 200 グラムまで搭載して飛行すること
が可能である. しかしその最大積載重量一杯の物体を乗せると, ラジコンヘリはバランスを
崩し容易に転落してしまう. ラジコンヘリに物体を搭載した場合, 前後のバランスを取るた
めにカウンターウェイトが必要である. そのため実際に搭載することが可能な重量は 100 グ
ラムとなる. 今後としては, ラジコンヘリのモーターの出力増加やバッテリーの改良によっ
て積載重量を増やすもしくは, とても軽い積載物を選択して機能を追加することが課題とい
える.
(※文責: 今 竜也)
11. ラジコンヘリの誤差に関するグラフ
非線形多変量解析において, ベクトル x の次元数を増加させたことによって減少したラジコ
ンヘリの予測位置と実際の位置の誤差の平均を視覚的にわかりやすく示すため, 図 3.1 のよ
うなグラフを作成した. 青色のグラフがラジコンヘリの前後運動に対する誤差の平均で, 赤
色のグラフがラジコンヘリの左右運動に対する誤差の平均である. 当初はベクトル x の次元
数は前後左右あわせて 6 次元だった.
この場合の誤差の平均は前後が 3.6cm, 左右が 6.9cm であった. 次にベクトル x は前後左右
あわせて 10 次元であった.
Group Report of 2011 SISP
- 30 -
Group Number 15-B
Applied Embedded System
この場合の誤差の平均は前後が 3.5cm, 左右が 3.8cm であった. 次にベクトル x は前後左右
あわせて 14 次元であった.
18 次元に拡張することで, 当初前後の位置の誤差の平均が 3.7cm, 左右が 6.9cm だったのに
対し, 前後が 2.6cm, 左右が 2.8cm まで誤差を縮めることに成功した.
図 3.1
誤差の平均の推移
(※文責: 横井 史也)
12. フローチャート作成
ラジコンヘリの半自律制御の動作を視覚的に見やすくまとめるため図 3.2 のようなフロー
チャートを作成した. しかし, このフローチャートは前期に作成したため, 最終的な目標の動
作が定まっておらず, 最終的に完成した成果物の動作とはかけはなれたものとなった. さら
に, フローチャートの正式な書き方ではなかったため, 改良の余地があったと言える.
(※文責: 横井 史也)
Group Report of 2011 SISP
- 31 -
Group Number 15-B
Applied Embedded System
図 3.2
フローチャート
13. ポスター作成
前期・後期のポスターを作成した. 専門的な用語を書き連ねることで, 一般の方が見てもわ
からないという自体を避けるため, 実写を交えたイメージ図を加えた. 文字サイズをできる
だけ大きくし, 遠くからポスターを見た人も簡単に読めるように気をつけた. しかし, 最終発
表時に本番用のポスターにミスがあり, 後日直すこととなったため, 余裕をもったポスター
製作ができていなかったので, そこが今後の新たな課題である.
(※文責: 横井 史也)
14. 観測データのビデオ撮り
ラジコンヘリの動作を数式として表すために観測データを取得する必要があった. 観測デー
タの取得方法として以下の手法をとった. 壁に黒のビニールテープを 0.25m 間隔で 10m
張った. ビデオカメラを全体が均等に映る場所にセットした. ラジコンヘリを 0m 付近でホ
バリング待機させ, ビデオカメラの録画を開始した. ラジコンヘリの動作としては, 1m, 2m,
3m, 6m の 4 つを目標位置と定め, ラジコンヘリが 0m から目標位置まで移動した後, ラジコ
ンヘリが動作を止めるまで逆出力することを 1 試行とし, 1 つの目標位置につき 10 試行行っ
た. また前後移動, 左右移動の2パターンとラジコンヘリの動作の速さが2パターンあるた
め, 全 160 試行を行った. しかし, ラジコンヘリの動作を試行で区切ってしまったため連続
した動作のデータが取れない. そのため, 数式として表すための観測データとしては不適合
と判断したため別の手法をとった.
別の手法は, 先ほどと同様に壁に 0.25m 間隔で 4m 張った. ビデオカメラを全体が均等に映
る場所にセットした. ラジコンヘリを 0m でホバリング待機させ, ビデオカメラの録画を開
始した. ラジコンヘリの動作としては, 0m 位置から 4m 位置までの間を不規則な間隔で 5
往復させることを 1 試行とした. これを前後移動, 左右移動の 2 パターンを行った. またラ
ジコンヘリの出力, および速度は一定にした.
(※文責: 吉田 孝太郎)
15. 観測データの集計
Group Report of 2011 SISP
- 32 -
Group Number 15-B
Applied Embedded System
2 つのビデオ撮りを行ったため集計の方法は 2 パターンある. 最初は 4 フレーム(0.12 秒)
単位でどちらの方向に何 m 移動したのかを集計した. 1 施行の始めをラジコンヘリが傾き始
める 1 フレーム前とした. また 1 施行の終わりを逆出力を始めラジコンヘリの動作が止まっ
たフレームとした. 2 つ目は 12 フレーム(0.36 秒)単位でどちらの方向に何 m 移動したの
かを集計した. 1 施行の始めをラジコンヘリが傾き始める 1 フレーム前とした. また 1 施行
の終わりを逆出力を始め動作が止まったフレームとした. また, ビデオ撮りの結果からもわ
かるように 2 つ目の集計方法を採用した.
表 3.1 は前後移動, 表 3.2 は左右移動に関する観測データである. 表 3.1 の出力は-0.06 が前
方出力であり, 0.06 は後方出力であることを示している. また表 3.2 の出力は-0.06 が左方出
力であり, 0.06 は右方出力を示している.
(※文責: 吉田 孝太郎)
表 3.1
1 往復目
2 往復目
前後移動の観測データ
3 往復目
4 往復目
5 往復目
距離 (m)
出力
距離 (m)
出力
距離 (m)
出力
距離 (m)
出力
距離 (m)
出力
0.5
-0.06
1.2
-0.06
2.7
-0.06
0.8
-0.06
1.5
-0.06
0.6
-0.06
1.1
-0.06
2.7
-0.06
0.8
-0.06
1.4
-0.06
0.8
-0.06
1.1
-0.06
2.7
-0.06
0.8
-0.06
1.4
-0.06
1
-0.06
1.1
-0.06
2.9
-0.06
0.8
-0.06
1.5
-0.06
1.3
-0.06
1.2
-0.06
3
-0.06
0.9
-0.06
1.6
-0.06
1.7
-0.06
1.3
-0.06
3.2
0.06
1
-0.06
1.7
-0.06
1.9
-0.06
1.5
-0.06
3.2
0.06
1.1
-0.06
1.8
-0.06
2.2
-0.06
1.7
-0.06
3.2
0.06
1.3
-0.06
2.1
-0.06
2.5
0.06
1.8
0.06
3.1
0.06
1.6
-0.06
2.3
-0.06
2.7
0.06
2
0.06
3
0.06
1.8
-0.06
2.5
-0.06
2.8
0.06
2.2
0.06
2.9
0.06
2.2
-0.06
2.8
-0.06
2.8
0.06
2.5
0.06
2.8
0.06
2.3
0.06
3
0.06
2.8
0.06
2.7
0.06
2.6
0.06
2.5
0.06
3.1
0.06
2.8
0.06
2.8
0.06
2.4
0.06
2.5
0.06
3.1
0.06
2.7
0.06
2.8
0.06
2.3
0.06
2.5
0.06
3.1
0.06
2.6
0.06
2.8
0.06
2
0.06
2.5
0.06
3
0.06
2.4
0.06
2.7
0.06
1.8
0.06
2.5
0.06
2.8
0.06
2.2
0.06
1.5
0.06
2.4
0.06
2.7
0.06
2
0.06
1.3
0.06
2.3
0.06
2.4
0.06
1.8
0.06
1
0.06
2.1
0.06
2.3
0.06
1.6
0.06
1.9
0.06
2
0.06
1.4
0.06
1.7
0.06
1.8
0.06
1.6
0.06
1.4
0.06
Group Report of 2011 SISP
- 33 -
Group Number 15-B
Applied Embedded System
表 3.2 左右移動の観測データ
1 往復目
2 往復目
3 往復目
4 往復目
5 往復目
距離 (m)
出力
距離 (m)
出力
距離 (m)
出力
距離 (m)
出力
距離 (m)
出力
0
0.06
2.1
0.06
1.6
0.06
1.3
0.06
1.3
0.06
0.1
0.06
2
0.06
1.5
0.06
1.3
0.06
1.3
0.06
0.2
0.06
2
0.06
1.4
0.06
1.2
0.06
1.3
0.06
0.4
0.06
2
0.06
1.4
0.06
1.1
0.06
1.3
0.06
0.6
0.06
2
0.06
1.4
0.06
1.1
0.06
1.3
0.06
0.8
0.06
2.2
0.06
1.5
0.06
1.1
0.06
1.3
0.06
1.1
0.06
2.3
0.06
1.6
0.06
1.2
0.06
1.4
0.06
1.3
0.06
2.5
0.06
1.7
0.06
1.3
0.06
1.4
0.06
1.6
0.06
2.7
0.06
1.9
0.06
1.5
0.06
1.6
0.06
2
0.06
2.8
0.06
2.1
0.06
1.6
0.06
1.7
0.06
2.3
0.06
3
-0.06
2.3
0.06
1.7
0.06
1.8
0.06
2.7
0.06
3
-0.06
2.5
0.06
1.9
0.06
2
0.06
3
0.06
3
-0.06
2.7
-0.06
2.1
0.06
2.2
0.06
3.2
-0.06
2.9
-0.06
2.8
-0.06
2.4
-0.06
2.5
0.06
3.3
-0.06
2.8
-0.06
2.8
-0.06
2.6
-0.06
2.7
0.06
3.5
-0.06
2.8
-0.06
2.8
-0.06
2.7
-0.06
3
-0.06
3.6
-0.06
2.7
-0.06
2.8
-0.06
2.7
-0.06
3.2
-0.06
3.7
-0.06
2.5
-0.06
2.7
-0.06
2.7
-0.06
3.3
-0.06
3.7
-0.06
2.3
-0.06
2.6
-0.06
2.7
-0.06
3.3
-0.06
3.7
-0.06
2.1
-0.06
2.5
-0.06
2.6
-0.06
3.4
-0.06
3.6
-0.06
1.8
-0.06
2.3
-0.06
2.5
-0.06
3.4
-0.06
3.5
-0.06
2.2
-0.06
2.3
-0.06
3.4
-0.06
3.4
-0.06
2
-0.06
2.2
-0.06
3.4
-0.06
3.3
-0.06
1.8
-0.06
2
-0.06
3.3
-0.06
3.1
-0.06
1.5
-0.06
1.9
-0.06
3.3
-0.06
3
-0.06
1.7
-0.06
3.2
-0.06
2.8
-0.06
1.5
-0.06
3
-0.06
2.7
-0.06
2.9
-0.06
2.5
-0.06
2.8
-0.06
2.3
-0.06
2.6
-0.06
2.3
-0.06
2
-0.06
1.7
-0.06
1.3
-0.06
16. プログラムの比較
簡易最適制御を用いたプログラムと画像処理のみを使用したフィードバックプログラムの 2
Group Report of 2011 SISP
- 34 -
Group Number 15-B
Applied Embedded System
つにおいて実際に動作させ比較した. 理論上では簡易最適制御は画像処理のプログラムと物
理モデルから導き出された式を用いてラジコンヘリの位置を計算しているため精度が上であ
る. それを確認するためにこの課題を行った. 比較の試行回数は各 10 回であり簡易最適制
御を用いたプログラムは 10 回中 8 回, 画像処理のみのプログラムは 10 回中 6 回着陸した.
それほど差が出ていなかった理由は試行回数が少ないためだと考えられる. 簡易最適制御を
用いたプログラムは 1 回の試行あたりに約 40 秒であるのに対し, 画像処理のみのプログラ
ムは 1 回の試行あたりに約 60 秒かかる. よって自動着陸の速度は画像処理のみのプログラ
ムよりも 2 倍近く早いことがわかった. この課題に関係する講義は, 制御理論, ロボティク
ス, オペレーションズリサーチ, 確率統計学の講義である. また, 必要とする技術は確率統計
及び数学の知識である.
(※文責: 小野 義貴)
Group Report of 2011 SISP
- 35 -
Group Number 15-B
Applied Embedded System
第4章
課題解決の詳細
スケジュール
4.1
本プロジェクトでの目標及び課題に向けて明確なしるしが必要であった. そのためプロジェクト
グループ内での全体の進行状況を記したスケジュールを作成した. また, 個人での課題や目標, 作
業の状況を自他共に確認できるように個人それぞれでスケジュールを作成した. 個人単位でのスケ
ジュールを作成した理由はグループメンバー全員が見れるため管理が容易なほか, 作業の遅れをス
ケジュールに書き入れることでお互いの状況を明確に把握することができた. 以下はプロジェクト
グループ個人の活動内容である.
(※文責: 小野 義貴)
4.1.1
小野 義貴
小野 義貴のスケジュールは以下のとおりである.
4月
企画の立案を行った.
5月
企画のプレゼンテーション用スライドの作成及びプレゼンテーション発表原稿の作成をし企
画プレゼンテーションを行った. ラジコンヘリの機体選定を行った. ラジコンヘリの機体が
決定した後に飛行制御グループと画像処理グループに分け, 中間発表までのスケジュールを
設定した. 機体の動作について話し合いを行い. それを基に図を作成した.
6月
ライブラリ, OpenCV の勉強を開始した. ラジコンヘリのカメラの代用に web カメラを用
いて OpenCV 上で画像処理のプログラムを作成し実行した. また, 最終目標である物体追跡
のサンプルプログラムを作成した. 5月に作成したスケジュールの修正を行い具体的なスケ
ジュールを設定した. これらに関係している講義は, 画像工学, プログラミング演習 1・2, 情
報アーキテクチャ演習の講義である. また C++ 言語, C 言語, OpenCV ライブラリの技術
が必要である.
7月
中間発表についての話し合いを行い, 中間発表に必要な原稿の作成をした. 中間発表を行っ
た. また 6 月の内容を引き続き継続した. これらに関係している講義は, 画像工学, プログラ
ミング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語, OpenCV
ライブラリの技術が必要である.
8月
中間発表の反省点の話し合いを行った. 今後のスケジュールについて話し合いを行った. ラ
ジコンヘリの物理モデルを取得した. ラジコンヘリのカメラの代用に web カメラを用いて
画面に文字の描写を行った. これらに関係している講義は, 画像工学, プログラミング演習
1・2, 情報アーキテクチャ演習の講義である. また C++ 言語, C 言語, OpenCV ライブラ
リの技術が必要である.
9月
ラジコンヘリの物理モデルを取得した. ラジコンヘリの仕様変更に対応した. ラジコンヘリ
を OpenCV 上で動作させた. ラジコンヘリの仕様変更に伴ない速度の調節及びラジコンヘ
リのカメラの切り替え処理を設定した. ラジコンヘリの表示画面上で文字の描写を行った.
Group Report of 2011 SISP
- 37 -
Group Number 15-B
Applied Embedded System
8月に行ったスケジュールについての話し合いから個人の進行状況, 中間発表までの反省点
を踏まえて最終発表までの具体的なスケジュールを作成した. これらに関係している講義は,
画像工学, プログラミング演習 1・2, 情報アーキテクチャ演習の講義である. また C++ 言
語, C 言語, OpenCV ライブラリの技術が必要である.
10 月 最終発表で使用する画像処理のプログラムを作成した. そして, そのプログラムをラジコ
ンヘリ上に実装した. プロジェクトグループ個人の進行状況を全員で確認し, 各自のスケ
ジュール変更を行った. ラジコンヘリの画面の 2 画面化を行った. ラジコンヘリのソフト
ウェア開発キットの不具合からコンソール画面の 2 画面化を課題とした. これらに関係して
いる講義は, 画像工学, プログラミング演習 1・2, 情報アーキテクチャ演習の講義である. ま
た C++ 言語, C 言語, OpenCV ライブラリの技術が必要である.
11 月 ラジコンヘリのピクセル間の距離と実際の距離, 高さをデータとしてまとめた. 実装した画
像処理のプログラムとラジコンヘリのソフトウェア開発キットからラジコンヘリのフィード
バックプログラムを作成した. 8 月に取得した物理モデルのデータから簡易最適制御に用い
るためのプログラムを OpenCV を用いて作成し web カメラで実行した. その後ラジコンヘ
リでも同様に実装した. プロジェクトグループ個人の進行状況を全員で確認し, 各自のスケ
ジュール変更を行った. これらに関係している講義は, 画像工学, プログラミング演習 1・2,
情報アーキテクチャ演習の講義である. また C++ 言語, C 言語, OpenCV ライブラリの技
術が必要である.
12 月 最終発表についての話し合いを行った. 最終発表のスライドの作成, ラジコンヘリの 簡易
最適制御プログラムの作成を行った. 最終発表でのラジコンヘリのデモンストレーション飛
行の決定をした. 11 月のスケジュールを引き続き継続して行った. これらに関係している
講義は, 画像工学, プログラミング演習 1・2, 情報アーキテクチャ演習の講義である. また
C++ 言語, C 言語, OpenCV ライブラリの技術が必要である.
(※文責: 小野 義貴)
4.1.2
横井 史也
横井 史也のスケジュールは以下のとおりである.
4月
企画の立案を行った.
5月
企画のプレゼンテーション用スライドの作成及びプレゼンテーション発表原稿の作成をし企
画プレゼンテーションを行った. ラジコンヘリの機体選定を行った. ラジコンヘリの機体が
決定した後に飛行制御グループと画像処理グループに分け, 中間発表までのスケジュールを
設定した. 機体の動作について話し合いを行い. それを基にフローチャートを作成した.
6月
C++ の勉強を開始した. ソフトウェア開発キットの不具合の把握, 解消をした. デモンスト
レーション用のオープンループプログラム作成を行った. 5月に作成したスケジュールの修
正を行い具体的なスケジュールを設定した.
7月
中間発表についての話し合いを行い, 中間発表に必要な原稿とポスターの作成をした. 中間
発表を行った.
8月
中間発表の反省点の話し合いを行った. 今後のスケジュールについて話し合いを行った. ラ
ジコンヘリの物理モデルを取得した.
9月
ラジコンヘリの物理モデルを取得した. 8 月に行ったスケジュールについての話し合いから
Group Report of 2011 SISP
- 38 -
Group Number 15-B
Applied Embedded System
個人の進行状況, 中間発表までの反省点を踏まえて最終発表までの具体的なスケジュールを
作成した.
10 月 9 月に取得した物理モデルを用いてパラメータを求めるプログラムを作成した. 制御理論
の学習をした. プロジェクトグループ個人の進行状況を全員で確認し, 各自のスケジュール
変更を行った.
11 月 ラジコンヘリの高度データやバッテリー残量の情報を取得しコンソール画面を視覚的にき
れいにまとめた. ラジコンヘリに使用する制御方法を簡易最適制御として決定した. 非線形
多変量解析によるラジコンヘリの位置予測のプログラムを作成した. 簡易最適制御のプログ
ラムを作成した. プロジェクトグループ個人の進行状況を全員で確認し, 各自のスケジュー
ル変更を行った.
12 月 最終発表についての話し合いを行った. 最終発表のポスターと原稿の作成, ラジコンヘリの
簡易最適制御プログラムの作成を行った. 最終発表でのラジコンヘリのデモンストレーショ
ン飛行の決定をした.
(※文責: 横井 史也)
4.1.3
今 竜也
今 竜也のスケジュールは以下のとおりである.
4月
企画の立案を行った.
5月
企画のプレゼンテーションを行った. ラジコンヘリの選定を行った. ラジコンヘリが決定し
たあとに飛行制御グループと画像処理グループにわけ, スケジュールを設定した. 全体のス
ケジュールを決めた.
6月
画像処理ソフトの選定を行った. C 言語の復習と OpenCV の学習を始めた. Web カメラを
用いて試作画像処理プログラムを作成した. 簡易な物体追跡プログラムを作成した. 関連す
る講義はプログラミング演習, 画像工学である. 課題解決過程で用いた既存技術は C, C++
言語であり, 習得した技術は OpenCV である.
7月
中間発表までの成果をまとめた. 中間発表に必要な原稿の作成をした. 中間発表をおこ
なった
8月
中間発表までの課題, 反省点をまとめた. 今後のスケジュールを話し合った. 夏休み中の各
人の課題を決めた. ラジコンヘリの観測データを計測してそれを集計した.
9月
ラジコンヘリの観測データを計測しなおした. 前期までに作成したプログラムを見なおした.
最終発表までのスケジュールを作成した. 関連する講義, 技術は 6 月と同様である.
10 月 新たに赤丸判別プログラムを作成した. ラジコンヘリのプログラムと組み合わせるために
プログラムを統合した. Web カメラからラジコンヘリで実際に画像処理を動かし始めた. 稼
動時の問題点を洗いなおした. 関連する講義, 技術は 6 月と同様である.
11 月 現在までの成果の完成具合と問題点を列挙して優先順位を変更した. ピクセルデータを用
いて画像上の位置と実際の距離との差を計測した. ラジコンヘリ上での画像処理プログラム
の最終調整をした. 関連する講義, 技術は 6 月と同様である.
12 月 最終発表の打ち合わせをした. 画像処理プログラムのデバックを行った. 最終発表でラジコ
ンヘリのデモンストレーション飛行を行った. 関連する講義, 技術は 6 月と同様である.
(※文責: 今 竜也)
Group Report of 2011 SISP
- 39 -
Group Number 15-B
Applied Embedded System
4.1.4
吉田 孝太郎
吉田 孝太郎のスケジュールは以下のとおりである.
4月
企画の立案を行った.
5月
企画のプレゼンテーション用スライドの作成及びプレゼンテーション発表原稿の作成をし企
画プレゼンテーションを行った. ラジコンヘリの機体選定を行った. ラジコンヘリの機体が
決定した後に飛行制御グループと画像処理グループに分け, 中間発表までのスケジュールを
設定した. 機体の動作について話し合いを行い. それを基に図を作成した.
6月
C++ の勉強を開始した. ソフトウェア開発キットの不具合の把握, 解消をした. デモンスト
レーション用のオープンループプログラム作成を行った. 5月に作成したスケジュールの修
正を行い具体的なスケジュールを設定した. これらに関連した講義はプログラミング言語論,
プログラミング演習 1・2 である. また C++ 言語の技術が必要である.
7月
中間発表についての話し合いを行い, 中間発表に必要な原稿の作成をした. 中間発表を行っ
た. これらに関連した講義はプログラミング言語論, プログラミング演習 1・2 である. また
C++ 言語の技術が必要である.
8月
中間発表の反省点の話し合いを行った. 今後のスケジュールについて話し合いを行った. ラ
ジコンヘリの物理モデルを取得した. ラジコンヘリの画像描画の仕様変更を行った. これら
に関連した講義は画像工学, プログラミング言語論, プログラミング演習 1・2 である. また
C++ 言語, ライブラリである OpenCV・DirectX の技術が必要である.
9月
ラジコンヘリの物理モデルを取得した. 8 月に行ったスケジュールについての話し合いから
個人の進行状況, 中間発表までの反省点を踏まえて最終発表までの具体的なスケジュールを
作成した. これらに関連した講義はプログラミング言語論, プログラミング演習 1・2 であ
る. また C++ 言語の技術が必要である.
10 月 9 月に取得した物理モデルを用いたラジコンヘリの作成をした. 制御理論の学習をした. プ
ロジェクトグループ個人の進行状況を全員で確認し, 各自のスケジュール変更を行った. こ
れらに関連した講義は線形代数学 1・2 , 確率・統計学, プログラミング言語論, プログラミ
ング演習 1・2 である. また C++ 言語, 行列計算の技術が必要である.
11 月 ラジコンヘリのピクセル間の距離と実際の距離, 高さをデータとしてまとめた. ラジコンヘ
リに使用する制御方法を簡易最適制御として決定した. 非線形多変量解析によるラジコンヘ
リの位置予測の式を用いた簡易最適制御の式を作成した. プロジェクトグループ個人の進行
状況を全員で確認し, 各自のスケジュール変更を行った. これらに関連した講義は線形代数
学 1・2 , 確率・統計学, ロボティクス, 制御理論, プログラミング言語論, プログラミング演
習 1・2 である. また C++ 言語, 行列計算, 制御式計算の技術が必要である.
12 月 最終発表についての話し合いを行った. 最終発表のスライドの作成, ラジコンヘリの簡易最
適制御プログラムの作成を行った. 最終発表でのラジコンヘリのデモンストレーション飛行
の決定をした. また C++ 言語, 行列式の計算, 制御式の計算の技術が必要である. これらに
関連した講義は線形代数学 1・2 , 確率・統計学, ロボティクス, 制御理論, プログラミング
言語論, プログラミング演習 1・2 である. また C++ 言語, 行列計算, 制御式計算の技術が
必要である.
(※文責: 吉田 孝太郎)
Group Report of 2011 SISP
- 40 -
Group Number 15-B
Applied Embedded System
第5章
5.1
結果
プロジェクトの結果
今回のプロジェクトにおいて話し合いによってラジコンヘリを使用した飛行物体の制御をするこ
とに決定した. ラジコンヘリを使用していく前提条件のもと, 具体的なラジコンヘリの動作及び制
御について決定した. 制御は目的地への自動着陸及び障害物の回避を課題と設定して活動を開始し
た. しかし, 障害物の回避には画像処理だけでは障害物とラジコンヘリとの距離感を判別する事が
できず, 障害物を回避することができない. そのため奥行を検出するためにセンサを導入しなけれ
ばならない. この問題は自動着陸のみを課題とすることが決定したために検討のみで終了した.
自動着陸については目的地まで手動操作であり, 着地のみを自動とする自律制御とした. ラジコ
ンヘリにはソフトウェア開発キットがラジコンヘリのホームページ上で公開されている. このソフ
トウェア開発キットは C 言語及び C++ 言語を用いて記述されている. このソフトウェア開発キッ
トを使用することによってコンピュータのキーボード上で, ラジコンヘリの操作することが可能に
なった. また, ラジコンヘリのソフトウェア開発キットを解析することによって, ラジコンヘリ本体
についている前方及び腹部のカメラの表示切り替えや, ラジコンヘリ本体についている 4 つのプロ
ペラを動かす 4 つのサーボモータの出力変更が可能になった. サーボモータの出力を変更できるよ
うになったことで, ラジコンヘリの速度の調整が可能になった. その後, ラジコンヘリをコンピュー
タ上で操作していく中で制御するプログラムと一定時間ごとに命令を指示して操作, 制御する簡単
なプログラムを作成した. このプログラムはオープンループ制御と呼ばれるもので一方的に命令を
送っているだけのプログラムである.
自動着陸を行うには着陸地点である赤丸の判別が必要不可欠である. そのために画像処理を行う
必要がある. 画像処理では, ライブラリである OpenCV を用いた. OpenCV を用いた画像処理で
は最初にラジコンヘリの代替装置として web カメラを使用して形状判別のプログラムを作成した.
その後, 自動着陸に用いる着陸地点の色のみを認識するプログラムを作成した. そして 2 つのプロ
グラムを統合し着陸場所を判別するプログラムを作成した. ラジコンヘリのソフトウェア開発キッ
トは DirectX を用いて動作している. 画像処理を行うためにはラジコンヘリのソフトウェア開発
キットを OpenCV で動作させる必要があった. ソフトウェア開発キットを OpenCV 上で動作させ
るために DirectX から一部書き換えた. 現在は画像表示を OpenCV, キーボードによる機体制御を
DirectX で行っている. 書き換えたソフトウェア開発キット上では画面の表示を行う処理が存在し
ないため追加しなければならない. そのため, OpenCV 上でラジコンヘリのカメラをコンピュータ
上で表示する画面を作成した. コンピュータ上で画面の表示を行った後, web カメラを用いて行っ
た画像処理をラジコンヘリのカメラを用いて行った. これによりラジコンヘリのカメラを用いた着
陸場所の判別, コンピュータ上の表示画面で自律飛行を行った場合や自律飛行中であることを示す
為に使用する文字の描画が可能となった. ラジコンヘリのカメラを用いて着陸場所の判別が可能に
なったことで, 自動的に着陸するフィードバックプログラムを作成できるようになった. しかし, こ
のプログラムは一度発見した着陸場所を見失うと一定方向へと永遠に進み続ける, 極端に明るい場
所や暗い場所など環境によっては画像処理が行われなずフィードバックプログラムが動作しない,
もしくは画像処理が誤作動し着陸場所へと着陸しない. ラジコンヘリ自体の位置を計算に入れてい
ないため画像処理が誤作動を起こした場合, 着陸場所とは見当違いの方向へと進行するなど問題点
Group Report of 2011 SISP
- 41 -
Group Number 15-B
Applied Embedded System
が挙げられる. これらの問題を解決するプログラムが簡易最適制御を用いたプログラムである. こ
れを行う為にラジコンヘリが進む距離, 傾き, 速度を物理モデルのデータとして, 表示画面と実際の
距離の違いをデータとして取得した. そして取得した物理モデルのデータから次の単位時間あたり
のラジコンヘリ自体の現在位置を予測して行動することで先に挙げた画像処理のみのフィードバッ
クプログラムの問題点を解決するだけでなく, 着陸場所から外れて行っても着陸場所へと再度進行
しなおすことが可能となった.
(※文責: 小野 義貴)
5.2
成果の評価
本プロジェクトの目標はラジコンヘリの自動着陸である. この目標を達成する為の課題は 7 個あ
る. それは, 画像処理, 自律飛行, ラジコンヘリのソフトウェア開発キットの解析, ソフトウェア開
発キットへのプログラムの追加, ラジコンヘリのデータ取得, 取得したラジコンヘリのデータから
数秒後のラジコンヘリの位置を予測する計算式の作成, ラジコンヘリの設定である. これら全てを
解決するには至ったが, 問題点が多々存在する. 画像処理では OpenCV ライブラリを使用してい
るが, メモリ開放に不備が存在している. その為にラジコンヘリのパフォーマンスが低下している.
自律飛行では現在, 人による手動でプログラムを開始している. そのためプログラムの開始までに
時間がかかる. 一度目標を見失った場合にリカバリーが聞かないことや, 外乱の影響を簡単に受け
てしまう事が挙げられる. ラジコンヘリのソフトウェア開発キットでは, 公式ホームページで宣言
されているバグやエラーの取り除き, 今回のプロジェクトでは実現可能には至らなかったラジコン
ヘリに実装されている腹部センサのオン, オフが挙げられる. また, 本プロジェクトの背景にあると
おり, 当初の目標は空を飛ぶ UFO キャッチャーである. 現在ラジコンヘリはバッテリーの関係上
短い時間しか飛ぶことのできない. それを解決する為にバッテリーの変更がまず挙げられる. 次に,
ラジコンヘリに取り付けるアームの問題である. 現在のラジコンヘリには積載重量の問題上アーム
を取り付けることが困難であり, 現在は検討のみで終了している. このアームを取り付けることで
ラジコンヘリが目標とした物体を取ってくるという事が可能となる. しかし, 前述のとおりラジコ
ンヘリの飛ぶことのできる重量の関係上, 物体を運ぶ事ができるほどの力が存在しない. そのため
にはラジコンヘリのプロペラを動かすモーターの変更も今後の課題として挙げられる. また, 障害
物の回避のためにセンサの導入も課題である. これは障害物の認識こそ画像処理のみでできるが,
障害物とラジコンヘリとの距離は現在判別することができない. その為に実装する必要がある. 以
上よりラジコンヘリのハードウェア面に多くの課題が存在し, ハードウェアを解決することによっ
て必然的にソフトウェアの問題点も挙げられるのである.
(※文責: 今 竜也)
5.3
担当分担課題の評価
本プロジェクトグループは 4 人で活動を行っている. プロジェクトグループの 4 人を更に 2 つ
の班に分割して作業に当っている. 2 つの班はそれぞれ飛行制御班と画像処理班である. 飛行制御
班は, ラジコンヘリのソフトウェア開発キットの解析やラジコンヘリの動きの詳細決定, ラジコン
ヘリの物理モデルのデータ収集, データを基にラジコンヘリの行動予測の計算及びラジコンヘリの
Group Report of 2011 SISP
- 42 -
Group Number 15-B
Applied Embedded System
フィードバックプログラムの作成, 簡易最適制御を用いたプログラムの作成を主に活動している.
画像処理班は, ラジコンヘリの代替として使用した web カメラを用いた形状判別のプロミングや色
の判別, 障害物回避におけるセンサの検討及び画像処理についての詳細決定, ラジコンヘリ上での
画像処理プログラムの実装を主に活動をしている. 以下は各人の役割と評価である
(※文責: 小野 義貴)
5.3.1
小野 義貴
1. 企画の立案
企画の立案でじっくりと内容を練れたのは良かったが自分達ができることをしっかり把握で
きていなかったため, 多くの意見が実行不可能であったなど反省するべき点が多くあった.
2. 企画書のプレゼンテーション
企画書のプレゼンテーションを行う中で, 立案した企画に必要な背景や付加価値をより深く
考える事ができた. スライドの作成に不備があるなど直すべき点が多く, また発表の事前練
習が少なかったために発表者との連携がうまくいかなかった.
3. 画像処理
ライブラリである OpenCV を用いて着陸地点の判別プログラムを作成した. ラジコンヘリ
のデモンストレーションとして Web カメラを使用してプログラムを作成した後に, ラジコ
ンヘリの仕様変更へと対応させラジコンヘリで画像処理のプログラムを実装した. しかしメ
モリの開放処理に不備があり, コンピュータ上でメモリ開放が実行されていないという欠陥
がありプログラムが短時間で停止するなど問題点が挙げらた.
4. 画像処理を用いたフィードバックプログラム
画像処理のプログラムをラジコンヘリで実装した後にフィードバックプログラムを作成し
た. 速度や傾きによって簡単にラジコンヘリが着陸地点を見失う, プログラムとは見当違い
の方向へと進むなど多くの問題が発生し, 予想以上に時間がかかった. 予定よりも時間がか
かった為にその後の予定が短くなる, プログラムがラジコンヘリの着地地点を見失った後に
コンピュータの操作を受け付けないなど反省すべき点があった.
(※文責: 小野 義貴)
5.3.2
横井 史也
1. 企画の立案
企画として魅力的であると他の人から評価を受けた. しかし, 話し合いと知識が圧倒的に足
りなく, 途中断念する場面が多々見受けられた.
2. 企画書のプレゼンテーション
プレゼンテーションを作成する際に確認する事項など話し合いの場が設けられた. そのとき
に企画の再確認などができて良かった. しかし, 発表の事前練習の足りなさにより成果物の
良さを伝えられなかった.
3. フローチャートの作成
フィードバック制御のために必要なパラメータを物理モデルから算出する必要があったが,
手計算だと計算量が膨大になってしまうため, C 言語による計算プログラムを作成した. そ
Group Report of 2011 SISP
- 43 -
Group Number 15-B
Applied Embedded System
のために必要な確率統計などの数学的な前提知識が全く足りておらず, 一度アルゴリズムを
理解するためだけに一月近くの期間を要してしまった. さらにそれをプログラムに書き直す
作業がとても時間がかかってしまい, 後期の作業の半分近くはこの作業に時間を費やした形
となってしまった. そのため簡易最適制御に関して詰める時間がなくなってしまい, とても
厳しいスケジュールとなってしまった. しかし, 技術的な完成度としては当初の予定した通
りのものができたといえる.
4. パラメータを求めるプログラムの作成
非線形多変量解析によって物理モデルより導き出された式を用いた制御式の作成をした.
PID 制御, Bang-Bang 制御が候補となっていた. しかし, これらの方法は時間的と技術的に
適さないと判断された. そのため, 簡易最適制御を用いることにした. その結果, プログラム
に問題なく組み込まれ, 着陸地点に最も近づく出力を選択できるようになった. しかし, 画像
処理のみのプログラムと画像処理, 簡易最適制御を組み込んだプログラムを比べた際に差異
が見られなかった. よって, 今後は差異が現れるような制御を組み込むことが課題とされて
いる.
5. ポスターの作成
ポスターセッションのためのポスターを作成した. 遠い位置から見る人のことを考え文字数
は最低限に抑え, 文字サイズも大きくした. 初めて見る人もわかりやすいように専門的な内
容だけでなく, 自律飛行のイメージ図を実写を使って表した. しかし, 本番時に使っていたポ
スターに誤りがあることが後々発見された. 早い段階からポスター作成に着手し, 最終確認
するための時間的余裕を作るべきであった.
(※文責: 横井 史也)
5.3.3
今 竜也
1. Web カメラを用いたフィードバックプログラム
実際にラジコンヘリで動作をする前に試作として Web カメラを用いてフィードバックプロ
グラムを作成した. 成果発表には使用しなかったがラジコンヘリへ画像処理プログラムを組
み込む上での土台とすることができた. この課題に関して要求された役割は達成できた.
2. 色判別プログラム
色判別は最終的に認識できるようになったが周囲の環境に左右される場合が多く, 課題を達
成したとはいいがたい. そして抽出したときに赤色以外も認識して結果, 赤色の目標物の周
りにノイズが入った. ここもノイズを極力減らすことはできたが完全になくすことはできな
かった. 今後の課題として環境に左右されないような色の範囲を決定することと現行のプロ
グラムだと1色しか認識できないので複数の色を同時に認識できるようにすることが挙げら
れる.
3. 形状判別プログラム
前期では学習をしながらプログラムを組んだため誤認識が多く, 課題を達成することができ
なかった. しかし, 後期では長期休暇中に基礎知識を含めた多くを復習したため早めにプロ
グラムを組むことができて精度向上に重点を置くことができた. このプログラムを単体で動
作させると未だ誤認識するので単体でも正しく動作できるようにすることと三角形や楕円な
ど様々な形でも認識できるようにすることが今後の課題である.
4. 赤丸判別プログラム
Group Report of 2011 SISP
- 44 -
Group Number 15-B
Applied Embedded System
プログラムを書き始めた当初はできるだけきれいなプログラムを書こうとしていたが基礎知
識と経験が足りなく早めに切り替えた. 赤丸判別プログラムは色判別プログラムと形状判別
プログラムを組み合わせたプログラムである. 成果発表の際には画像認識は成功した. 要求
されていた課題は若干問題もあったが大部分は達成できた. 残された問題, 課題は画像を扱
う上でメモリの確保と開放がうまく噛み合わず, 長時間の起動ができないことである.
(※文責: 今 竜也)
5.3.4
吉田 孝太郎
1. 企画の立案
企画として魅力的であると他人からの客観的評価を受けた. しかし, 話し合いと知識が圧倒
的に足りなく, 途中断念する場面が多々見受けられた.
2. 企画書のプレゼンテーション
プレゼンテーションを作成する際に確認する事項など話し合いの場が設けられた. その際に
企画の再確認などができた. しかし, 発表の事前練習の足りなさにより成果物の良さを伝え
ることができなかった.
3. ソフトウェア開発キット不具合解消
ラジコンヘリの公式が開発者用に公開しているソフトウェア開発キットの不具合解消をし
た. ラジコンヘリは元々専用の制御機器がある. そのためパソコン上での制御を目的とされ
ていないので, ラジコンヘリ本体と開発者用のソフトウェア開発キットとの仕様の違いなど
が多く見られた. また, 専用機器で使えた機能が使えない状態にあった. 例えば残量バッテ
リー・ラジコンヘリの高度の表示や水平カメラと腹部カメラの切り替えなどがあった.
4. 簡易最適制御の作成
非線形多変量解析によって物理モデルより導き出された式を用いた制御式の作成をした.
PID 制御, Bang-Bang 制御が候補となっていた. しかし, これらの方法は時間的と技術的に
適さないと判断された. そのため, 簡易最適制御を用いることにした. その結果, プログラム
に問題なく組み込まれ, 着陸地点に最も近づく出力を選択することが可能になった. しかし,
画像処理のみのプログラムと画像処理, 簡易最適制御を組み込んだプログラムを比べた際に
差異が見られなかった. よって, 今後は差異が現れるような制御を組み込むことが課題とさ
れている.
(※文責: 吉田 孝太郎)
Group Report of 2011 SISP
- 45 -
Group Number 15-B
Applied Embedded System
第6章
今後の課題と展望
今後の課題として, ラジコンヘリでの障害物の回避が挙げられる. これについては新たなセンサ
を実装することで解決していく見込みである. なぜならば, ラジコンヘリで前方を見ることができ
るカメラは 1 つである. その為 2 次元上での認識しかできない. しかし, 物体との距離を測るセン
サを追加することで解決する. 次に, ラジコンヘリのエラーである. ソフトウェア開発キットにはバ
グ及びエラーが複数存在する. カメラの切り替えにはバグが存在している. これはカメラの切り替
えを行うと稀にラジコンヘリが停止してしまうバグである. このバグによって腹部のカメラを初期
起動設定とすると起動時にもエラーが発生し停止してしまうのである. このバグは公式ホームペー
ジ上で宣言されている. また, ソフトウェア開発キットを DirectX 上から OpenCV 上へと仕様を
変更したことによって稀にラジコンヘリの正常な起動を行うことができない. これはラジコンヘリ
とコンピュータ間の通信エラーもしくはソフトウェア開発キット上でエラーが存在しているためで
あると推測される. そのため, これらを解決するにはソフトウェア開発キットの記述を改める必要
がある. 現在判明している課題として, OpenCV 上のメモリの開放ができていないことが判明して
いる. これによってコンピュータ上にメモリが蓄積され続け最終的にはラジコンヘリの操作のみな
らずラジコンヘリを操作しているコンピュータまでも停止する. これを解決する為には OpenCV
で記述しているソースコードからメモリの確保と開放の処理について変更を加えることである.
(※文責: 小野 義貴)
Group Report of 2011 SISP
- 47 -
Group Number 15-B
Applied Embedded System
付録 A
用語集
AR.Drone 本プロジェクトで採用したラジコンヘリの名称. 日本で 2010 年 9 月 16 日に Parrot
社から発売された AR ヘリコプターのことである.
ソフトウェア開発キット
簡易最適制御
AR.Drone の公開されているオープンソースのこと, 略称は SDK.
ラジコンヘリに実装している制御は最適制御の手順どおりの導出をしていないため
簡易最適制御とした.
自律飛行
指令や遠隔操作を必要とせず機上のコンピュータの判断のみで飛行する方法のことで
ある.
半自律飛行
人が操作するが, ある条件においては自律飛行すること. 今回は, 着地地点をコン
ピュータが, 発見しコンピュータの判断で着陸する障害物をコンピュータが発見しコンピュータの
判断で回避する. この 2 つである
Group Report of 2011 SISP
- 49 -
Group Number 15-B
Applied Embedded System
付録 B
活用した講義
画像工学 画像処理全般
プログラミング演習 1 C 言語及び C++ 言語を用いたプログラミング, 考え方全般
プログラミング演習 2 C 言語及び C++ 言語を用いたプログラミング, 考え方全般
プログラミング言語論
情報アーキテクチャ演習
C 言語及び C++ 言語を用いたプログラミング, 考え方全般
C 言語及び C++ 言語を用いたプログラミング, 考え方全般
オペレーションズ リサーチ
ラジコンヘリの物理モデルデータの計算
確率統計論 ラジコンヘリの物理モデルデータの計算
ロボティクス
ラジコンヘリの動作
制御理論 ラジコンヘリの動作
Group Report of 2011 SISP
- 51 -
Group Number 15-B
Applied Embedded System
参考文献
[1] Herbert Schildt. 独習 C++ 第 4 版. 翔泳社. 2010
[2] 谷尻豊寿. Essential OpenCV programming. 株式会社カットシステム. 2009
[3] ARDRONE open API platform. https://projects. ardrone. org/
[4] OpenCV. jp. http://opencv. jp/
[5] opencv. jp - OpenCV - 1. 1 pre リファレンス マニュアル(日本語訳). http://opencv.
jp/opencv-1. 1. 0/document/index. html
[6] ふろくらぶろぐ. http://floclo. blog20.fc2. com/
[7] 工学ナビ. http://kougaku-navi.net/
[8] BlueSky lab. http://thira. plavox. info/blog/2008/06/ c. html
[9] AR.Drone. com Japan. http://ardrone. parrot. com/parrot-ar-drone/jp
[10] AR.Drone Flyers. http://www. ardrone-flyers. com/
[11] Fenrir’s Blog. http://fenrir. naruoka. org/
[12] microsoft corporation http://www.microsoft.com/en-us/default.aspx
[13] Microsoft Visual Studio Express http://www.microsoft.com/japan/msdn/vstudio/express/
[14] Simple DirectMedia Layer http://www.libsdl.org/
[15] TBS テレビ. http://www.tbs.co.jp/job/
[16] STANFORD UNIVERSITY. http://www.stanford.edu/
[17] しましまとでんせつ. http://leg-ofguy.livedoor.biz/
Group Report of 2011 SISP
- 53 -
Group Number 15-B