LinuxでもPepperを使う
書籍「Gainer互換Pepperでフィジカル・コンピューティング」ではMacOSXとWindowsからの利用方法を説明しました。Linuxからも利用できることが確認できたので紹介します。

書籍「Gainer互換Pepperでフィジカル・コンピューティング」ではMacOSXとWindowsからの利用方法を説明しました。Linuxからも利用できることが確認できたので紹介します。
書籍の執筆時点では、LinuxでPepperを動作させようとすると、kernelに含まれるドライバにパッチをあてて、再コンパイルする必要がありました。初心者にはこの操作が難しいため、説明を断念しました。
ところが、最新のkernelにはこのパッチがあらかじめ含まれています。2009年の秋に出た最新のLinux ディストリビューションを利用すれば、比較的容易に導入できるようになりました。
以下のディストリビューションではkernel 2.6.31が採用されています。すでにLOW-SPEED-CDCパッチがあたっているため、カーネル(ドライバ)のパッチとコンパイルなどは不要です。
以下、LinuxへのPepper開発環境の導入方法を説明します。
(1) Linuxのディストリビューリョンの選択と導入
・ Fedore Core 12/ Ubuntu 9.10などが利用可能です。
・ 今回は利用するマシンが古く、CPUパワーが不足することから、Ubuntuの派生のXubuntuを利用しました
・ インストール方法に関する説明はここでは省略します。ディストリビュータの提供するインストール方法を参照してください。インストール後にapt-getコマンドを使って開発用のプログラムも入れておくとよいと思います。
(2) Linuxの設定
・ 動作確認のためにcuコマンドを使うため,uucpパッケージを導入します。
・ 変更方法は以下のファイルの記述をすべてコメントアウトして下さい。(行頭に#を入れる)
(3) Pepperの確認
・ ここまでできれば、Pepperが/dev/ttyACM0として認識されるはずです。
・ /var/log/messageに以下のようなメッセージが出ているはずです。
・ PepperをUSBポートにつないでcuコマンドで確認します。MacOSXやWindowsの場合と同じ手順ですが、手動でコマンドを入れて試験します。
(4) Processingから使う方法
・ Linux用のProcessingをダウンロードして展開します。
・ RXTXライブラリを入れ替えます。
標準状態ではRXTXライブラリが/dev/ttyACM0をポートとして認識しないため、以下のファイルをパッチ済みの物と入れ替えます。(パッチ済みのライブラリRXTXcomm.jar)
・ 簡単なプログラムで試験してみます。(test.pde)

(5) Rubyからpepperを使うように設定を行ってみる
・ ruby, rubygemパッケージを導入

ところが、最新のkernelにはこのパッチがあらかじめ含まれています。2009年の秋に出た最新のLinux ディストリビューションを利用すれば、比較的容易に導入できるようになりました。
以下のディストリビューションではkernel 2.6.31が採用されています。すでにLOW-SPEED-CDCパッチがあたっているため、カーネル(ドライバ)のパッチとコンパイルなどは不要です。
- Fedora Core 12 (http://fedoraproject.org/)
- Ubuntu 9.10 (http://www.ubuntulinux.jp/)
以下、LinuxへのPepper開発環境の導入方法を説明します。
(1) Linuxのディストリビューリョンの選択と導入
・ Fedore Core 12/ Ubuntu 9.10などが利用可能です。
・ 今回は利用するマシンが古く、CPUパワーが不足することから、Ubuntuの派生のXubuntuを利用しました
・ インストール方法に関する説明はここでは省略します。ディストリビュータの提供するインストール方法を参照してください。インストール後にapt-getコマンドを使って開発用のプログラムも入れておくとよいと思います。
(2) Linuxの設定
・ 動作確認のためにcuコマンドを使うため,uucpパッケージを導入します。
% sudo apt-get install uucp・ 標準の状態ではNetworkManager(modem-manager)が常にシリアル・ポート(モデムなど)を監視していて、シリアル・ポートを占有してしまうため、停止します。XubuntuではNetworkManagerを止めるとネットワークも使えなくなるため、modem-managerだけを停止します。
・ 変更方法は以下のファイルの記述をすべてコメントアウトして下さい。(行頭に#を入れる)
/usr/share/dbus-1/system-services/org.freedesktop.ModemManager.service・ ユーザ権限でデバイスがアクセスできるように、パーミッションの設定をします。具体的には、ユーザをdialout, uucpグループに入れます。以下の[USER]は登録したユーザ名に変更してください。
% sudo groupadd [USER] dialout
% sudo groupadd [USER] uucp
(3) Pepperの確認
・ ここまでできれば、Pepperが/dev/ttyACM0として認識されるはずです。
・ /var/log/messageに以下のようなメッセージが出ているはずです。
Dec 30 06:48:08 ginger kernel: [ 344.352041] usb 4-1: new low speed USB device using uhci_hcd and address 2
Dec 30 06:48:08 ginger kernel: [ 344.510141] usb 4-1: config 1 interface 1 altsetting 0 endpoint 0x1 is Bulk; changing to Interrupt
Dec 30 06:48:08 ginger kernel: [ 344.510162] usb 4-1: config 1 interface 1 altsetting 0 endpoint 0x81 is Bulk; changing to Interrupt
Dec 30 06:48:08 ginger kernel: [ 344.530545] usb 4-1: configuration #1 chosen from 1 choice
Dec 30 06:48:08 ginger kernel: [ 344.653494] cdc_acm 4-1:1.0: ttyACM0: USB ACM device
Dec 30 06:48:08 ginger kernel: [ 344.660525] usbcore: registered new interface driver cdc_acm
Dec 30 06:48:08 ginger kernel: [ 344.660544] cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters
・ PepperをUSBポートにつないでcuコマンドで確認します。MacOSXやWindowsの場合と同じ手順ですが、手動でコマンドを入れて試験します。
% cu -l /dev/ttyACM0
Connected.
?1.0.0.0,pepper,20090621*I86880038*
(4) Processingから使う方法
・ Linux用のProcessingをダウンロードして展開します。
% tar xfz processing-1.0.9.tgz・ GainerのProcessing用のライブラリをインストールします。
librariesの中身をprocessing-1.0.9/librariesにコピー
examplesの中身をprocessing-1.0.9/examplesにコピー
・ RXTXライブラリを入れ替えます。
標準状態ではRXTXライブラリが/dev/ttyACM0をポートとして認識しないため、以下のファイルをパッチ済みの物と入れ替えます。(パッチ済みのライブラリRXTXcomm.jar)
Processing-1.0.9/libraries/gainer/library/RXTXcomm.jar
・ 簡単なプログラムで試験してみます。(test.pde)
(5) Rubyからpepperを使うように設定を行ってみる
・ ruby, rubygemパッケージを導入
% apt-get install ruby ruby1.8-dev irb rdoc build-essential libopenssl-ruby1.8・ Ruby-serialportパッケージを導入(ruby-serialport-0.7.0.gem)
% sudo gem install ruby-serialport-0.7.0.gem・ Gainer-rubyのパッケージを導入(ruby-serialport用のものgainer-0.0.2.gem)
% sudo gem install gainer-0.0.2.gem・ 以下のプログラムで試験してみてください。
require 'rubygems'
require 'gainer'
gainer = Gainer::Serial.new('/dev/ttyACM0')
#gainer.analog_output = 0xffffffff
#sleep(1)
#gainer.analog_output = 0
#sleep(1)
while true
gainer.analog_output[0] = 0xff;
gainer.analog_output[1] = 0x00;
sleep(0.1)
gainer.analog_output[0] = 0x00;
gainer.analog_output[1] = 0xff;
sleep(0.1)
end
桑田喜隆


コメントする