2011年12月31日土曜日

よいお年を!


あと2時間ほどで2011年もおしまいです。

2010年ほどは記事を書けませんで、ここの情報も古いものとなりつつありますが、
来年もほそぼそと続けていくつもりですのでよろしくお願いします。

少なくとも以下のリリース時には記事を書きたいですね〜。

来年もよろしくお願いします!!

Fuerte Turtle (Mar 2012) (フォルテタートル)

  • Ubuntu Lucid
  • Ubuntu Oneiric
  • Ubuntu Precise
  • C++03
  • Boost 1.40
  • Lisp SBCL 1.0.x
  • Python 2.6

Groovy Galapagos (Aug 2012) (グルーヴィーガラパゴス)

  • Ubuntu Oneiric
  • Ubuntu P
  • System libraries TBD

2011年12月23日金曜日

RTミドルウェアコンテスト行ってきた

本日(2011年12月23日)に行われたRTミドルウェアコンテストに
完全に僭越ながら審査員として行ってきました!

みんなスーツの中、私は仕事じゃないので私服で審査してきました。
結果は公式に任せるとして、非常に楽しくすごさせていただきました。

RTミドルウェアとROSはいわばライバル関係で、
日本人でありながら何故かその敵側を応援?しちゃっている私ですが、
みなさん暖かく迎えてくださいました。

全体的な印象としては

  • ysugaさんすげー
  • 暖かく、いい雰囲気(使ってくれてありがとう、という人が多い)
  • 教育や学生の発表が多い
  • みんなWindowsが好き
  • ドキュメントが超丁寧


このブログらしきことを書くと、いくつかROSに似たコンセプトのものがありました。




「移動ロボットのソフトウェア開発のための屋内環境シミュレータRTC」
www.openrtm.org/openrtm/ja/project/RTMContest2011_1115
これはstageっぽい。人もシミュレーションに入れられるところが違う。

ysugaさんの
「RTno (汎用マイコンボードarduinoでRTコンポーネント対応デバイスを作るためのライブラリ)」
これも同じようなコンセプトのものがROSにあります。


「初心者向けシステム開発支援用RTC」
これはまるっきりrxplotです。
データをオンラインでグラフ化してくれます。

RTMはとっつきにくい、といっている方が何人かいました。
ROSの方がシンプルなので始めるのは少しは簡単かもしれないと思いました。

RTMの審査員をやってみて思ったのは、ROSとの比較で言うと、
  • 依存関係を考慮した配布・ビルド方法がもう少し楽になるといいと思う。rospack・rosmake・rosdepは非常に強力。
  • 自動生成したソースやら、すべてを1つのフォルダに入れて配っている人がいる気がする。もう少しソースの配置とかのルールを決めたほうがいいと思う。
  • RTC以外でライブラリを配る文化がもっと欲しい。PCLも最初はROSだったけど今はROSを切り離した。
  • ROSはドキュメントはプロむけ。RTMは親切過ぎないか心配。インストールや使い方はむつかしすぎるのをドキュメントでカバーしようとし過ぎなのかも?




なんにせよ、日本のロボット界ではソースを配る文化がなかったから、それを大幅に改善したRTミドルウェアプロジェクトの貢献は大きいと思った。

以上偉そうに好き勝手書きました。
誤解・間違い等あると思いますので、コメントください。


2011年12月9日金曜日

テレプレゼンスロボットの作り方

Makeに持っていったロボットの中身を軽く紹介しようと思います。

まず全体構成は↓のようになっています。
基本的にいままでつくってきたノードをrosbridgeでブラウザから動かしています。

roombaは前に自作したotl_roombaパッケージのもの、lv2_armはアーム用に作ったノード、usb_camはboshのもの、battery_checkerはこの前紹介したノードでPCのバッテリーチェックをします。jtalk_nodeは日本語をしゃべるノードです。
いずれも公開済みです。

ブラウザでアクセスすると以下のように表示されます。
ぐるぐるのところでルンバの速度を出力、スライダやボタンでロボットのカメラ操作、
バッテリ残量を右上のアイコンで表示(@tera_kojiさんに作ってもらいました)、
テキストボックスに文字を書くとロボットがしゃべってくれます。
画面の上には大きくカメラ動画が流れます。
javascript/HTML5で動的なページにしています。
HTMLやjavascriptにはまったく詳しくないので苦労しました。


rosbridgeはsocketやwebsocketでROSプロトコルをしゃべってくれるサーバーで、javascriptからROSを簡単に使えます。
rosbridgeはsubversionの最新版がおすすめです。安定版だとfirefoxだとうまく動きません。

画像を動画で表示する方法は、

HTMLに以下のように書いて、


  <img src="img/camera_dummy.jpg" name="camera" width="320" height="240"/>


javascriptに以下のような感じで書きます。


    connection.addHandler('/usb_cam/image_raw',
                          function(msg) {
                            document.camera.src=msg.uri;
                          });

これだけで/usb_cam/image_rawがガンガン送られてくれば動画になります。

まあ、そんな感じです。


例によって以下のリポジトリにおいておきました。整理もしていないので見せられる状態にないですが、ジョイスティックの部分とか、出せるように整理したいです。

2011年12月8日木曜日

Make Tokyo Meeting 07ありがとう

Make Tokyo Meeting 07通称MTM07の出展が無事終わりました。

このblogの読者に直にあえてうれしかったです。
PCの前からロボットを動かしてくださったみなさん、ありがとうございました。
(完成度が低くて申し訳ないです)

FRISK Roombaも買っていただきありがとうございました。
(快く一緒に参加してくださった@longjie0723さんありがとうございました!)
http://orientalrobotics.blogspot.com/2011/12/mtm07.html

紹介記事がありますので紹介します。
http://ascii.jp/elem/000/000/654/654252/index-6.html

Makeは本当に面白いプロジェクトがいっぱいで、すごく刺激になり、楽しい2日間でした。
ゆっくり見てまわるのもいいけど、また出たいな。

2011年12月3日土曜日

MTM07参加中!

Make Tokyo Meeting 参加中!!
にてロボット遠隔操作&Makeの体験ができるぞ!

2011年11月27日日曜日

MTM07参加します!

MTM07(http://www.oreilly.co.jp/mtm/07/)に出展します。

出展名はOTL++で、Oriental Robotics (http://orientalrobotics.blogspot.com/)さんといっしょにやります。
タイトルはDIYロボティクスとかにした気がします。

目玉はFRISK Roomba。フリスクケースにルンバ操作用Bluetoothモジュールが入っています。
http://orientalrobotics.blogspot.com/2011/02/friskroomba.html

こいつとKinectがあればROSの自律移動も試せるし、いろいろ遊べます。
私がこれまでに上げた動画でもこれを使っています。


Kinectでもなんでもつながります。

パソコンからプログラム余裕です。



あとはテレプレゼンスロボットを持って行きますので、「東京の会場までいけないよ」という人は自宅からMTM07に参加できちゃいます!
ブラウザから操作可能にしていますので後ほどアドレスを書きますので乞うご期待。


他にもいろいろ持っていくので、ロボット好きなひとは是非遊びに来てくださいね。

2011年11月20日日曜日

PC (Linux)のバッテリ残量を調べる

PC(Linux)のバッテリ容量をプログラムから知りたいことがあったのでPythonで作ってみました。
例によって参考程度になればと貼っておきます。
他にもっといい方法あれば教えてください。

一応ノードも作りました。

#! /usr/bin/env python

import re

class AcpiChecker():
    """read /proc/acpi/battery/*** files for check the PC's battery"""
    def __init__(self, battery_name):
        self._info_path = "/proc/acpi/battery/" + battery_name + "/info"
        self._state_path = "/proc/acpi/battery/" + battery_name + "/state"
    def get_capacity(self):
        f = open(self._info_path)
        for line in f:
            match = re.search(r'^last full capacity:\s*(\d+)', line)
            if match:
                capacity = match.groups()[0]
        f.close()
        return capacity

    def get_state(self):
        f = open(self._state_path)
        for line in f:
            match = re.search(r'^remaining capacity:\s*(\d+)', line)
            if match:
                state = match.groups()[0]
        f.close()
        return state

    def get_rate(self):
        return float(self.get_state()) / float(self.get_capacity())

if __name__=='__main__':
    checker = AcpiChecker('BAT0')
    print checker.get_rate()

ノードはこんな感じでてきとーに作ってみました。


#! /usr/bin/env python

import roslib
roslib.load_manifest('otl_battery_checker')

import rospy
from std_msgs.msg import Float64
from battery_check import AcpiChecker

class BatteryCheckerNode():
    """check battery and publish the charge rate"""
    def __init__(self, battery_name='BAT0'):
        self._checker = AcpiChecker(battery_name)
        self._pub = rospy.Publisher('/pc/battery_rate', Float64)
    def proc(self):
        msg = Float64()
        msg.data = self._checker.get_rate()
        self._pub.publish(msg)

if __name__=='__main__':
    rospy.init_node('pc_battery_checker')
    battery_name = 'BAT0'
    if rospy.has_param('~device'):
        battery_name = rospy.get_param('~device')
    check = BatteryCheckerNode(battery_name)
    rate = rospy.Rate(1)
    while not rospy.is_shutdown():
        check.proc()
        rate.sleep()


参考にしたサイト