2013年
6月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

2013-06-09 respberry piが死亡?

_ usbtmcまでの道のりは遠い

respberry piでusbtmcを使うために、いろいろと設定をしようとしていたら、応答しなくなった。電源を抜いて、もう一度差しても、うんともすんとも言わなくなってしまった。aptitude upgradeしていただけなのに。

計画としては、agilentから、usbtmc.tarをdownloadして、これをmakeして、usbtmc.koを作って、これをinsmodして動くか試そうとしていたのだが、これを試す前に、挫折してしまうとは。

そろそろrespberry piが値上げするという噂もあるし、値上げ前に追加購入するか、悩むところである。また死んでも悲しいし。

その後、いろいろと調べていたらSDが死んでいることがわかった。予備のSDで起動したら、動くことが分かったのだ。これで次のtrialができる。


2013-06-11 USBTMCモジュールのコンパイル

_ コンパイルはできたが

raspberry piのraspbianでUSBTMCを使うためにいろいろとやってみた。まず、agilentから、usbtmc.tarをdownloadしてこれのコンパイルを試みた。まず、kernelのソースをgitで落として、usbtmcをコンパイルしようとしたが、ソースが古いようで、なかなかうまくいかない。結果的には、二行だけいじることで、コンパイルは通るようになった。しかし、modpostが無いとか言われたので、カーネルのmake modulesしたら、usbtmc.koを作ることに成功した。しかし、insmodをしようとすると、
Error: could not insert module usbtmc.ko: Invalid module format
となってしまう。いろいろと調べていたら、kernelのソースのdrivers/usb/classに、usbtmc.cがあることを発見した。これをコンパイルした方が良いということで、これをmake modulesしてみたが、結果は同じだった。結局、kernelをコンパイルし直さないといけないと判断した。これは、また後にしよう。

2013-06-12 raspberry piで計測

_ raspbianのUSBTMC

raspbianのkernelを再構築することによって、USBTMCを組み込むことに成功した。これで、raspberry piを計測装置との通信マシンとして本格的に使うことができる。参考に、その手順を簡単にメモしておく。まず、必要なパッケージをインストールしたり、ソースをダウンロードしたりする。
sudo aptitude install kernel-package
cd /usr/src
git config --global http.proxy http://proxy:8080/
sudo git clone --depth 1 https://github.com/raspberrypi/linux.git
sudo ln -s linux linux-3.6.11+
cd linux
zcat /proc/config.gz >~/config.bak
sudo cp ~/config.bak .config
sudo ln -s /usr/src/linux /lib/modules/3.6.11+/build
次に、USBTMCを有効にするために、.configを編集する。具体的には、 CONFIG_USB_TMCについてのコメントがあるので、そこに
CONFIG_USB_TMC=y
と書いておいた。モジュールにしても良いのだが、モジュールの組み込みが面倒かなと思ってyにした。そして、Makefile中のEXTRAVERSIONに、TMCなどと必要に応じて名前をつける。そして、コンパイルである。
sudo make oldconfig
sudo make clean
sudo make
sudo make modules_install
sudo make install
makeは、7時間か8時間ぐらいかかるようである。熱暴走しないように注意する必要があるらしい。そして、kernelイメージを作って、置換する。
cd ..
sudo git clone --depth 1 https://github.com/raspberrypi/tools.git
cd /usr/src/tools/mkimage
sudo python imagetool-uncompressed.py ../../linux/arch/arm/boot/zImage
sudo mv /boot/kernel.img /boot/kernel.img.bak
sudo cp kernel.img /boot
また、/boot/config.txtにkernel=vmlinuz-3.6.11TMC+などという行を加えた。最後の方は、必要のないことをしているかも知れないが、再起動して装置をつないだら/dev/usbtmc0ができていたので、これで大丈夫なようだ。さらに、2012/4/15に書いたようなpermission関係の設定をしたら、無事にusbtmcで通信ができるようになった。現在、usbtmcとusb-serialを使って、装置を通信テストをしているが、今のところ問題無いようである。

_ 2015.3.13追記

SDが死んで、またUSBTMCを使わないといけなくなったので、過去のメモを参考にして、やってみた。まず、3.18.5+に変わっていた。また、bcが無いと言われたので、sudo aptitude install bcをした。調べてみると、ここに書いてあることが他の人の役にも立っているようで、メモしておいてよかったと思う。

_ 2021.5.20追記

/proc/config.gzが無い場合には、sudo modprobe configsとするとできる。また、gitで特定のbranchをcloneするときには、sudo git clone --depth 1 --branch rpi-4.1.y https://github.com/raspberrypi/linuxなどとする。


2013-06-13 様々な手法

_ rubyでベクトルの足し算

プログラムを組むときに、vaとvbのベクトル和を計算してsumに代入する必要があったので、いろいろな方法を考えてみた。まず、一番単純なものとしては、indexを使ってそれぞれの成分を足す方法がある。
va.size.times{|i| sum[i]=va[i]+vb[i]}
size.timesの代わりにeach_indexなどを使っても同じである。次に考えたのが、片方の値をmethodを使って取り出す方法である。
va.each_with_index{|v,i| sum[i]=v+vb[i]}
しかし、かえって長くなっているので、あまり意味が無いように思われる。やはり、methodをどう使うかが、rubyの醍醐味なので、次のようなものも考えてみた。
sum=va.zip(vb).map{|a| a.inject(:+)}
これは、zipでそれぞれの成分を配列にして、それをinjectで足してしまう方法である。でも、長さはあまり変わらない。素直にMatrixのVectorをつかえということかな。

2013-06-18 virtualbox¤ήetwork

_ ホストオンリーネットワーク

linux上のvirtualboxでvirtualなPCを立ち上げて、ホストとvirtualなPCの二台だけでネットワークを組みたい時がある。この際には、ホストオンリーネットワークというのを使えば良い。この時、DHCPサーバーの機能も組み込まれるが、ゲストに与えるIPの範囲を限定してしまえば、実質的な固定IPとして使うことができる。ゲストOSとして、古くて外部のネットワークにつなぐのを避けたい場合に、使いやすい設定である。


2013-06-22 OCRもどきの作成

_ imagemagickとrubyによるデジタル文字の取り込み

装置の7セグ表示器に表示される数字を、数値データとしてPCに取り込む必要性が生じた。とりあえずwebカメラで表示器を撮影して、ファイルとして保存しておいたのだが、これから数字を読み取ることにした。当初はOCRを使えば簡単にできると思っていたのだが、表示器の数字には対応していないようである。linuxでつかえるgocr、ocrad、tesseract-ocrを試したが、どれもダメだった。

そこで、7セグだけを読み取るプログラムを書くことにした。まずは、imagemagickのconvertを使って、白黒の単純なファイル形式であるpnmに変換した。なお、asciiで保存するために、-compress Noneオプションを付けた。それをrubyで処理することにした。

数字を認識するアルゴリズムをいくつか考えたが、結局以下のようなものになった。まず、周囲の文字が無い部分を取り除き、それぞれの文字に文理し、文字の部分を3*5に分割して、0から9までのパターンとの一致具合をxorで判定して足し合わせる。そして、点数の大小で数字を判定する。それなりに短いプログラムではあるが、まあまあの認識率である。

今後の課題としては、画像の中のどこに表示器があるかを認識することがある。今は表示器の部分を切り出した後でプログラムで処理しているが、切り出しも自動でできるようになれば、少しwebカメラが動いても、そのまま処理できるのだが。


2013-06-28 virtualboxでマウスの異常

_ virtualbox上のマウスの妙な挙動

ubuntu上のvirtualboxでwindowsNTを動かして、それで装置の制御を行っている。古い装置は古いOSでしか動かないので、面倒である。少し前にようやく動くようになって、しばらくは順調だったのだが、少し問題が生じた。

virtualbox上でマウスが妙な挙動をするのだ。動かしていないときは大丈夫なのだが、動かすと、クリックをしたときのような動作が起こり、誤動作を引き起こしかねない。virtualboxを再起動すると直るのだが、二度起こったので、今後も起こる可能性が高い。

原因としては、full screen modeとwindow modwを切り替えるときに、何かが起こるのか、screen saverが悪さをするのかである。とりあえずは、様子をみることにする。