OpenCVの表示とWiringPiのAPIが…
Raspberry-Piで OpenCV を使ったロボットを作ろうと、 簡単なデモプログラムの作成のお遊び中。
rootとGtk+が相性悪い
処理結果を表示しながらWiringPiでモータを動かそうとするけど、 /sys を使った制御はまどろっこしそうなので、wiringPiは、 C言語 API を呼び出すようにしてみた。 しかし、このプログラムを動かすには root が必要となる。
んで、OpenCV の結果を cvShowImage() で表示させながら、 WiringPiを使おうとすると、 「Gtk+ では root や setuid,setgid したプログラムはダメ!!」 という表示がでて動かない。
当初は、ロボット動かすときにOpenCV処理結果を Raspberry Pi から ssh でポートフォワードしたホストに表示させながら 動かすつもりだった。 でも、ssh+portforward の処理が重そうだし、/sys 経由の 制御に変更も面倒だし、ひとまずは必要最小限の情報を console に流して動かすことにしよう…
画像の取込み速度
ちなみに、uv4l(320×240)で ssh ポートフォワードで、カメラ情報を何もせず表示するだけで、 1[frame/sec] 程度であった。 あまりに遅いし、画像表示処理を抜いたら、uv4l(160×120)で5[frame/sec]程度であった。 これなら、簡単なライントレースは十分動くだろう。
UPSが絶命…

職場のネットワーク監視nagios3から、 自室設置のサーバがUP/DOWNを繰り返し絶滅した雰囲気のメールが届く。 断末魔の叫びを繰り返して絶命する時は、 ルータ(WiFi安物)だろうと出勤したけど、普通に使えてる。
おかしいなぁ〜と思いながら仕事を始めたら、 ピピピの警報がなってサーバが落ちた。 UPSが原因。 家庭用のUPSの2年半モノなので、普通にバッテリー寿命が原因だろう。 バッテリーが老朽化していても、瞬間停電1秒には耐えられるだろうと、 そのまま使っていたけど、停電でもない平常時に落ちるかぁ〜?
前のUPSは、漏電トラブル起こしてくれたし…
パイプ処理
前回の授業では、標準出力・標準入力・入力リダイレクト・出力リダイレクトなどの説明を行った。 今回は、この考え方をさらに応用したパイプ(unixパイプ)について説明する。
入力リダイレクトや出力リダイレクトでは、 ファイルという概念では、キーボードの入力とファイルからの入力、画面への出力とファイルへの出力が 同じように扱えるため、プログラム起動時にリダイレクトを設定すれば、簡単に切り替えられることを説明した。
しかし、ファイルでは、他のプログラムからの出力を入力として使ったりすることもできる。
例えば、以下の様な、名前と複数科目の点数のファイルがあって、各人の平均点を求めるプログラムがあったとする。
(( mean3.c )) #include <stdio.h> void main() { char name[ 100 ] ; int point[ 3 ] ; while( scant( "%s%d%d%d" , name , &point[0] , &point[1] , &point[2] ) == 4 ) { printf( "%s %lf" , name , (point[0]+point[1]+point[2]) / 3.0 ) ; } }
さらに、名前と点数のデータから、全員の平均点を求める以下のプログラムがあったとする。
(( mean-all.c )) #include <stdio.h> void main() { char name[ 100 ] ; int count = 0 ; double sum = 0.0 , p ; while( scant( "%s%lf" , name , &p ) == 2 ) { sum += p ; count ++ ; } printf( "%lf" , sum / count ) ; }
この時点で、名前と3教科のデータが入ったファイルがあったならば、以下の様に実行すれば、 画面に全員の平均点が表示される。
$ mean3.exe < data.txt > data-a.txt $ mean-all.exe < data-a.txt
しかし、各人の平均点の中間結果を data-a.txt に保存しなくても、 以下の様なパイプで処理を起動すると、一度に 結果を確認できる。
$ mean3.exe < data.txt | mean-all.exe
2014年歯みがきロボコン(小学生の部)の車体
この数年、福井県歯科医師会さんとの「歯みがきロボットコンテスト」の運営の 協力をしているなか、小学生・リモコンの部に参加する子ども向けの 夏休みの工作教室の準備を始めた。
しかし、今まで使ってきた 『楽しい工作シリーズ No.170 リモコンロボット製作 クローラータイプ (70170)』 が作成中止になり、入荷ができないとのことであった。 そこで、今年は改めて違う工作セットで作ることとなった。 キャタピラタイプのロボット製作セットでは、部品が足りないので、 別のパーツと組み合わせ、ひとまず試作。
夏休みの親子工作教室の2~3時間で作る (といってもリモコン・ギヤボックスなどは先に作っておく)必要があるから、 シンプルな構成とした。