トップ «前月 最新 翌月»
【ソース+水=麦茶色の何か】

半期 四半期 全カテゴリ

今日の一言


2010/09/01(Wed) 時間の進みが早すぎる [長年日記] 編集 22:00現在弱いにわか雨 29℃

_ [雑記][Debian][Linux]Dell Precision M4400上のDebianで無線Lanを動かす

使われているチップセットの確認

以下のコマンドを実行する。

 $ lspci | grep Wireless

すると、

 0c:00.0 Network controller: Intel Corporation Wireless WiFi Link 5100

といったメッセージが表示されるので、「Intel Corporation Wireless WiFi Link 5100」用のドライバを用意すればいいことが分かる。

ドライバのインストール

手っ取り早く済ませたい場合は、こちら(http://wiki.debian.org/iwlagn )にかかれている方法を実行すればいい。

*ただし、カーネルが2.6.32になってしまうので、カーネル依存のモジュールやプログラムがある場合には使用できない。

まず、「/etc/apt/sources.list」に以下の2行を追加する

 # Backported packages for Debian Lenny
 deb http://www.backports.org/debian lenny-backports main contrib non-free

そして、

 # aptitude update
 # aptitude -t lenny-backports install debian-backports-keyring

で更新し、

 # aptitude -t lenny-backports install linux-image-2.6-$(uname -r | sed 's,.*-,,') firmware-iwlwifi wireless-tools

で、適切な2.6.32カーネルイメージとドライバ、ツールをインストールする。

あとは、再起動して、新しくできた2.6.32カーネルのDebianを起動すれば、NetworkManagerに無線Lanが追加されているはず。

*うまくモジュールが組み込めていない場合は、

 # modprobe iwlagn

として、手動で組み込む。

また、デバイスの状態は、

 # iwconfig

で得られる。

接続及び切断は、

 # ifconfig wlan0 up
 # ifconfig wlan0 down

である。


2010/09/02(Thu) ちょあー [長年日記] 編集 1:00現在 27℃

_ [Debian][Linux][Choromet][雑記]Debian(Lenny)にufwをインストールする

以前の記事(http://robotics.naist.jp/~akihiro-i/dialy/?date=20100114#p01)で、DebianやUbuntuでは、ファイアーウォールの設定にはufwが便利と書いたが、Lennyではufwがパッケージから削除されており、aptではインストールできない。

なので、ここでは.debをDLして手動でインストールする。

(参考:http://www.lamiscela.net/2010/04/03/installing-ufw-in-debian-5/

ufwをインストールする際に0.6.11以上のpython-centralが求められるのだが、apt-getで入れられるのは、0.6.8である。

よって、先にこちら(http://http.us.debian.org/debian/pool/main/p/python-central/python-central_0.6.14+nmu2_all.deb)から「python-central_0.6.14」をDLし、

# dpkg -i python-central_0.6.14+nmu2_all.deb

でインストールしておく。

つぎに、こちら(http://ftp.us.debian.org/debian/pool/main/u/ufw/ufw_0.29.3-1_all.deb)からufwをDLし、

# dpkg -i ufw_0.29.3-1_all.deb

でインストール。

以上!

_ [Debian][Ubuntu][FC][Linux][Choromet][研究関係][雑記]HRP2-m Chorometを使うその1 環境の構築

ユーザーズガイドで何ヶ所か詰まったので、メモっておく。メモなので、間違ってても知らん。

(ネットワークケーブルを使っての)ログイン

ケーブルの差し方等はマニュアルを参照のこと。また、電圧は8V程度(9Vを超えると故障するので注意)

ホストPCの設定

まず、ユーザーズガイドに従い、ケーブルを接続する。

出荷時のChorometの設定では、「/etc/hosts」に

192.168.201.222 hrp3host

と登録されているので、ホストPC側のIPアドレスを「192.168.201.222」に変更する。

*Debianの場合、デフォルトのnetworkmanagerが有線ネットワークの切り替えに対応していないっぽい。

なので、自分の場合は「/etc/network/interfaces」を用途ごとに別名(チョロメテ用:interfaces.choromet,ネット用:interfaces.dhcp)で作成しておき、

 # /sbin/ifconfig eth0 stop
 # cp /etc/network/interfaces.choromet /etc/network/interfaces
 # /sbin/ifconfig eth0 start

ってな感じで切り替えている。

スクリプトにしておくと、特に不自由も感じないと思われ。

※(11/03/23)以下のコマンドを打つだけでいいっぽい。

$ ifconfig eth0:0 192.168.201.222
telnetでログイン

デフォルトのChorometのIPアドレスは「192.168.201.110」なので、

[hrp3host $] telnet 192.168.201.110

とすればログインできる。

*ホストPC側の「/etc/hosts」に

192.168.201.110  hrp3

と書いておくことで、

[hrp3host $] telnet hrp3

でログインできるようになる。

*ユーザー名やパスワードはユーザーズマニュアル参照のこと。

NFSマウントの設定

まずホストPC側に「nfs-kernel-server」をインストール。

[hrp3host #] apt-get install nfs-kernel-server

マウントするディレクトリを作成し、

[hrp3host #] cd /home
[hrp3host #] mkdir export
[hrp3host #] chmod 777 export

以下の一行を「/etc/exports」に追記。

/home/export hrp3(rw,no_root_squash)

で、NFSサーバを(再)起動する。

Debian系
[hrp3host #] /etc/init.d/nfs-kernel-server restart
Vine
[hrp3host #] /etc/init.d/nfs restart

*エラーが出る場合は、ファイアーウォールをいじる必要があるかもしれない。

で、うまくマウントできたら、デフォルトでnfsサービスが起動するように以下の設定を行う

Debian
[hrp3host #] /usr/sbin/sysv-rc-conf nfs on

*もし入っていない場合は、

[hrp3host #] apt-get install sysv-rc-conf

でインストールできる。

Ubuntu
[hrp3host #] /sbin/sysv-rc-conf nfs on
Vine
[hrp3host #] /sbin/chkconfig nfs on

GrxUIの環境を整える

面倒なので、Debian(Ubuntu)の場合のみ書く。

まず、「/etc/apt/sources.list」に以下を追加。

deb http://javadesktop.org/lg3d/debian stable contrib

で、インストール。

[hrp3host #] apt-get update
[hrp3host #] apt-get install sun-java6-bin
[hrp3host #] apt-get install sun-java6-fonts
[hrp3host #] apt-get install sun-java6-jdk
[hrp3host #] apt-get install libreadline-java

これに加え、Java3Dのインストールが必要。

まず、こちら(https://java3d.dev.java.net)から「java3d-1_4_0_01-linux-i586.bin」をDL。(1.5以上だと無理っぽい)

で、手動で配置し、インストール。

[hrp3host #] mkdir /usr/share/lg3d-jdk
[hrp3host #] mkdir /usr/share/lg3d-jdk/jre
[hrp3host #] cp java3d-1_4_0_01-linux-i586.bin /usr/share/lg3d-jdk/jre/
[hrp3host #] cd /usr/share/lg3d-jdk/jre
[hrp3host #] sh java3d-1_4_0_01-linux-i586.bin

さらに、ゼネラルロボティックスのサポートページ(http://www.generalrobotix.com/support/support.htm)から「vrml97.jar」をDLし、「/usr/share/java」以下にコピーする。

[hrp3host #] cp vrml97.jar /usr/share/java/

で、javaをgciからjdk6に切り替える。

[hrp3host #] update-java-alternatives -s java-6-sun

最後に、シンボリックリンクを作成する。

[hrp3host #] ln -s /usr/bin/java /usr/java

制御ソフトウェアのインストール

ゼネラルロボティックスのサポートページ(http://www.generalrobotix.com/support/support.htm)から「OpenHRP Controller Module for Choromet」をDL。

で、DLした「CHOROMETyyyymmdd.tgz」を「/home/export」以下に配置。

[hrp3host $] cp CHOROMETyyyymmdd.tgz /home/export
[hrp3host $] cd /home/export
[hrp3host $] tar zxvf CHOROMETyyyymmdd.tgz

次に、「sHrpsys/Make.rules」の以下の部分を環境に合わせて編集する(場合によっては不要)。

[OPENHRPHOME] ・・・ OpenHRP3を利用する場合にそのインストールディレクトリを指定。
[JDK_DIR] ・・・ Java のインストールディレクトリ。
[JAVA_EXTDIR_FLAGS] ・・・ Java3D や JMF、VRML97.jar のパスを指定。

Make.rules 編集後、以下のディレクトリで Make し、config.sh を生成する。

[hrp3host $] cd sHrpsys/robot/CHOROMET/bin/
[hrp3host $] make

以上!

環境の構築終わり!

*使い方については、ユーザーズガイドだけで十分と思われ。なので省略〜。

_ [Debian][Ubuntu][FC][Linux][OpenHRP3][Choromet][OpenRTM][研究関係][雑記]OpenHRP3(3.0.7)のインストール

完っ全に需要がなさそうな情報ですな。まあ、個人的なメモだからどうでもいいが。

OpenHRP3のインストール方法は前の日記(http://robotics.naist.jp/~akihiro-i/dialy/?date=20091118#p01)でも書いたが、バージョンが上がって色々変更されているっぽいので、もう一度書いておく。

今回使うのはVer.3.0.7。

グラフィック能力を確認

OpenHRP3は割とグラフィカルなソフトので、パソコンで3Dグラフィックスが正常に動作するかをまず確認。

端末を開いて次のコマンドを実行。

 $ glxinfo | grep rendering

結果が "direct rendering: Yes" であれば、問題なく使える。

NOの場合は、頑張って3Dアクセレレーション機能をサポートするグラフィックドライバを導入する。

OpenHRP3のDL

こちら(http://www.openrtp.jp/openhrp3/jp/index.html)から「OpenHRP-3.0.7.zip」をDLし、

$ cd
$ mkdir src
$ cd src
$ unzip (ソースパッケージダウンロード先)/OpenHRP-xxx.zip

*OpenHRP3のインストール先は、「sHrpsys/Make.rules」で指定した場所と一致させる必要がある。なので、「sHrpsys/Make.rules」をヴァージョンに合わせて書き直し、再Makeしておく。

パッケージ導入スクリプトの実行

Ubuntuの場合、公式ページにある通り、

$ cd ~/src/OpenHRP-xxx/util
$ ./installPackages.sh packages.list.ubuntu.8.04

を行うだけでいいが、Debianの場合、別にOpenRTMを入れる必要がある。

こちら(http://www.openrtm.org/OpenRTM-aist/html/FrontPage.html)から、「OpenRTM-aist-1.0.0-RELEASE」をDLしインストールするのだが、こだわりがなければ、ビルド済みパッケージから「Debian 一括インストール・スクリプト(pkg_install_debian.sh)」をDLし、実行した方がはるかに便利である。

# sh pkg_install_debian.sh

また、tvmetについても、こちら(http://www.openrtp.jp/openhrp3/download/tvmet_1.7.1-1_i386.deb)からDLしてdpkgで入れる必要がある。

コンパイルの準備

まず、コマンドライン上でOpenHRP3のソースディレクトリへ移動。

$ cd ~/OpenHRP/OpenHRP-xxx

で、設定ファイル"Make.vars"をコピー。

$ cp Make.vars.ubuntu.8.04 Make.vars

今までデフォルトの設定をしていた場合はこれでOK。

で、祈りを込めて、

$ make

これでOpenHRP3のインストールは終了!

_ [Debian][Ubuntu][FC][Linux][OpenHRP3][OpenRTM][Choromet][研究関係][雑記]HRP2-m Chorometを使うその2 OpenHRP3(3.0.3)を使ったシミュレーション

*上記のOpenHRP3(3.0.7)ではchorometのシミュレーションが動かないっぽい。

基本的には3.0.7と同じだが、「OpenRTM-aist-0.4.2-RELEASE」を使う点に注意。

*しかも、リポジトリから0.4系のOpenRTMがなくなっており、一括スクリプトが使えない!

頑張ってソースをコンパイルすべし。

*自分の場合、「rtm/Properties.h 」に

#include <limits.h>

を、「rtm/ConfigAdmin.cpp」に

#include <string.h>

を加えるだけでよかったので、そんなに面倒ではないかも?(依存関係の問題が起きなければ)

サンプルシミュレーションの実行

こちら(http://www.openrtp.jp/openhrp3/jp/simulate_sample_3_0.html)を試してみて正常に動けばOK。

動かなければ、自力でガンバレ。

GrxUI上でChorometのシミュレーションを行う

とりあえず、ライセンスファイル(license.dat)は取得済みとして、それを「sHrpsys/robot/CHOROMET/bin.x86」以下に置く。

そして、「/sHrpsys/robot/CHOROMET/bin.x86/」下で、

$ ./GrxUI.sh

を実行。

あとはユーザーズマニュアルを見ながらガンバレ!

_ [Debian][Ubuntu][FC][Linux][OpenHRP3][Choromet][OpenRTM][研究関係][雑記]HRP2-m Chorometを使う おまけ

購入時のメールの文面から見るに、「OpenHRP Controller Module for HRP-2m Choromet」のライセンスは、1CPUあたり1ライセンスらしい。

なので、同じPCであれば、OSを入れ直しても大丈夫!?

自分の場合も、マルチブートのDebianとUbuntuで同じライセンスファイルが使えたので、 おそらくOK・・・のはず。


2010/09/03(Fri) SRWL、イクサー1て! [長年日記] 編集 15:30現在 33℃

_ [C++][Debian][FC][Linux][Ubuntu][研究関係][雑記]GTK+を使ってGUIアプリケーションを作る その0

とりあえず、環境を整える。

# apt-get install libgtk2.0-dev libgtk2.0-doc

以上!

*勉強には、「GTK+/GNOMEによるGUIアプリケーションプログラミング」のサイト(http://www.iim.ics.tut.ac.jp/~sugaya/books/GUI-ApplicationProgramming/)で公開されているプログラムソースを読むのがいいと思われ。

サンプルがあれば、使い方や書き方は大体わかるはず。

(もちろん、本もあった方がいいと思うが)


2010/09/07(Tue) 今週が山場!? [長年日記] 編集 16:00現在 30℃

_ [雑記]いろいろ反省

過去の日記見ながら作業してたら、自分がいかに適当なことを書いていたかを実感した。

もし万が一、ここを参考にしている人がいたら、すみませんでした。

猛省します。

_ [Linux][Ubuntu][Debian][FC][研究関係][雑記][OpenCV] OpenCV2.1で、IEEE1394カメラを使う(録画も出来るようにする)

・・・なんか、このメモ、前にも書いた気がする・・・。

*やっぱりここ(http://robotics.naist.jp/~akihiro-i/dialy/?date=20100520#p01)で書いてました。どうもOpenCVタグをつけ忘れていたっぽい。

なので、今回のメモで動かない場合は、過去のを見たほうがいいと思われ。

*反省して即、適当なことを書いている件についてはスルーしてください。

IEEE1394カメラを使える環境を整える

まず、ここ(http://damien.douxchamps.net/ieee1394/coriander/)からcorianderをDLし、「make install」。

*「coriander2.0」だと、「libdc1394 version 2.0.2」を要求されるので、OpenCV1.x系の場合は注意したほうがいいかも。

(OpenCV1.x系はlibdc1394-13-devでないと動かなかった気がする)

corianderのmakeに必要なもの

 $ sudo apt-get install libgnomeui-dev
 $ sudo apt-get install libxv-dev
 $ sudo apt-get install libraw1394-dev
 $ sudo apt-get install libdc1394-22-dev
( $ sudo apt-get install libdc1394-13-dev ) 1.x系の場合
 $ sudo apt-get install libsdl-dev
 $ sudo apt-get install ftplib-dev

他に足りないのがあれば、./configureをしたときに教えてくれるはず。

後は普通に

 $ ./configure
 $ make
 # make install

し、

 # coriander

で、IEEE1394カメラが使えることを確認する。

OpenCV(2.1)のインストール

まず、必要なものを集めておく。

($ sudo apt-get install cmake )
 $ sudo apt-get install cmake
 $ sudo apt-get libavcodec-dev
 $ sudo apt-get install libavformat-dev
 $ sudo apt-get install libswscale-dev
 $ sudo apt-get install libgstreamer-plugins-base0.10-dev
 $ sudo apt-get install libmlx4-dev

で、ここ(http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.1/)から「OpenCV-2.1.0.tar.bz2」をDLして解凍し、

 $ cmake .
 $ make
 # make install

後はこの辺(http://opencv.jp/sample/video_io.html)のを試して録画出来ればOK!

_ [Debian][Ubuntu][Linux][研究関係][雑記]Debian(lenny)にnvidiaのドライバを入れて、デュアルディスプレイにする

Debianでは自動でディスプレイを認識してくれないっぽい?ので、手動で設定する。

まず、apt-getでnon-freeなパッケージもインストール出来るように、「/etc/apt/sources.list」を以下のように書き直す

 deb http://ftp.jp.debian.org/debian/ lenny main contrib non-free
 deb-src http://ftp.jp.debian.org/debian/ lenny main contrib non-free

*「 contrib non-free」を書き加えただけ

で、

 # apt-get updata
 # apt-get install nvidia-kernel-2.6-686 nvidia-glx nvidia-settings nvidia-xconfig

でインストールし、

 $ nvidia-xconfig --keyboard=jp106

と打って設定ファイルを作る。

(とりあえずここで再起動?)

*この際、キーボードの設定が変わってしまうことがあるので、適宜修正する。

後は、

 $ nvidia-settings

とすれば、GUI上で設定が出来るはずなのだが、自分の場合は、外付けのディスプレイが読み込めないのか、ディスプレイが1つしか認識されていなかった。

なので、設定ファイルを書き直して、無理やりディスプレイ出力させた。

「/etc/X11/xorg.conf」のScreenセクションにTwinViewのオプションを追加する。

  Option         "TwinView"
  Option         "TwinViewOrientation" "CRT-0 LeftOf DFP-0"

この場合、、メインが右、サブが左という設定になる。

*反対にする場合は"CRT-0 RightOf DFP-0"。

これで、再起動後は、nvidiaのドライバを使って立ち上がるはず。


2010/09/08(Wed) 肉が食いたい [長年日記] 編集 0:00現在 28℃

_ [Debian][Ubuntu][FC][Linux][Choromet][研究関係][雑記]1つのNICに複数のIPアドレスを割り当てる(HRP2-m Chorometを使う おまけその2)

例えば、デフォルト設定のchorometの場合、ホストPC側のIPアドレスを「192.168.201.222」にする必要がある。

もちろん、ホストPCに合わせてchorometの方の設定ファイルを変更してもいいが、DHCP等で自動割り当てされており、固定IPでない場合には、これは使えない。

そういった場合には、DHCPにより割り当てられるIP以外に、chorometと接続する用のIPアドレス「192.168.201.222」を割り当てておく方が便利だ。

1つのNICに複数アドレスを割り当てるには、ifconfigコマンドの持つ、IPエイリアスという機能を利用する(http://www.itmedia.co.jp/help/tips/linux/l0494.html)。

 # ifconfig eth0:0 192.168.1.12

この場合、メインとなるインターフェイス名「eth0」の次に「:」とエイリアス番号(通常は0から始まるエイリアスの連番)を指定している。

これで、

 # ifconfig

を打つと、通常の「eth0」に加え、「eth0:0」という仮想的なインタフェースが現れるようになる。

意外と便利なのでぜひお試しあれー。

以上!

_ [C++][雑記]配列を引数にとる関数についてのメモ(sizeofの結果が4バイトになってしまう話)

具体的には、以下のようなプログラムを書いた場合に、引数とした配列のサイズを関数内で得ようとしたときに、sizeofの結果が4となる理由についてのメモ。

*これが原因でセグメンテーションフォルトを起こしていたので、反省の意味も込めて書いておく。

*より詳しく知りたい人は、こちら(http://www.cc.kyoto-su.ac.jp/~yamada/ap/array.html#argument)とか、こちら(http://www.jpcert.or.jp/sc-rules/c-arr01-c.html)を見た方がいいかも。

 #include <stdio.h>
 int test_sizeof( char* str)
 {
   int n;
   n = sizeof(str);
   printf("func: size=%d %s\n",n,str);
   return 0;
 }
 int main()
 {
   int n;
   char str[] = "――――I am the bone of my sword.";
   n = sizeof(str);
   printf("main: size=%d %s\n",n,str);
   test_sizeof(str);
   return 0;
 }

結果:

 main: size=39 ――――I am the bone of my sword.
 func: size=4 ――――I am the bone of my sword.

printfでは、同じ39文字の文字列が表示されるにも関わらず、関数内でのsizeof()の結果は4。

で、なぜ、こういう結果が出るのかであるが、端的に言うと、配列を引数にとった場合、実際にはポインタが渡される為である。

上のプログラムを見れば分かるが、文字列「str」はポインタ変数として渡されている。

その為、関数内で「str」のサイズを得ようとしてsizeof(str)としても、得られるのは、ポインタ変数1個分のサイズ(4バイト)である。

とまあ、非常に単純な話なのだが、ここで問題を分かりにくくしているのが、

 int test_sizeof( char* str)

ではなく、

 int test_sizeof( char[] str)

と書いてもコンパイル出来る点である。実際にはポインタなのに、あたかも配列のように扱えるため、こんな間違いを犯してしまう。

結局何が言いたいかというと、これを考えずに、sizeofの結果を使ってmallocでメモリを確保すると、後で原因が分からなくなって大変困る、ということだ。

以上!