2012年3月22日木曜日

Pandaboard ESでGPIOからLED制御

組み込みAndroid Blogへようこそ。
Pandaboard ESというボードにAndroid4.0.1を載せて遊んでいます。

こちらのサイトを参考にさせてもらってインストールできました。

で、このAndroidからARMのGPIOにアクセスしてLEDをつけたり消したりする
アプリを作ってみました。
アプリの見た目はこんな感じ。ToggleボタンでLEDをOn/Offできます。

ソースはこちらから。githubをいまさらはじめてみました(登録したのは2年前)。

PIN配置は下の写真を参考に。
ただし、これは普通には実行できません。アクセス権がないので。
USBでPCとつないだ状態で、
$ adb shell
# echo 32 > /sys/class/gpio/export
# chmod 666 /sys/devices/virtual/gpio/gpio32/direction
をした後にこのアプリを使えます。(GPIO32の場合)

大画面での実行の様子。



AndroidはiPhoneと違って、パーミッションさえあれば、いろいろできてしまって面白いです。中身は完全にARMで動くLinuxなので、やりやすいですし。

2012年3月18日日曜日

ROS Fuerte アルファ版試してみる

Fuerteのアルファ版がでています。
普通に

$ apt-get install ros-fuerte-desktop-full

などとするとインストールできます。
では中身を見てみますか。

$ ls -F /opt/ros/fuerte/
bin/ etc/ lib/ setup.sh share/
env.sh* include/ setup.bash setup.zsh stacks/

おー、構成が結構変わってますね。ではbinは・・・・

$ ls /opt/ros/fuerte/bin/
add_gaussian_noise pcd_viewer
boundary_estimation plane_projection
catkin-build-debs-of-workspace registration_visualizer
catkin-bump-version rosbag
catkin-generate-debian rosboost-cfg
catkin-parse-stack rosclean
catkin-topological-order roscore
catkin-version roscreate-pkg
catkin_install_parse rosgraph
catkin_util.sh roslaunch
cluster_extraction roslaunch-deps
compute_cloud_error roslaunch-logs
concatenate_points_pcd rosmake
convert_pcd_ascii_binary rosmaster
crop_to_hull rosmsg
elch rosmsg-proto
em rosnode
extract_feature rospack
fpfh_estimation rosparam
gen_cpp.py rosrun
gen_lisp.py rosservice
genmsg_py.py rossrv
gensrv_py.py rosstack
git-catkin rostest
git-catkin-generate-debian rostopic
git-catkin-import-upstream rosunit
git-catkin-set-upstream rosversion
git-catkin-track-all roswtf
gp3_surface rxbag
icp rxconsole
icp2d rxgraph
marching_cubes_reconstruction rxloggerlevel
mesh2pcd rxplot
mesh_sampling spin_estimation
normal_estimation swig
octree_viewer timed_trigger_test
outlier_removal transform_point_cloud
passthrough_filter vfh_estimation
pcd2ply virtual_scanner
pcd2vtk voxel_grid
pcd_convert_NaN_nan

おー、たっぷり入っています。
しかし、すべてがこっちに来たわけじゃないみたいです。
たとえばrvizはまだstacksの下にありますね。

$ roscd
No ROS_WORKSPACE set. Please set ROS_WORKSPACE to use roscd with no arguments.

あ、roscdの仕様もいつのまにか変わっていますね。引数なしの場合に
任意の場所(ROS_WORKSPACE)に飛べるようになっていますね。

$ roscd std_msgs
すると
/opt/ros/fuerte/share/std_msgs
に飛びます。

fuerteはstacksとros直下が入り乱れる過渡期のdistroになりそうです。

2012年3月11日日曜日

Siriに掃除させてみた。

iOS5.1で日本語対応したSiriにルンバで掃除させてみました。
iPhoneからrosjsを使ってThinkpad上のROSにアクセスして動かしています。

超簡単に作っちゃったけど、こういうのはスピード命なので。
とりあえず日本では最初にできたかな?
Siriの仕様が変わってタッチが必要じゃなくなったらちゃんとやりたいなぁ。


2012年3月2日金曜日

Fuerte Turtleでの変更点

次のROSのリリースFuerteについて書きます。
http://ros.org/wiki/fuerte

何気にその変更点の一つを見ていたら結構びっくりすることが書いてあったので紹介します。
http://ros.org/reps/rep-0122.html

ここに書いてあるファイル構成についてです。
今は
$ ls /opt/ros/electric
とすると、
ros/
setup.bash
setup.sh
setup.zsh
stacks/
と表示されると思いますが、

これがFuerteでは


bin/
etc/
include/
lib/
stacks/

となるようです。
しかも、
bin/にはrosのシステム用のバイナリだけじゃなく、ユーザのバイナリが直接置かれるようです。これまではrosrunがあったので、バイナリの名前は適当に付けられましたが、これからは被らないようにしないといけなくなるようです。

stacksは互換性のために一応残すようです。


ライブラリも同様にlibに入れられて、Pythonのライブラリも集められるので、
roslib.load_manifest()といったおまじないが必要なくなります。


これはrosmakeに変わり、catkinというシステムでビルドされるようになるためのようです。

まあ、より自然で使いやすい形になりますね。

これにより、ROSのスタックをprefix(/opt/ros/fuerte)を/usrに変えるただけで、
普通のLinuxのパッケージにできるようになり、
普通のdebian/Ubuntuパッケージとして配布できるようにするのが狙いのようです。
一方で複数のバージョン(cturtle, diamondback,electricなど)を共存させることもできる、ということで、このようなシステムになるみたいです。

ROSが不思議なrospackシステムでガラパゴス化してしまうのを防ぎたいのでしょう。
Fuerteの次のリリースはGROOVY GALAPAGOSですが。

2012年2月25日土曜日

ApplicationsPlatform対応Teleopアプリを作ってみた

前々回作ったAndroid デバイスを傾けるとルンバが動くというアプリを
前回紹介したApplicationsPlatformに対応させました。
というか別アプリで登録しました。
(こっちはApplicationsPlatformに対応したロボットがないと動かないので。)

アイコンも少しやる気をだしました。

以下スクリーンショット。

App Chooserでのアプリ選択画面

センサ初期化待ち

傾けた時の画面。ドロイド君が傾くよ。
ダウンロードはこちらから。(要App Chooser)
https://market.android.com/details?id=com.ogutti.ros.android.roomba_app

前回のアプリもRoomba Controllerといいながら、

「Roombaを所有し、ROIでルンバをPCから操作するデバイス(FRISK Roomba等)を所持し、すでにROSでRoombaを操作している人で、Androidデバイスを所有している」だけが使えるRoombaコントローラでした。
(全世界推定ユーザー数15人)

もしくは
「ROSで動くロボットを所有し、Androidデバイスを所有している人」が使える
ロボットコントローラでした。
(こっちは研究者いれれば結構いるかも)


今回はApplicationsPlatformに対応したロボットを持っている人用のAndroidアプリです。Turtlebot、PR2をお持ちのあなた!是非お試しください。

使い方は以下を参照ください。
http://ros.org/wiki/otl_android_roomba_app/

まず必要なスタックのソースをダウンロード。(ROS_PACKAGE_PATH

svn checkout https://otl-ros-pkg.googlecode.com/svn/trunk/otl_android

次にあなたのロボットの.installedファイルを編集してください。Turtlebotなら、turtlebot_bringupパッケージのmock_apps/turtlebot_apps.installedだと思います。


 - display: Tilt Teleop
   app: otl_android_roomba_app/roomba


あとはApp ChooserからTilt Teleopを選択すれば使えるはずです。
.appファイルを編集すると速度とか、cmd_velのremapとかができます。

(前々回のアプリ同様、不正なURIを指定してしまうと、強制終了させる必要が有ります。ライブラリの不具合っぽいです。もしかしたら使い方の問題かもですが。)

2012年2月24日金曜日

ApplicationsPlatformの紹介

最近、Androidでrosjavaを試していました。

WillowはさらにApplicationsPlatformというフレームワーク?を用意しています。

http://www.ros.org/wiki/ApplicationsPlatform

Over Viewを引用すると・・・

The applications platform allows users to interact with contained demos and utilities called "applications". These applications allow users to easily share and interact with demos and software.
ということでよく分からないですね。

どうやら、Android側からアプリケーションを選択して、ロボットを動かす仕組みのようです。
構成要素は以下のようです。

  • Androidのある特定タスク用専用アプリ
  • そのアプリに必要なロボット側のソフトの起動
  • そのアプリのロボット依存部の設定
確かにROSではノードをずらーっと起動するけど、いろんなことやらせるときに、
いらないノードとか、競合しちゃうノードとかあると思うので、どうするのかな〜?
って思ったことがありました。

この仕組みを使うと、Android側でやりたいことを決めると、ロボット側が必要なノードを上げてくれる、アプリが終われば戻してくれる、ということができるようです。
概要は↓に。

赤く囲った部分が自作するAndroidアプリで、app_chooserから呼ばれます。
また、このアプリに必要なノードをこのアプリから立ち上げることができます。(青囲み)

デモするためにコンソールを開く必要がなくなり、さっと、Android携帯からロボットソフト立ち上げから、インタフェースとして利用するところまで一発でできる、スマートな仕組みだと思いました。

2012年2月17日金曜日

ROS Android アプリ公開してみた

ルンバ操縦用に作ってみたrosjavaで作ったAndroidアプリをのりで公開してみました。
実用性はほとんどありません。(自己満足公開です)

https://market.android.com/details?id=com.ogutti.ros.android.roomba


最初のROS_MASTER_URIの設定間違えると強制終了するしかないようなので、
注意してください。

Willowが作ったやつが結構公開されていますね。
Android 3用が多いので、2.3でも動くというのが売りですかね・・・・。