TurtleBotの接続確認とトラブルシューティング

Network Configurationのページでは、設定後にTurtleBotとの接続確認について書かれている。それに従って、TurtleBot側で、
rostopic list
と入力したところ、
ERROR: Unable to communicate with master!
というエラーが表示された。この場合、rosが起動していないので起動するように書かれている。
TurtleBot BringupのページにTurtleBotのパッケージを動作させる方法が書かれている。
roslaunch turtlebot_bringup minimal.launch
具体的には上記のように、turtlebot_bringupというスクリプトをminimal.launchというローンチファイルを使って起動すれば良い。minimal.launchは turtlebot_node, laptop_battery_monitor, robot_state_publisher, diagnostic_aggregator, robot_pose_ekfというTurtleBot本体やノートPCに関するノードを提供する。
実際に上記のコードを実行するとエラーで終了してしまう。エラーを調べてみると本来 /opt/ros/groovy/share/xacro/フォルダにあるべきxacro.pyファイルがないために、そのPythonスクリプトが実行できていないのが原因である。
これはたまたま遭遇したトラブルのようで、昨日チケットが切られていた。仕方ないので、/opt/ros/groovy/bin/フォルダにあるxacro.pyを /opt/ros/groovy/share/xacro/にコピーして使ってみたら問題なく動いた。
3/14追記:上記については現時点で生じていない。偶然遭遇したもののようだ。
その状態でモニタ用のPC側で以下のコマンドを実行するとTurtleBotのダッシュボードが表示されるとあるのだが、これも動作しない。
rqt -s turtlebot_dashboard
理由は調べていないが試行錯誤の末、以下のようにすればダッシュボードが起動することがわかった。
rqt -s create
起動しても何も表示されないため、上に並んだボタンを適当に押すと、TurtleBot Bringupのページにあるような画面が表示される。
なお、この時点でTurtleBotの電源が切れてしまったため、詳しい動作確認は明日以降行う予定。

TurtleBotのセットアップ(3) – ROS

TurtleBotに積むPCのROS環境セットアップ。ROSはubuntu 12.10に対応しているので、とりあえずubuntuのサイトからubuntu Desktopの32bit版をダウンロードした。インストールの詳細については割愛する。
3/14追記 Kinectの接続でトラブルを解決できなかったため12.04LTSを用いた。
ROSのインストールを行う。ROSのサイトに従って、Ubuntu 12.10 (Quantal)用のsources.listとキーを設定して、apt-get updateを行った後、Desktop-Full Installのパッケージを取り込む。その他、書いてある通りに細かい設定を行う。
具体的な手順は以下の通り。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu precise main" > /etc/apt/sources.list.d/ros-latest.list'
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
sudo apt-get update
sudo apt-get install ros-groovy-desktop-full
sudo rosdep init
rosdep update

TurtleBot用のパッケージをインストールする。基本的に、TurtleBotのページの、2-1.Installation, 2-2. Post-Installation Setup, 2-3. Workstation Installation, 2-4. Network Configurationを順に行う。
まずパッケージのインストールのために、InstallationのページでInstall from Debsをクリックして手順を表示させる。なお行頭の>の文字は入力しない。
sudo apt-get install ros-groovy-turtlebot ros-groovy-turtlebot-apps ros-groovy-turtlebot-viz
上記のように3つのパッケージを導入する。今回使うのは古いタイプのTurtleBotなので、その後の「rosrun kobuki_ftdi create_udev_rules」は実行しない。
ちなみに現行のROSは新しいタイプのTurtleBot(kobukiと呼ばれるもの)がデフォルトなので、古いタイプを用いるためには別途設定を行う必要がある。
Post-Installation Setupのページでは、時刻同期の設定を行うように書いてあるのでそのようにする。続いて、Create Baseのページに進んで、Debs Installationをクリックして手順を表示させ、先ほど説明したように古いタイプのTurtleBotの設定を行う。
具体的には、~/.bashrcを開いて以下の内容を追加する。ついでにrosの設定も行うようにする。
export TURTLEBOT_BASE=create
export TURTLEBOT_STACKS=circles
export TURTLEBOT_3D_SENSOR=kinect
source /opt/ros/groovy/setup.bash

記述の順序が重要で、exportの3行は必ずsourceより前に置かなければならないようだ。
3D_SENSORのところにはkinectだけでなく、ASUS XTION PROも指定できるらしい。(asus_xtion_proと記載する)
Network Configurationでは、TurtleBotとは異なるモニタリング用のPCの設定を行う。InstallationとPost-Installation Setupを行った後で、時刻の同期をしておけばよいらしい。
sudo apt-get install chrony
sudo ntpdate ntp.ubuntu.com

Network Configurationでは、TurtleBotとモニタ用PC相互のネットワーク設定を行う。事前にifconfigなどでTurtleBotのIPアドレスを調べ、pingなどで接続の確認をすませておく必要がある。有線で接続している場合、いずれ無線接続にするので無線LAN側のIPアドレスを確定しておいた方が良い。
Turtlebot Setupの項でDebs Installationをクリックして、環境変数の設定を行う。仮にTurtleBotのIPアドレスが192.168.254.68だった場合、環境変数の設定コマンドは以下のようになる。
export ROS_MASTER_URI=http://192.168.254.68:11311
export ROS_HOSTNAME=turtlebot

先ほどと同様に、この2行を~/.bashrcの最後に追加すれば良い。
結局、~/.bashrcの最後の6行は次のようになる。
export TURTLEBOT_BASE=create
export TURTLEBOT_STACKS=circles
export TURTLEBOT_3D_SENSOR=kinect
source /opt/ros/groovy/setup.bash
export ROS_MASTER_URI=http://192.168.254.68:11311
export ROS_HOSTNAME=turtlebot

モニタ用のPCでは、上記のうち最後の3行を~/.bashrcの最後に追加すればよい。
3/6追記:ROS_HOSTNAMEはモニタ用のPCのIPアドレスにする。
3/7追記:さらにdialoutグループに自分のユーザーを加える必要がある。
基本的なセットアップは終わり、後はTurtleBotとモニタ用PCとで接続を確認するが、現時点では問題があって接続できない。(次回の記事で説明する)

TurtleBotのセットアップ(2)

別のPCからROS経由でTurtleBotを制御しようと思っていたのだが、ROS Wikiの通りに設定しても全くTurtleBotがPCから見えない。(rosnode list的に)
TurtleBotのROSバージョン(diamondback)とPCに入れた(最新の)ROSバージョン(groovy)では通信に互換性がないのかもしれないと思い、PCのインストールをやり直すことにした。結局ubuntu 12.10のインストールからROSのインストールまで丸一日(それだけやったわけではないけど)かかってしまった。
ROS周りの設定やトラブルについては別途ROS関係の記事にする予定。

TurtleBotのセットアップ(1)

ずっと以前(2011/8)に購入していたTurtleBotというロボットのセットアップを行った。TurtleBotはiRobotのCreateという学習・研究用のロボットベースにPCやKinectを付けて売られているロボットキットである。日本語での解説は日本バイナリーのサイトにある。自分自身はI Heart Engineeringで購入した。購入した時点ではただのTurtleBotだったのだが、放っておいた間にTurtleBot1.5, TurtleBot 2.0というものが出ているらしい。
大きな段ボールを開けると、その中にRoombaと似た形をしたCreateやASUSのノートPCをはじめ、各種アクセサリーが詰まっていた。取り扱い説明書的なものはなく、TurtleBot Assembly Instructionsというフレームの取り付け図がある程度で最初はかなり戸惑った。とりあえず、取り付け図とおりにフレームを組み立てていった。取り付けそのものは簡単で1時間もあれば組み立てることができた。
組み立てた後でわかった問題は2つ。1つ目の問題はCreateに取り付けるケーブルは本来DIN-USBの変換ケーブルであるべきなのだが、なぜかDIN-RS232Cの変換ケーブルになっていた。2年近く前に注文したものでクレームを出すのも憚られるため、USB-シリアルの変換ケーブルを買って間に挟むことにした。もう1つの問題は、ASUSのノートPCの電源アダプタのプラグが折れていたこと。差し込んでも充電されないため不審に思って確かめてみたら根元からポッキリと折れていた。不注意で折った可能性もあるが困ったものだ。運良く手近にあるASUSのネットブックと同じ電源アダプタだったので、それを流用して充電を行った。
PCの充電が終わって起動してみるとWindows7の英語版のセットアップが始まった。そのままセットアップをすませた後、付属しているUSBメモリを差し込んでUSBブートするとubuntuが起動した。デスクトップにあるインストールのアイコンでHDDのDドライブ部分にubuntuをインストールしてPCのセットアップは終了した。
完成したTurtleBotは以下の通り。(PCは取り外してある)
TurtleBot

ROS groovyのチュートリアル

turtlebotを使うために久しぶりにROSを使う。最後に使っていたのはdiamondbackだったが、electric, fuerteときて、今はgroovyらしい。
先日セットアップしたLenovo S206上のubuntu 12.10にインストールすることにする。手順はおおむね http://www.ros.org/wiki/groovy/Installation/Ubuntu の12.10(Quantal)の通りに行い、Desktop-Full Installでインストールした。
インストールの後、勘を取り戻すためにチュートリアルを行ってみた。インストールが順調であれば3.Managing Your Environmentまでは問題ないはず。ところが、4.Create a ROS Workspaceでエラーになって進まない。よく見るとgroovyとあるべきところがfuerteとなっている。そこで以下のようにしてワークスペースを作成する。
3/21追記:groovyではrosbuildからcatkinというシステムに移ったので、以下の記述は既にobsoleteである。
rosws init ~/groovy_ws /opt/ros/groovy
diamondbackでは自分でmkdirして環境変数も設定していたのだが、こういうのもコマンドを使うようになったらしい。
次にsandboxディレクトリを追加する。パッケージを作ったら必ずROS_PACKAGE_PATHにパスを設定しなくてはならず、roswsがその環境変数を管理している。チュートリアルでパッケージを作るたびにroswsしなくていいように、sandboxディレクトリを作って登録しておけばいいらしい。ここも以下のようにgroovyに変えて実行する。
mkdir ~/groovy_ws/sandbox
rosws set ~/groovy_ws/sandbox

ワークスペースの設定変更を行ったら、必ず環境変数の設定ファイルを読み込んでおく。
source ~/groovy_ws/setup.bash
これでROS_PACKAGE_PATHにsandboxディレクトリが追加された。以下のようにして確認できる。
echo $ROS_PACKAGE_PATH
続いて、Navigating the ROS Filesystemに進むが、おおむね書いている通りにやれば良い。

hatenaから移りました

2005年から「はてなダイアリー」を利用していたのですが、こちらに引っ越しました。
トラブルが落ち着いたところで、はてなのコンテンツも引き上げる予定です。
Pharo関連の内容もこちらで公開する予定ですのでよろしくお願いいたします。

WorkspaceV

某勉強会に行ったときにふと思い立って作ったプロジェクトを公開しました。

http://ss3.gemstone.com/ss/WorkspaceV.html

PharoのWorkspaceをちょこっと拡張して、使用しているワークスペース変数のボタンを並べたという簡単なものです。

クリックするとインスペクタが開くので、コード中で使ったワークスペース変数に簡単にアクセスできます。

VisualWorksあたりで見た記憶があるのですが、Pharoで演習をやる際にも使えそうだと思って作りました。

MIT Licenseです。

Windows7マシン(32bit版)にAndroidの開発環境を導入する

Android開発環境をWindows7マシンに構築するおおまかなメモ。

参考:http://playet.jugem.jp/?eid=171

Java JDK

http://www.oracle.com/technetwork/java/javase/downloads/index.html

  1. 上記から、Java Platform (JDK) 7u9(jdk-7u9-windows-i586.exe)をダウンロードする。
  2. ダブルクリックで起動し、そのままインストール。

Android SDK

http://developer.android.com/sdk/index.html

  1. 上記から、installer_r20.0.3-windows.exeをダウンロードする。
  2. ダブルクリックで起動する。
  3. インストール先をC:\androidに変更する。

Android SDK Manager

  1. Android SDKのインストール後に自動起動するか、スタート-プログラムから起動させる。
  2. (プロキシサーバの設定)ToolsのOptions…でProxyサーバーとポートを設定する。ポートの入力欄が隠れて見えないが、Tabで移動して入力。Closeで完了し、一度画面を閉じてからスタート-プログラムでSDK Managerを選んで再度起動する。
  3. Packageにはチェックされた推奨のもの以外に、手持ちのAndroid端末のOSバージョンを選んでおく。
  4. Install xx packagesをクリックして、Accept Allを選び、インストールを開始する。

環境変数の設定

  1. 以下をシステムの環境変数PATHに追加する。
  2. c:\android\tools;c:\android\platform-tools

Eclipse

http://www.eclipse.org/downloads/

  1. 上記から、Eclipse Classic 4.2.1(eclipse-SDK-4.2.1-win32.zip)をダウンロードする。
  2. 圧縮ファイルをc:\androidに展開する。

ADTのインストール

  1. Eclipseを起動し、Help-Install New Software…を選ぶ。
  2. Add…ボタンをクリックする。
  3. Name:欄に「ADT Plugin」を入力し、Location欄に「https://dl-ssl.google.com/android/eclipse/」を入力し、OKを押す。
  4. Developer Toolsにチェックを入れてNextを押す。
  5. そのまま続ける。
  6. Eclipseが再起動する。

実機デバッグのためのドライバインストール

(機種によって異なるため省略)

実機を接続する。

サンプルのビルド

  1. Eclipseを起動する。
  2. File-New-Other…を選ぶ。
  3. Androidから、Android Application Projectを選ぶ。
  4. Application Nameに適当なもの(例えばTest1)を入力する。(先頭は必ず大文字とする)
  5. Nextを順に押していって最後はFinishを押す。
  6. 作成したプロジェクトのAndroidManifest.xmlをダブルクリックで開く。
  7. ApplicationタブのDebuggableをtrueに設定して保存する。
  8. Run-Runを選ぶ。
  9. (初回はTargetが不足している旨のダイアログが出るので、Installボタンを押す)
  10. 作業と運が良ければ実機に「Hello World」と表示される。

KinectDollar1

利用者ゼロの気がするけど、あいかわらずKinectをPharoにつなげています。

先日、大島さんが$1 Gesture RecognizerのSqueak実装を公開されたので、さっそくKinectで利用してジェスチャー認識をさせてみました。

最初のKinectOSCはサンプルだけで実用性に乏しかったのですが、ジェスチャー認識できれば応用も見えてくるかな。

以前の記事に従ってKinectOSCを導入したら(過去に導入してたら最新版に更新する必要あり)、大島さんの$1 Gesture Recognizerを導入します。

MCHttpRepository
location: 'http://ss3.gemstone.com/ss/Dollar1’
user: ''
password: ''

Dollar1MorphをPharoで試すには、initializeのsketchの初期化部分を以下のように変更する必要があるけど、Kinectで動かすなら特に変更は不要です。(でもせっかくだから変更しましょう)

sketch := ImageMorph withForm: samplePicture.

後はKinectDollar1を導入すればOK。

MCHttpRepository
location: 'http://ss3.gemstone.com/ss/KinectDollar1’
user: ''
password: ''

ジェスチャー認識のキモ部分は全て大島さんの実装にかかっており、このモーフの仕事は単に骨格の情報からストロークを切り出すことだけなのですが、アドホックな実装なので以下に気をつける必要があります。

  • ジェスチャーを認識するのは右手のみ。
  • 首よりも前に突き出したときに認識するようになっている。
  • ストロークのはじまりと終わりには、1秒程度静止する必要がある。
  • ストロークの記録が始まる時は骨格の背景のグレーが少し明るくなる。
  • 今のところProtractorには対応してない。

実際の利用はこんな感じです。

  1. まずは身体を認識させる(緑背景で骨格が表示されればOK)
  2. 右手を突き出して1秒ほど静止する。
  3. 背景が明るいグレーになったらジェスチャーを始める。
  4. 終わったら(気持ち、開始時より長めに)1秒ほど静止する。
  5. 画面の上に認識結果が表示される(はず)

慣れないと最初はうまく認識できないかもしれません。私自身はジグザグも星も認識されました。

さて、これを何に使うかな。