歯みがきロボコン画像処理型自律ロボットpart3
歯みがきロボコンに出走させる画像処理による自律ロボットのpart3。 昨年度のロボットは、OpenCVを使って画像処理的には王道みたいなプログラムを書いたけど、 処理が重く移動速度も極めて遅かった。 今年度は、同じくOpenCVを使うけど、基本は画像の3点だけの白黒に注目して、 ライントレース処理を行い、単純な処理で実装させる予定。 また昨年度車体は、車体重心が後輪のキャスターに加わり、駆動輪が空回りしていたので、 この車体は、後輪駆動でパソコンを後輪上に載せ、空回りを防ぐ。
頭の上には、デジタルコンパスを置いて、これで車体の大まかな方向を把握させながら、 動かす予定。当初、パソコン下にコンパスを配置する予定だったけど、駆動モータが近いため、 方向の誤認が激しく、モータから遠いカメラ上に設置とする。 と、言っておきながら、ライントレースプログラムは今から書くんだよぉ~。
手抜きで、ライントレースさせてみた。 ひとまず、画面上の3点に注目すれば、ライントレース動作してくれて、 去年のような遅さは無い。 ただし、白・白でコースからはずれた時の処理が、手抜きなので、 簡単に止まってしまう。明後日のITフォーラムに展示するときまでに、どこまで動いているように見えるようにするのか…それが腕の見せ所。(手抜きコーディング能力ともいう…)
構造体と関数で受け渡し
前回の構造体の説明(基本文法と複合データ)に続いて、第2段。 関数と構造体の説明を行う。
構造体の一括代入
構造体同士の代入文は、要素の一括代入が可能なことを説明する。 この時に、古いC言語(K&R)の文法の話も交えて、古い文法も紹介する。
struct A { char n[10] ; int a ; } ; struct A a[ 10 ] ; struct A b ; // 一括代入の文法を知らないと... strcpy( a[0].n , b.n ) ; a[0].a = b.a ; // ANSI-Cであれば、この書き方ができる。 a[ 0 ] = b ; // K&Rであれば、 memcpy( &a[0] , &b , sizeof( struct A ) ) ;
値渡しとポインタ渡し
前期の説明での、値渡し・ポインタ渡しを説明し、配列は基本ポインタ渡しであることの復習を行う。
// 値渡し void foo( int x ) { x++ ; printf( "%d" , x ) ; } void main() { int a = 123 ; foo( &a ) ; foo( &a ) ; } // ポインタ渡し void foo( int* p ) { (*p)++ ; printf( "%d" , *p ) ; } void main() { int a = 123 ; foo( &a ) ; foo( &a ) ; } // 配列のポインタ渡し void foo( int x[] ) { x[0] = 123 ; x[1] = 234 ; } void main() { int a[ 2 ] ; foo( a ) ; printf( "%d %d" , a[0] , a[1] ) ; }
構造体とポインタ渡し
構造体を使ったプログラムでは、ポインタ渡しが多用される。 下記のように、構造体の中身を触る関数と、利用する関数に分けると、 プログラムで、データ構造の修正が容易になることを説明する。 この後、(*p).name 等を例にとり、型の概念を説明する。 最後に、p->name といったアロー演算子を紹介する。 教科書の中で、式の部分の型を説明してくれているものって少ない!!
struct Person { char name[ 10 ] ; int age ; } ; void read_person( struct Person* p ) { scanf( "%s %d" , (*p).name , &((*p).age) ) ; } void print_person( struct Person* p ) { printf( "%s %d" , (*p).name , (*p).age ) ; } void main() { struct Person data ; for( int i = 0 ; i < 10 ; i++ ) { read_person( &data ) ; print_person( &data ) ; } }
&((*p).age) | 式の部分のそれぞれの型 |
p | struct Personのポインタ |
*p | struct Personの構造体 |
(*p).age | int |
&((*p).age) | intへのポインタ |
Googleドキュメントの実験RGB2YUV
Googleドキュメントを使って公開したときの利便性の実験。 画像処理でのRGB2YUVの表計算を公開すると、便利かな…
インターンシップ報告会
4年の夏休み期間中に実施されたインターンシップ報告会が開催された。 来年インターンシップに参加する3年からも質問が出るなど、積極的な発表でした。
高専祭にて
10/16〜10/18の間、高専祭が開催されました。 カレー、たこ焼き、炊き込みご飯、ホットケーキにパウンドケーキ、 色々食べ過ぎてお腹いっぱいでした。 2日目は、子供を連れて参加しましたが、 子供にしてみれば、100円・200円といった 安くてちょっとづつ食べるのが楽しみみたいです。
高専も無償化
高校の無償化の中、高専はどうなるのかとの思いがあったけど、 高専も1年~3年についても、無償化となりそう。 支給方法も、直接家庭ではなく、学校に対してとなる方針だそうな。 ただし、4,5年は今まで通り。
行事予定の変更
新型インフルエンザや台風にともなう行事変更が、やむ終えず発生した。 これにより以下のような日程となった。
- 10月29日(木) 本科午前:弁論大会
インフルエンザ拡大防止に伴う10/15の授業との入替え。 - 11月09日(月)〜13日(金) 工場見学旅行は3月に延期
インフルエンザ拡大防止に伴う延期。この期間は通常授業。 - 11月12日(木) 2年校外研修、1,3,4,5年,専攻科は授業
台風に臨時休校の代替授業。 - 2010年3月8日(月)〜12日(金)に、工場見学旅行。
データベースシステムとは
データベース管理システム(DBMS:DataBase Management System)とは、 データベースのアクセスと制御を統括して行うソフトウェアの集まり。 これを構成するにあたり、利用者は3つに分類される。 データベース管理者、応用プログラマ、エンドユーザ。
データを扱うにあたり、プログラムとは独立して考え、 データ定義言語、データ操作言語(SQL)といった専用の言語で記述する。 データベースの基本機能として、データの独立性、一貫性C(正当性・同時実行制御I・障害回復D)が 重要。 また、データをアクセスするにあたり、 複数キーによる多面的な処理ができることが要求され、 最近では、オンライン即時実行といったネットワーク的な利便性が要求される。
データベースに対する視点として、内部スキーマ(データベースシステム)・概念スキーマ(データベース管理者の視点)・外部スキーマ(応用プログラマの視点)+エンドユーザの視点で分類される。
schema: 概要、概念
データベースをどのようなモデルで考えるか: 階層モデル、ネットワークモデル、関係モデル、オブジェクト指向モデル。
参考までに最近の、Webシステムで使われるデータベースの実態
オープンソース技術によるLAMPの普及や、負荷分散に伴う階層化されたシステムの 事例を紹介し、最近ではクラウド技術なども…といった説明を行う。
関係データベースとは
実用レベルで使われているデータベースモデルは、主に関係データモデル。1970年にIBMのコッドにより理論がまとめられた。
AとBが任意の集合であれば、A×B={(x,y)|x∈A,y∈B}を直積と呼び、すべての要素の組合せ。 関係Rとは、A×Bの部分集合。定義域がn個あるとき、n項組と呼ばれ、 属性:カラム:データ項目・フィールド、n項組:タプル:レコード、関係:リレーション:テーブル。 テーブルの中の各レコードを一意に指定できるカラムは、キーと呼ばれる。
関係データベースに対する操作
データベースへの操作は、SQL(由来がSEQUEL:Structured English Query Language)に よって行われ、以下のような操作が主体。
- 検索操作:選択(selection:特定のタプルを取り出す)、射影(projection:カラムの中から必要な属性だけを抜き出す,where句)、結合(join:直積で新しい関係を作り出す演算,FROM句)
- 更新操作:挿入(insert)、削除(delete)、更新(update)
保護者面談の実施
今日は、学校全体の保護者面談の日ということで、3EIについても 面談を行った。3年は担任交代したばかりという点もあり、夏休み期間中に ほとんどの保護者の方との面談を終えている。 今日は、その時点で都合の悪かった方を対象に行い、 一部成績の心配なご家庭については、再度の面談として実施した。
特に夏休み中の面談とは話す内容と同じではあったが、 工場見学旅行の延期について、説明の追加となった。
別件ではあるが、11月実施予定であった見学旅行での見学先より、 確認の連絡を受けた。 しかしながら延期予定は決まっているものの、3月の日程の詳細が正式決定でないため、 詳細を話せない状況であったが、先方企業に見学の見送りの返答を行った。 通常では、企業見学を行っていない部署に「ぜひお願いします」と依頼を 行っていた中での、ひとまずのお断りであったため、 先方に失礼の無い様にと冷や汗をかきながらの電話で気疲れしてしまった。
卒業研究中間発表(part1)
電子情報工学科では、先週より3〜4つの研究室毎で、卒研の中間発表を行っている。 斉藤研は、加藤・高久・奥田との4研究室合同で中間発表を行い、 各1名毎10分程度の発表時間と、教員よりその倍程の質疑応答時間で行った。
まだ、どの発表でも自分の研究の細かい点での理解が浅いため、 質問に答えられずに四苦八苦というのが現段階であった。 今後の研究の進展を期待したい…と言いたいのだけれど、 中間試験なども考えると、卒研に取り組める時間は短い。 わずかな時間しかないので、研究にまじめに取り組んでほしい。