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

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