2014年10月26日日曜日

Rapiro シリアル設定変更でトラブル

前回、そのままにしておいたシリアル設定ですが、やはりまずそうです。デフォルトでシステムコンソール入出力になっているせいか、時々Raspberry Piからのコマンドを受け取らないようです。

仕方ないので、システムコンソールをきる設定を行います。やることは簡単です。(そのはずでした。。。)

まず/boot/cmdline.txtが最初は以下の様になっています。

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait

これを以下の様に変更します。

dwc_otg.lpm_enable=0 rpitestmode=1 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait

次に、/etc/inittabの最後の行、以下をコメントアウトします。

TO:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

念のため、cmdline.txtの方はoriginalを残しておきます。(設定ファイルをいじるときは必須です)さて、rebootしてみますが、リモートログインできなくなりました。(;_;)何か設定ファイルの編集をミスったようです。何度かrebootを繰り返した後、あきらめてRapiroの頭部を分解、Raspberry Piを引き出します。キーボードとディスプレイを接続して電源を入れてみると、案の定起動中に止まってます。

さて、設定ファイルをまず元に戻さないといけないのですが、家にあるPCのうち、直接SDカードのI/Fをもっているのは1台のノートPC(Windows7)だけ。普段はUSBで接続するマルチアダプタで操作していたんですが、これだとUbuntuもMacも認識してくれませんでした。ノートPCで調べてみても、Windowsだと一部のエリアしか見ることができず、万事窮すの状態。これは最後の手段、SDカードを最初のrasbianのイメージで書き換えてはじめから設定し直しかと覚悟しましたが、ノートPCにはVMPlayerでUbuntuが入っていました。「これでSDカードを修正できないか?」かすかな期待を元に試してみると、うまくマウントできました!そこで2つの設定ファイルを元に戻し、無事起動できるのを確認、改めて編集したファイルを調べてみたらcmdline.txtの方でタイプミスと、やはり「0」(数字の0)と「O」(大文字のO)の勘違いがありました。(やな予感したんだよな〜)

再度設定し直して、リモートログインに問題がないことを確認してRapiroに装着、動作を確認しましたが、raspberry Piからのシリアル出力の受信ミスが発生しなくなるのを確認しました。

やはりシステムの設定ファイルを触るのはこわいですね。

2014年10月19日日曜日

RapiroにRaspberry Piを搭載

まずはRasbianのdisk image最新版をDLしてきます。2014-09-09版でした。zipファイルをDLして解凍しようとしますが、なぜかエラーがでてきます?DLやりなおしてもダメ。しばらくして、解凍しているPCがWindows7(32bit)だからダメなんじゃないかと思いつき、Windows7(64bit)でやってみたらうまくいきました。(おそらくimageからzipつくったのがLinuxの64bitなんだろうな・・・)


最初の起動でraspi-configが表示されます。まずはこのtool自身のUpdateをと思い、メニューを見ると、Updateが見当たりません???代わりに”Overclock”なるメニューになっているような。よく見ると、Advance optionがありましたので、その中にいくとUpdateがありました。


ついでにSSHのenableとhostnameの設定もあったので、そこで済ませました。
またimageを書き込んだだけのSD-cardですと使える領域が最低限しかありません。本来の容量を使えるよう、ちゃんとexpand filesystemしておいてあげましょう。


その後、念のためシステムを最新の状態にしておきます。


$ sudo apt-get update
$ sudo apt-get upgrade


次に無線LANが使えるようにUSB型式のBuffaloの小さいやつを設定します。
(これはあちこちにのっているので、詳細ははぶきます)


無線LANが使えるようになったところで、avahiをインストールします。通常の家庭ではプロバイダーからのDHCPがほとんどだと思います。しかしこれだとIPアドレスが何になるかわかりません。raspberry piは普通ディスプレイとか接続せずに使うので、LAN経由のsshでログインしたいところですが、毎回IPアドレスが変わってしまっては大変です。ホスト名でアクセスしたいところですが、いちいちDNSをたてるのも大変です。
そこでBonjour互換のavahiというサービスをインストールします。BonjourはAppleの提唱するネットワーク上のサービスを自動的に検索し利用できるようにするサービスです。これを使えばDHCPのマシンでもホスト名でアクセスできるようになります。


$ sudo apt-get install avahi-daemon


やることはこれだけです。(hostnameは先にraspi-confで設定してあります)その後、他のPCからpingコマンドで確認できればOKです。


$ ping rapiropi.local


今回はrapiroに搭載するつもりだったので、hostname=rapiropiとしました。urlはその後ろに”.local”をつけたものになります。
なお他のPCでこれを使おうと思うと、Macは当然デフォルトで入っているから問題ありませんが、Windowsの場合、iTunesをインストールすれば使えるようになります。(iTunesなんてインストールするのはいやだ!という方もいるかもしれません。一応単独でBonjourだけインストールするパッケージはiTunesのパッケージ内に入っているそうです)


実際にRAPIROに搭載してみます。ケーブルは元々それ用のものが頭にもってきてありますから簡単です。(頭部には固定用の簡易なツメもあります。なお、基板の穴をとおすノッチがRAPIROにはあります。しかし最初期のRaspberry Piにはこの穴(おそらく基板固定用のネジ通しの穴っぽい)がないものがあるようです)
接続するピンの写真はRAPIROのkickstarterのHPにあります。そこにはあいかわらず何も説明がありませんが、どうもUARTに電源供給とともに接続しているらしいです。デバイス名は、/dev/ttyAMA0になります。ただこれはデフォルトではシステムのコンソール入出力になっており、ボーレートも576000bpsではありません。そちらの設定を切った方がいいんでしょうが、python等プログラムから出力するにはそのままでも問題ないようです。(もしかしたら動作が不安定になるかもしれません。すこし試してからまたレスします。)
このUARTはRaspberry PiのGPIOを使っていますが、これの利用にはroot権限が必要です。プログラムの実行にはsudoが必要になります。

とりあえずリモートで前進させることができたので、いよいよ本格的にプログラムをどうするか検討に入ります。

2014年10月13日月曜日

Rapiroを作る

前から気になっていたんですが、ロボットのRapiroを作ってみました。しかしかなり苦戦しましたので、その記録を残します。

まず組み立て。マニュアルはWebで写真と、数少ない英語の説明のみ。わかりにくい。
しかも途中1カ所、どうみてもネジの指定間違えてるよ。(写真に写ってるネジと説明が食い違っていたので、明らかにわかりますが)


後、サーボのケーブルが長くて、胴体を最後にフタをするとき、かなりきつかったです。


さて動かし方ですが、これがまた不親切で、一言Arduino用のIDE、USB通信用のFTDIドライバをDLしてきてね、だけ。結局、他の方のBlogを参考にして、以下のことがわかりました。


・Arduino IDEは1.0.6を使おう。(βの1.5.8はまずいらしい。RapiroのWikiにも製作者から1.0.6でやってくれとコメントがありました)
・IDEではArduinoのボード型式を指定するところがあります。DefaultではArduino Unoになっていますが、それでいいようです。
・シリアルポートですが、PC(私の場合はMac)とUSBケーブルで接続します。このとき先ほどインストールしたFTDIドライバを使うのですが、Macの場合親切にもボードと接続しないと、そのポートがメニューに表示されません。(認識しているようです)なので、MacとRapiroを接続したのち、/dev/tty.usbserial-xxxxを選びます。(FTDIのHPには/dev/cs.usbserialがどうのと書いてあったので最初こちらかと思いましたが、ttyのようです)
・シリアルモニタでRapiroにコマンドを送れます。このときボーレートがDefaultでは9600になっていますが、57600に変更しないといけません。
・firmware(サンプルスケッチと呼んでいました。Arduino IDEではプログラムことスケッチというんですかね?)として指示されたのがgithubのページ。githubでどうやってソースDLしたらいいのか普通の人は知らないよ?まあ1ファイルでそれほど長くもないので、コピペしていけるとは思いますが。





電源はEneloopを推奨、というかアルカリ電池とかではダメだと明記してありました。本数が5本と中途半端な数で、手元に4本しかなかったため、一つ新品のアルカリ電池でやってみましたが、ダメでした。明らかに低電圧の時の異常動作をします。(アルカリ電池だと流せる電流容量が少ないでしょうからでしょうね)
しかたないので、外部電源(12V)を探したんですが、今はもう1個も持ってません。(大学時代まではよくハンダ付けとかで工作してたので何個か持ってたんですが)見回すと、ノートPC用にと買っておいた21000mAhの外部バッテリがありました。出力電圧や端子も数種類変えれます。これで試すとうまく動きました。


最初のうちは0点調整がうまくいってなかったのか、おかしな動きをしました。しかしこれはどうも最初のアルカリ電池まじりで試していたときに、0点調整の値を色々いじってたのがまずかったらしく、最終的には全部一度0にすることで、いい位置になりました。
(それでも最終的にはいくつか調整しましたが)


また足のPitchの0点調整がどうも難しいらしく、ずっと小刻みに唸っています。一度持ち上げると止まりますが、歩かせたりして止まった後にまた唸ります。これはfirmwareで初期値をいくら調整してみてもダメでした。そんなに大きな音ではないのですが、ちょっと気になります。
(注:YouTubeに某誌のプロモーションとして動かしている映像を見たんですが、その時も静止時に同じように小刻みな唸り音が聞こえたので、これは仕方がないようです。)


とりあえずこのfirmwareではシリアルモニタで以下のコマンドが入れれるようです。


Moveコマンド
#M0 : Stop 停止
#M1 : Forward 前進
#M2 : Back 後退
#M3 : Right 右回り
#M4 : Left 左回り
#M5 : Green 目を緑色にする
#M6 : Yellow 目を黄色にする
#M7 : Blue 目を青色にする
#M8 : Red 目を赤色にする
#M9 : Push 右腕を前に延ばす


Poseコマンド
#Pの後に5つのサブコマンドがあります。
S : Servo
R : Red
G : Green
B : Blue
T : Time


Servo
SxxAxxx
Sxxはサーボ番号00から11まで
Axxxはサーボ角度000から180まで(単位は度です)


Red Green Blue
RxxxGxxxBxxx
xxxは明度000から255まで


Time
Txxx
xxxは時間000から999まで、単位は0.1秒


使い方
#PS00A080T050というように使います。最後のTコマンドなんですが、数値が動きにどう影響してくるのかよくわかりません。ただ必要なようです。


サーボ番号と稼働範囲
00 : Head yaw : 0 – 90 – 180
01 : Waist yaw : 0 – 90 – 180
02 : R Sholder roll : 0 – 0 – 180
03 : R Sholder pitch : 40 – 130 – 130
04 : R Hand grip : 60 – 90- 110
05 : L Sholder roll : 0 – 180 – 180
06 : L Sholder pitch : 50 – 50 – 140
07 : L Hand grip : 60 – 90- 110
08 : R Foot yaw : 70 – 90 – 130
09 : Foot pitch : 70 – 90 – 110
10 : L Foot yaw : 50 – 90 – 110
11 : L Foot pitch : 50 – 90 – 110


数値は、角度の 最小 – 初期値 – 最大

0点調整の位置が初期値であることに注意。角度0が真ん中ではありません。(最初、うっかりHeadに0度と指定しまい、とんでもないことになりました)

さて一通り動作を確認したので、次はRapberry Piを組み込んでみないと。(一緒に発注済み)

2014年10月4日土曜日

Ubuntu14.04.1マシン nvidia不調(T_T)

XPの頃に購入したGaming PCにUbuntuを入れてます。12の時にも苦労したんですが、またやってしまいました。(・_;) Game用のPCなので、当然nVidiaのカードが入っているんですが、nVidiaのドライバって未だに特製のkernelモジュール(昔はkernel再ビルド)必要なんですが、これがよく相性(?)の問題を起こしてくれます。updateするときに注意しないと、すぐXが起動してくれなくなります。

updateの時、普通はupdate-managerに任せるもんですが、理由は不明ですがよく(Firefoxあたりで)リポジトリ内で不整合、と言われて失敗します。それが面倒くさくて、CLIでやってしまいます。

$ sudo apt-get update
$ sudo apt-get upgrade

これでやると不思議と失敗しません。
一つ問題があるのが、これでシステムの更新すると、Ubuntuのバージョン更新(upgrade)も自動的にやってしまうことです。
Ubuntu12の時に少しシステムの末尾の番号が上がってしまうと画面が起動しない、ということを何度も繰り返していました。今度も、気づいたら14.04→14.04.1と末尾が上がってしまい、「やばい!」と思ったら案の定Xが起動しません。Xorg.0.logを見てみるとnvidiaのkernel moduleのロードに失敗しています。

ネットで色々調べたんですがどうにもならず、諦めて再インストールしました。(実験用のマシンだから簡単に再インストールしちゃいますが、実用マシンだったら大騒ぎです。こんな調子ではWindowsに代わるDesktopになるのは未来永劫こないんじゃないか・・・)
システムのupdate-managerを使うと、バージョン更新の時は一応確認してくれます。注意していればいいんですが、たいていの人はうっかりupgradeしてしまうでしょうね。
システムの方でupdate-managerは自動的に動いてくれますが、手動で起動したい場合は以下のコマンドになります。

$ update-manager -d

気をつけて使っていくしかありません。(「安定版」という言葉が非常に重い)

2014年9月15日月曜日

EXCEL:シート内のTextエリア、カーソル進行方向が逆になる

先にEXCELでおかしな動作があったことを書きました。ついでなので、2年ちょっと前にあった別のおかしな動作も書いときます。

これはMicrosoftのHPにはっきりOfficeのバグだと書いてありました。何が起きるかというと、EXCELのシート内にTextエリアを作り、それでWord代わりに書類を作る方が時々います。(こっちからすると、なんでそんな面倒くさいことやるのか、と思うんですが大抵の人は仕事で資料作るときに、覚えるツールは最低限にしたい!という欲求があるようです)
それで2003のExcelで作成したデータを、2007/2010で開いて編集しようとすると、時々Textエリア内にカーソルを持っていき、編集したいところへカーソルを持っていこうと、例えば右に方向のカーソル移動キーを押したとします。だけど実際のカーソルは左に動いてしまう!?という状況です。

必ず発生するわけではありません。条件ははっきりしませんが、そういうことが起きるらしいです。(最初、相談されて実物を見たときはびっくりしました。)おかしいのはカーソル移動だけで、編集は普通にできます。カーソルをなんとか移動させて、そこに日本語を挿入すると普通に右子方向に文字列は挿入できます。

それでは何が起きたかというと、はっきりとはHPに書いてはありませんでしたが、どうも文字列の属性として「アラビア語」のフラグがこっそりOnになってしまうようです。(アラビア語は、右から左へと、通常の世界の言語とは逆に書きますから。)そこで、この属性に関するフラグを設定し直せとあったんですが、それをするためにはEXCELの使用言語に「アラビア語」を追加してやらないと、文字列の書く方向を指定するコマンドを入力できるようにならないそうです。
それで、「オプション」→「言語」で通常は日本語と英語(米国)しかありませんが、何かアラビア語を追加してやります。(なんか10個くらいアラビア語の種類がありますが、違いがわかりません。まあおそらく英語と英語(米国)の違い程度で、スペルチェックなんかが微妙に違うんでしょうが、そもそもアラビア語なんて入力できないんで、何か追加すればいいと思います)

するとEXCELの「配置」のところに以下の様な新しいコマンドが表示されるようになります。
そう、これでカーソルの移動方向がおかしくなったTextエリアを選択したのち、カーソルの進行方向を設定し直してやればいいんです。

Officeが2003から2007に変わったときは、UIが新しい「リボンインターフェース」になり、かなり戸惑いましたが、M$も罪作りなことにかなりバグ(実装上もだけど、要求仕様上の矛盾も含めて)を作りこんでくれたようで困ったもんです。それでもこれで資料作らないと仕事にならないし...

EXCELの動作がおかしい

人からEXCELの動きがおかしい、と尋ねられて以下の様な画面を見せられました。

(本物はもっと違う数字ですが、例なので単純にしています)最後の合計のところが関数になっていません、あきらかに文字列になってます。セルの書式設定を「標準」にしてやるだけだろうと思い、設定を変えようとしてみると、以下の状態になってました。

あれ?ちゃんと「標準」になってるよ?これ実は「オプション」→「詳細設定」の中にある以下の設定によるものです。

デフォルトではこの「データ範囲の形式および数式を拡張する」がOnになっています。これ何のことかといいますと、直上の連続するセル(今回の例では黄色で示してあるセルがそれにあたります)3つ以上が同じ書式を持っている場合、それを自動的に引き継ぐ機能なんです。
種を明かすと、この黄色のセルは実は「文字列」にしてあります。そのため合計を求めようとSUM関数を入れたのですが、自動的に文字列の書式に設定されてしまいます。

でも2枚目のSSで「標準」になっていることを確認しましたよね。これはある操作を行うと、上記な様なおかしな状況になってしまうことを確認しました。(注:毎回必ずなるわけではないようです。もう少しトリッキーな操作が必要かもしれません。)

①デフォルトのままオートSUMを入れる。(EXCELがここで困ったことに文字列の数字でも、変に「気をきかして」数値として計算してくれるのが間違いの始まり)
②SUMが計算され、結果が文字列として表示される。(従ってこの時点ではおかしなことになっているのに気付かない)
③ここで詳細設定の、上記設定をオフにしてやる。
④合計を行うセルの内容をいったん消して、再度オートSUMを入力する。
⑤②のときにこのセルの書式が文字列になってしまっているので、最初のSSの状態になる。
⑥ここで③の操作を取消、「データ範囲の形式および数式を拡張する」をOnにする。
⑦オートSUMが文字列として表示されているままなので、書式を「標準」にしてやる。

おそらく、書式のフラグがユーザーが操作するものと「データ範囲の形式および数式を拡張する」と別個に内部で持っており、そこに矛盾が発生するようです。
また、できる限りユーザのために思ったような動きをしようと、以下の様な状態の時もあります。

オートSUMを入力したんですが、自動的に上のセルの書式が移ってしまい「文字列」なんですが、計算はしてくれて、結果出力の段階で「文字列」として表示しているようです。

明らかに複数の異なる要求仕様の間に矛盾が発生しているようです。

とりあえずこれを直そうと思ったら、一度「データ範囲の形式および数式を拡張する」をOffにして、当該セル、および直上のセル書式を数値にしてやり、再度「データ範囲の形式および数式を拡張する」をOnにしてやるのが早そうです。


PS
早速、直しに行ってきましたが、うまくいきません(;_;) オートSUMのセルの書式を見てみると、「数値」になっていました(@o@) なんだこりゃ?よくよくファイル名を見てみると(自分は拡張子を必ず表示にしてますが、普通の人は表示しないか、登録してあるものは表示しないになってますね)、「*.xls」になっており、どうも2003で最初は作成したもののご様子。うーん、2003のデータを2007/2010で操作すると色々問題が報告されているから、もっと奥が深いかも。結局、「数値だけ」と指定して内容を新しいファイルにコピーして、必要なオートSUMのところだけ手作業で同じ様なファイルを作り直してしまいました。

後から思い返すと、一回2007の形式に変換保存して、上記手順をやってみるという方法もあったな~と思います。おそらくこの機能、2007からだよね。

2014年7月25日金曜日

AndroidStduioを使ってみる

しばらく間があいてしまいました。

Androidプログラムは最近ほとんどしていないんですが、時々ADTの更新(正式にはSDKの更新)はしています。あいかわrずADT本体とのバージョンミスマッチの問題に悩まされます。(ほっといても大抵は動くんですが、warningが気持ち悪い)
少し前に専用の開発IDEとしてAndroidStudioがreleaseされています。見た目、eclipseをやきなおしただけなんじゃない?っていう感じが強いんですが、こっちの方が更新されているようなんで、GoogleとしてはADTよりこっちに力を入れている感じがします。
なので、ちょっと試しに使ってみます。(まだβ0.8ですが、SDKと本体の更新がスムーズにいくようなら、こっちに乗り換えることも考えます)

紹介サイトを見ながら、まずはMacにインストールしてみます。(調子がよければ、Windows/Linuxもこちらに切り替えます)インストール自体は問題なく進みました。そしてサンプルアプリ(よくあるHelloworldです)も問題なく動きます。
ここで実際の実機(今回はgalaxy S2、Android4.0.3で更新は止まっています)での実機デバッグを試してみます。
AVDでシミュレーションするとき、intel版の方が速いという評判でした。実際速いんことは速いんですが、やはり実機にはかないません。(このあたりJavaの限界か)ということで、S2をつないでみると・・・、簡単に動きました。便利なのはメイン画面上でも実機がつながっていることがわかることです。(以下に画面の左下一部を示します)
またADTに比べて、ファイル更新してもすぐ反応して実機に反映してくれる気がします。(eclipse/ADTの時は中々実機アプリに変更が反映されず、よく実機のアプリを手動で削除していました)後、Gitも(Githubももちろん)使えるようですが、ちょっと設定しないといけないようです。
でも、これ昔のADTでGithubに登録したやつはそのままじゃだめだよな〜(ファイル構成が、ADTと似ていてファイル名が異なるといういやらしい作りになっています)
2、3ヶ月ADTとAndroidStudioの様子を見て、Googleがどちらを主力にしたいか様子を見てから考えます。