2013年1月30日水曜日

Xtion and OpenNI2 on Mac OSX

農作業の合間に、RDCS (多数の自律型ロボットを人の作業と組み合わせて運用/開発する統合環境)のOpenNI2対応を進めています。結構、工数かかります。
Raspberry Piの検証は、終わったので、画像処理や、空間認識サービスを提供しているMac (OSX 10.8.2)での検証をしました。

インストールは、至って簡単! 10分でできました。
OpenNI2のOSX版を
   ・ダウンロード  Here click!
   ・解凍し、解凍してできたディレクトリーに移動する。
   ・install.sh 実行
   ・環境変数の設定 (OPENNI2_REDIST,  OPENNI2_INCLUDE)
    install.sh 実行後にOpenNIDevEnvironmentファイルが生成される。
    その中の情報をそのまま使う。
   ・Samples/SimpleViewerに移動する。makeでビルド
   ・Bin に移動して、実行(下の画面)

開発環境としても、問題ありません。ダウンロード、確認まで10分ほど。
ただし、OpenGL(freeglut), libusbは、事前にインストール必要です。Mac は既に、OpenGLが入っているので関係ないですね。
これからは、OPenNIを使っているserviceを、ガリガリとプログラム改修。

Raspberry Piの場合は、インストールパッケージの作成しなければなりません。
パッケージのbuildで、20から30分時間が必要なので、あまりにもすんなりに稼動確認ができたので、ビックリです。

お決まりの depth 画像
このデータを扱うと、すごく面白い事できます。
最近、飛んでいないラジコン飛行機が可哀想。
ラジコン飛行機は、空に絵を書く道具です。本当に、気持ちいいですよ!
でも、問題は、飛ばす所が減ってきた事。僕はなんとか確保していますが、、、
Raspberry Piの OpenNI2 で、Kinect を動かす事は、なんとか少しずつ進んでいます。
depthは取れます。僕は、depthが取れれば十分です。

ちなみに、Carmine1.90を発注してしまった。この円安の時に、、、 (-_-)

peace!

2013年1月28日月曜日

Xtion Pro and OpenNI2 on Raspberry Pi

OpenNI2のversion up が去年の12月にありました。
暫く移行を躊躇していました。しかし、そろそろ考えないとならないので検証しました。
Raspberry PiへのOpenNI2のインストール方法は、---> Here click!

      Xtion Pro-->  Raspberry Pi  > Arch Linux  >  OpenNI2  >  LXDE  >  AP

本日テストをして、その結果から、OpenNI2に移行する事に決めました。
写真は、Color stream と Depth steam テストのsnap shotです。
上のDepth画像と、下のVideo画像は、対象は違います。
Depth Stream  (snap shot)
Video Stream (snap shot)
LXDE上で、それぞれOpenCVを使ってストリームを表示しましたが、スムーズに表示できました。十分使える範囲だと思います。
これで、懸案の、OpenNI2への移行もなんとかなりそうです。
ただし、コンパイル&リンクの時間は、以前より長いかもしれません。

このような検証をする為に、LXDEの環境も作ってありますが、やはり使っているとフラストレーションが溜ります。
今回も、実行モジュールができるまでは、MacからSSH接続をして、画面表示の状態を確認するときだけLXDEで画面を見ます。

PCLの入力システムとしてのRaspberry Pi + Xtionは、なかなかの組合せです。
ただし、NITEは、考えてはなりませぬ。

今回のOpenNI2も、Kinectを公式にはサポートできない。
だんだんと、Raspberry PiでKinectを使う事が難しくなってきた。

いよいよ、Kinect 2台は、農場の監視カメラか。。。。。

peace!

My robot developing environment

最近、ストレス発散にブログを書く様になってしまいました。とにかく、まったく違う作業をするのは、ストレス発散です。


上の図は、自分の管理用の使っている変な図ですが、、、、

現在、3台のIntel CPUマシンと、8台のRaspberry Pi、Xtion, Kinect, Webcam 、Driver, 沢山のセンサー、サーボそしてモータで開発しています。ぐちゃぐちゃです。
それに、覚える事も多くて、、、、つらい。。。
まずは、システム系の開発と、4足歩行のメカニズム開発を先行させています。(車輪駆動は開発終了しました。あとは実機の組み立てだけです)

僕の場合は、「農作業工程を自動化する」その為に必用な「15万円のトマト収穫機を創り運用する」と言う発想が原点です。それが、全ての悪戦苦闘の始まり。
特に、ロボット開発の効率化を考えて、自分でロボット開発/運用の統合プラットフォームRDCSも作り出したもんだから、もう大変です。
通常は、ROSを使うべきです。でも、こういうのを一から作る事に、無類の喜びを感じてしまうのです。
ただ、RDCSは、ロボットを使った業務運用の統合管理の方の比重が高いので、ROSとはやっぱり大分違うと思います。

上図の下側は、Service Nodeで、比較的高性能なIntel系PCで、画像認識などの処理をロボットからの依頼で実施している。また、4DS(空間DB)などの共通情報もService Nodeで処理をする。課題は、ずばり「トマト認識」と「実時間処理」です。でも、12個/分のトマト収穫の為に必要なService処理は達成できそうです。まずは、ロジックがきちんとできれば良いでしょう。今年1年かけて、農場でトマト認識機能は改善します。
ハードは、年々高性能で安くなるのですから、、、、
Android端末も、ArchLinuxでサックと動かしたい。そうしたらもっと楽しいのに、、、、


8台のRaspberry Piは、夜になると怪しく赤く光ります。何かを待つかのように

peace!

2013年1月25日金曜日

An Installation of an Apache 2.4.3 on an OSX(10.8.2)

ロボットと、画像解析 service server ( Mac mini ) 間で、HTTP通信をする為に、Apache 2.4.3をインストールしました。また、起動時の自動実行を設定しました。
MacPortsではApache2.2しかインストールできないので、ビルドしました。
Apache HTTP サーバ バージョン 2.4 に従って行えばインストールまでは問題ありませんでした。全部で30分程度の作業です。ただし、Apatchは大きなシステムなので「肝」は「どのような運用をしたいか?」その一点。後は、それに基づく設定です。
僕の運用では、Monkey HTTP Serverで十分なのですが、Mac はmonkeyの対象外です。でも、確かめ見るのも、一興です。予想通りsourceからのbuildが巧く行かない、また解明する時間もないのでApacheを使う事にしました。

結局、ロボット間、サービス間の通信は、ほとんどをHTTP上で行う事に変更しました。元々、メッセージはXMLで定義していた。やっぱりこの方が楽なのと、通信制御と管理が、RDCSのscenario controller で十分可能な事が分かったので、変更をかけています。自分でやっているのに、結構気がつかない事が多い。設計時も、全く別ものとして考えていたので。思い込みは恐ろしい。scenario controllerは、簡単に言えば分散エージェント制御とworkflow engineを足したもの。
XML との付き合いは、もう15年目です。長いなぁ。でも、データ交換の側面だけが広がり、もう一つの本質的な側面が見過ごされている。僕は、見過ごされてきた方の技術に着目して、組織のコミュニケーションやイノベーションの研究に活用し、幸いにも沢山の企業に活用されているシステム製品の開発、また、地域活性化支援システムや教育支援システムの研究開発の仕事をしてきました。回りにも規格化で活躍している人も居たので、XMLには想い入れもあるのですが、、、ただ、見過ごされてきた技術には、システム思考と構造化技法の理解が必要なので、日本では広がらないと思います。

(1) Apacheのサイトから 2.4.3のソースをダウンロードして解凍
(2) ./configure
(3) make
(4) sudo make install
インストール先は、defaultで /usr/local/apache2 になります。

(5) sudo vi httpd.conf
ServerName  127.0.0.1:80                                             enable & change

(6) sudo /usr/local/apache2/bin/apachectl -k start
(7)  ブラウザーに、127.0.0.1 を入力
(8) " It  works! "  が、ブラウザーに表示されて、めでたし、めでたし
お決まりの、最初の画面
(9) CGIを試しても動かない。当たり前。下記の様に該当部分だけ変更する。
      下の指定方法は、2重に設定しているが、今回は元のhttpd.confを
  そのまま使うので、CGI実行に該当する所を全て変更する
(10) sudo vi httpd.conf
LoadModule cgid_module modules/mod_cgid.so         enable
Options Indexes FollowSymLinks ExecCGI                    add  ’ExecCGI’
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"     enable 
 <Directory "/usr/local/apache2/cgi-bin">                    change & add
     AllowOverride None
     Options ExecCGI
     Require all granted
     Order allow,deny
     Allow from all
     AddHandler cgi-script .cgi .pl .sh    
     AddHandler text/html .html
     AddHandler text/css .css
     AddHandler image/gif .gif
     AddHandler image/jpg .jpg
 </Directory>
AddHandler cgi-script .cgi .pl .sh                            enable  & add   .pl   .sh

(11) sudo /usr/local/apache2/bin/apachectl -k restart
これで、CGIは、OK

(12) Macでの自動起動設定
sudo mkdir /Library/StartupItems/apache2
sudo vi  /Library/StartupItems/apache2/apache2
cat  /Library/StartupItems/apache2/apache2
#!/bin/sh
. /etc/rc.common
StartService ()
{
/usr/local/apache2/bin/apachectl -k start
}
StopService ()
{
/usr/local/apache2/bin/apachectl -k stop
}
RestartService () { StartService; }
sudo chmod 755 /Library/StartupItems/apache2/apache2
sudo vi /Library/StartupItems/apache2/StartupParameters.plist
cat /Library/StartupItems/apache2/StartupParameters.plist
{
Description = "Apache 2.4.3 HTTP Server";
Provides = ("The Apache Software Foundation");
}

これで、次回からは自動起動です。

peace!

2013年1月24日木曜日

Configure a GPU memory size of a Raspberry Pi

RDCS機能強化の一環としてRamDiskとして使える容量を増やす為、BCM2835に割当てられているGPUメモリーを小さくしました。
「Raspberry Pi User Guide」や、ネットで調べてもArch Linuxでのやり方が出ていなかったでのRaspbianをdownloadして、SDカードから起動してraspi-configで設定。その後、raspi-configの内容を確認したら、/boot/config.txt に書き込んでいるようなので、/boot/config.txtを見てみたら、あら簡単。
gpu_mem=16

BEFORE
[root@rcmp-r03 ~]# free
                         total       used       free     shared    buffers     cached
Mem:         446772      52796      393976          0       8336      24740
-/+ buffers/cache:      19720     427052
Swap:       524284                0     524284
[root@rcmp-r03 ~]# vi  /boot/config.txt

gpu_mem=16                                                   add

[root@rcmp-r03 ~]# reboot

AFTER
[root@rcmp-r03 ~]# free
                       total       used       free     shared    buffers     cached
Mem:        495444       52256      443188          0       7896      24684
-/+ buffers/cache:      19676     475768
Swap:       524284                0      524284

peace!

2013年1月22日火曜日

An Installation of a Monkey http server (1.1.1) on a Raspberry Pi

Raspberry PiにHttp Serverを構築する必要がありました。
ロボット間通信は、いくつかの方法で実装していますが、その一部をHTTPに変える事にしました。その為に、軽量なhttp serverが必要です。NginXも試しましたが、cgiを動かす仕組みがなくadd onのソフトが必要なのであきらめました。robotのコントローラとして使っているのでRaspberry Piには、いろいろなソフトを入れたくない。
消去法で Monkey http server 1.1.1 にしました。結果的には、Monkeyで良かった。

私の様な用途、つまり”公開”用でなく内部システムのHTTP Serverとして使うには、このようなLightweightで、Simpleなソフトが必要である。大きな収穫でした。
http://monkey-project.com/
Monkeyは、ネットにも情報がありませんでした。手探りでインストールしてみました。Apacheと同じ感じです。結果は、perlのCGI も動かせる様になりました。
I found a report about the Monkey http server performance.

Monkey v/s NginX on a Raspberry PI - Monkey Project

インストール後、この画面がでればOK
Monkey http server(1.1.1-5)に関する感想や、注意事項
1) 設定ファイル編集
/etc/monkey/sites/defaultなどの編集ではtab送りをしない。
起動できないなどのエラーになる。
2) perl cgi の実行は、不安定な感じ? 大丈夫
CGI moduleをload するが、そのmoduleの問題かなぁ。perl cgi自体はコンソールで動くし、MacやISPのサーバで動いている。
発見!ちゃんと動きます。試しにやったら動きました。
perl
print "Content-Type: text/html\r\n\r\n";
sh
/bin/echo -e "Content-Type: text/html\r\n\r\n"
CプログラムをCGI経由で試したがperlと比較にならないくらい早い。やはりSDカードからのloadが大きい。CGI機能の確認の為にperlを使っただけです。
3) 感覚的には、静的なページは、NginXや、Apacheよりも早いかもしれない。
ただし、Raspberry PiはI/O系が少し弱いので、http serverはどれでも良いかも
僕は、通常のWebサーバーとしては使わないので影響はないですが。。。
4) Monkey についての基本的な情報がない
EQ(Emotional Intelligence)の低いソフトなので、推奨するソフトではありません。EQの低さは、Windowsにはかわなないけど。開発者自身の解説本も充実しているRaspberry Piは最高ランクです。EQを考えるとIT業界は成り立たないですが、、、
5) CUI開発に於ける、ArchLinuxの利便性(Monkeyとは、関係ないが。。。)
このような情報の少ないソフトを導入するときは、サービス起動、停止、rebootなどを繰り返しますが、Arch Linuxは爆速なので作業が早く進みます。何たって、rebootしても15秒以内で戻ってきます。コーヒを入れる間もない。(笑
GUIが必要なソフトは、Macで開発して、CUIベースでできる物は、Raspberry Piで十分です。ただ、くれぐれもRaspberry Piは、それなりに使うのが良いのです。

ところで、Web Server なのか? HTTP Server なのか?
私の場合は、ロボットシステムの通信手段として使うので、HTTP Serverです。

 Monkey自体の問題ではありませんが、注意点が一つあります。pacmanでアップグレードすると設定ファイルが上書きされます。必ず、/etc/monkeyの設定はコピーしておいて下さい。ただし、upgradeにより設定方法の変更があるかもしれませんので、上書きされた内容の確認は必要です。(2013/03/25)

------------------------------------------------------------------------------------------------
(1) Install packages
(2) Configure files
(3) Make directories and files
(4) Run (manual)
(5) Configure the systemd

(1) Install packages
[root@rcmp-r03 ~]# pacman -Syu
[root@rcmp-r03 ~]# pacman -S perl perl-archive-zip if you need...
[root@rcmp-r03 ~]# pacman -S monkey


(2) Configure files
[root@rcmp-r03 ~]# vi /etc/monkey/monkey.conf

    "port 2001"         to    "port 80"            change  a port number you want

    "User nobody"    to    "User root"          change   your root group user
    "UserDir public_html"    to   "UserDir /home/nao/public_html  
    "PidFile /var/run/monkey/monkey.pid" ->
                                  "PidFile /var/log/monkey/monkey.pid"
                '/var/run' is a link to '/run'.   '/run' is a ramdisk on Arch Linux

[root@rcmp-r03 ~]# vi /etc/monkey/plugins.load
# CGI
 ===
# This plugin enable the CGI support in Monkey. CGI is an old
# interface and not recommended for production enviroments, due
# to it nature, it lack of performance.
#
Load /usr/lib/monkey/monkey-cgi.so                           enable
[root@rcmp-r03 ~]# vi /etc/monkey/sites/default
[HOST]
    # DocumentRoot :
    DocumentRoot /var/http                                         enable & set
[CGI]                                                                             enable
    # Per-vhost CGI matching, same rules as with the global match
    Match /cgi-bin/.*\.cgi                                               enable  
[root@rcmp-r03 ~]# vi /etc/monkey/plugins/cgi/cgi.conf
[CGI]
     Match /cgi-bin/.*\.cgi .*\.sh .*\.pl                            add extensions  

(3) Make directories and files
[root@rcmp-r03 ~]# touch /var/log/monkey/access.log
[root@rcmp-r03 ~]# touch /var/log/monkey/error.log
[root@rcmp-r03 ~]# chmod +w /var/log/monkey/access.log
[root@rcmp-r03 ~]# chmod +w /var/log/monkey/error.log
[root@rcmp-r03 ~]# mv /srv/http /var
[root@rcmp-r03 ~]# mkdir /var/http/cgi-bin
[root@rcmp-r03 ~]# rm -r /srv
[root@rcmp-r03 ~]# mkdir /var/run/monkey

(4) Run (Manual)
[root@rcmp-r03 ~]# monkey -D 
Monkey HTTP Daemon 1.1.1
Built : Dec 14 2012 14:16:18 (gcc 4.7.2)
Home  : http://monkey-project.com
* Process ID is 1677
* Server socket listening on Port 80 
* 5 threads, 101 client connections per thread, total 505
* Transport layer by liana in http mode
[2013/01/22 12:55:33] [   Info] HTTP Server started

(5) Configure a systemd service
[root@rcmp-r03 ~]# vi /etc/systemd/system/monkey.service
[root@rcmp-r03 ~]# cat /etc/systemd/system/monkey.service
[Unit]
Description=Monkey http server deamon
Required=network.target
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/monkey -D
ExecStop=/bin/kill $MAINPID
ExecReload=/bin/kill $MAINPID ; /usr/bin/monkey -D
PIDFile=/var/log/monkey/monkey.pid.80
PIDFile=/var/run/monkey.pid.80
[Install]
WantedBy=multi-user.target
[root@rcmp-r03 ~]# systemctl enable monkey.service
ln -s '/etc/systemd/system/monkey.service' '/etc/systemd/system/multi-user.target.wants/monkey.service'
[root@rcmp-r03 ~]# reboot


peace!

rap-kinect

pacman -Syu
pacman -S gcc make cmake
pacman -S libusb
pacman -S git
mkdir kinect
cd kinect
git clone https://github.com/OpenKinect/libfreenect.git
cd libfreenect
cp CMakeLists.txt CMakeLists.txt.org
vi CMakeLists.txt

cmake CMakeLists.txt
make