今までSnowLeopardで接続していたNASにLionで接続できなくなった。
手順は結構面倒だが、d:id:shammer:20110902 を参考にして接続できるようにした。毎度のことながら先達の努力に感謝!
今までSnowLeopardで接続していたNASにLionで接続できなくなった。
手順は結構面倒だが、d:id:shammer:20110902 を参考にして接続できるようにした。毎度のことながら先達の努力に感謝!
何も悪い事してない状態でのプロセスをメモっておく。
Delay class>>handleTimerEvent the low space watcher Input events fetching process the WeakArray finalization process the UI process the idle process
なんだかイメージの調子が悪いので最初からインストールしてみた。きちんと手順を踏まないとならないので、備忘のために記録しておく。
1. XMLRPCのインストール
1-1. まずWorkspaceを開いて以下を入力し、XMLRPCのコンフィグレーションを読み込む。(以下、同様)
(Smalltalk at: #Gofer) new squeaksource: 'MetacelloRepository'; package: 'ConfigurationOfXMLRPC'; load.
1-2. テスト付きクライアントパッケージをインストールする。
ConfigurationOfXMLRPC project latestVersion load: 'Client with Tests'.
1-3. テスト付きサーバーパッケージをインストールする。
ConfigurationOfXMLRPC project latestVersion load: 'Server with Tests'.
インストール中にエラー(Error: nil cannot be found in the list)が発生する。これは、XMLRPCHttpModuleのクラスメソッドinitializeで、Pharo 1.3に存在しないAutoStartを参照しているために起こる。
Debugボタンを押してデバッグウィンドウを出し、一覧からXMLRPCHttpModule class>>initializeをクリック。赤く表示されているAutoStartをClipboardに変更して、Alt-sでAcceptする。
途中でAuthor identificationが出たら自分のフルネームを入力する。スペースやクオーテーション、ハイフンなどは使えないので注意する。AcceptしたらProceedボタンを押して続行する。
1-4. 次に、XMLRPCのパッケージを修正するパッチを適用する。パッチファイル(xmlrpc-bugfix-struct.1.cs)は以前のエントリ d:id:nqthm:20110909 で公開しているので予めダウンロードしておく。
具体的な手順としてはメニューからTools-File Browserでファイルブラウザを開き、パッチファイル(xmlrpc-bugfix-struct.1.cs)を選んで、Fileinを押せばよい。
この時点で、XMLRPC-Client-TestsおよびXMLRPC-Server-Testsのテストが全て合格するはずである。
2. rospharoのインストール
2-1. 続いてrospharoをインストールする。Monticello Browserを開いて、+Repositoryボタンを押し、一覧からHTTPを選ぶ。
Information Requiredの画面で以下をカット&ペーストで入力してOKを押す。
MCHttpRepository location: 'http://www.squeaksource.com/rospharo' user: '' password: ''
2-2. http://www.squeaksource.com/rospharo が選択されている状態でOpenボタンを押し、右側のペインの最上位のパッケージを選んでLoadする。
以上でインストールは完了する(はずである)。
rospharoのユニットテストはRos-Testsにある。またroscoreを起動した状態での通信テストはRos-Examplesにある。使い方の参考になるだろう。
Rosでノード間通信するのに必要なので、Pharo上にXMLRPCを実現するpharo-xmlrpcというパッケージを利用している。
http://code.google.com/p/pharo-xmlrpc/
ベータ公開中のようであるが、テストはオールグリーンということで導入すると痛い目にあう。実際のところ、1.3RCはおろか1.2.1であってもテストの実行に失敗する。
問題は2点あり、ひとつはstructノードの生成に関すること、もう一つはネットワークポートに関することである。
以前このブログで、デコード時の問題を解決するパッチを公開した。このパッチでは、decodeStruct:というstructのデコード時にノードを深くたどりすぎるバグに対処するものだった。
http://d.hatena.ne.jp/nqthm/20110822/p1
実はこのパッチを当てると今まで動いていたテストが失敗するようになる。というのも実はエンコード時に以下のような結果を生成するようになっていたからである。
<struct><struct>....</struct></struct>
要するにstructノードを二重に生成してしまっているのだ。このためにパッチ前のデコード処理とうまく整合するようになっている。
structノードの生成は、encode:内でwrapVal:type:とencodeStruct:内の二カ所で連続して行っている。
本来こういった問題を回避するためのテストコードが必要で、実際そのためのテストコードもXMLRPCEncoderTest>>testEncoderにあるのだが、そもそもencodeStruct:でstructを生成することを前提にチェックしており問題は露見しない。不思議なのは、同じテストの別の箇所は全てencode:を用いてチェックしているのに、この部分だけはencodeStruct:を用いている。
以上のバグについては、XMLRPCDecoder>>decodeStruct:,
XMLRPCEncoder>>encodeStruct:, XMLRPCEncoderTest>>testEncoderを修正すれば良い。
もう一つのバグは、XMLRPCHttpModuleに関するものである。具体的な現象としては、テストを一度実行するとそれ以降、ネットワークポートが既にアサイン済みである旨のメッセージが出て、テストに失敗するというもの。どうもテスト終了時にネットワークポートの解放ができていないようである。
これはXMLRPCHttpModule class>>pauseでservice unassignPortを実行することで回避した。本来、ここに置くべきなのか不明なのだが、とりあえずの対処として行った。
近日公開予定と思われるPharo-1.3では、pharo-xmlrpcのインストール中にエラーが発生する。この理由は、XMLRPCHttpModule class>>initializeがStartUpListへの登録に、1.3では存在しない(らしい)AutoStartクラスへの参照を含んでいるからである。initializeの実行に失敗しただけなので、手動で実行すれば良いだろう。
なお、パッチは以下に置いてある。
Asus eeePCにもubuntuを入れようと思ったけど、USBブートできなくて困った。
いや、当然できるんだろうけど起動時にホットキーの表示がなくいきなりWindowsが立ち上がるのでブートメニューが出せない。
電源オンですかさずF2を連打し(押しっぱなしは駄目みたい)BIOSメニューを出して、BOOTセクションでBoost BootをDisabledにして保存する。
再起動時にESCを連打するとブートメニューが出た。
慣れてないマシンだとこんなことでも戸惑ってしまう。
Windowsでの日本語表示については、以下の手順でOK。
入力については一部文字の入力ができない。原因は1.2.1の時と同様。ただし、TextEditor>>dispathOn:は複数のメソッドに分割されたため、以前のパッチを当てるのは不適当である。
TextEditor>>dispatchCommandOn:return:メソッドで以下の部分を変更すれば良い。
- asciiValue := aKeyboardEvent keyValue. + asciiValue := aKeyboardEvent keyCharacter.
なお、全ての入力に対して適切に動作するかどうかは未確認であるので変更には注意されたい。
※追記(2011/10/5):上記のTextEditorに対するパッチは問題が生じることが判明した。正しくは、 id:nqthm:20111004:p1 を参照してほしい。
Pharoの1.3もRelease Candidateになったので、そろそろ出そうな感じである。
日本語の表示と入力を試してみたところ、SnowLeopardについてはFT2Plugin.bundleをコピーすれば問題なさそう。
Windowsについてはまだ試していないが、前回パッチをあてたTextEditor>>dispathOn:の中身が大幅に変わっているようなので、イヤな予感がする。
とりあえず1.3では、このブログに書いてある1.2.1のパッチ当て方では駄目なようなので注意!
いろいろやったけど、準備として必要なのは以下の通り。(だと思う)
sudo apt-get install ros-diamondback-openni-kinect sudo chmod -R a+rw /dev/bus/usb/*
kinectカメラを使うには、以下のようにする。
まず端末を立ち上げて、最初の画面でroscoreを起動する。
roscore
新しいタブを開いて、openni_cameraを起動する。
roslaunch openni_camera openni_node.launch
以上でOK。カメラ画像を見るには以下のようなコマンドを使う。
rosrun image_view image_view image:=/camera/rgb/image_color rosrun image_view image_view image:=/camera/rgb/image_raw rosrun image_view image_view image:=/camera/depth/image_raw
元情報はこちら。
何がやりたいかというとROSをPharoで制御したいということ。ROSはXMLRPCで通信しているようなので、これを試してみた。結果は成功。
url := Url absoluteFromText: 'http://192.168.254.72:11311/’. proxy := XMLRPCProxy withUrl: url. result := proxy invokeMethod: 'getSystemState' withArgs: #('/script').
上記のようにしてgetSystemStateを呼び出してみたら、ちゃんと結果が返ってきた。
#(1 'current system state' #(#(#('/rosout_agg' #('/rosout'))) #(#('/rosout' #('/rosout'))) #(#('/rosout/set_logger_level' #('/rosout')) #('/rosout/get_loggers' #('/rosout')))))
細かく制御できるのかこれから試す予定。