2010年10月27日水曜日

cturtle in ubuntu10.04にアップデート

おひさしぶりです。
イベントがあったのでしばらくThinkpadのUbuntuをUpdateしないでいたのですが、
落ち着いたのでアップデートしました。

Ubuntu9.04 -> 9.10 -> 10.04と、普通にアップデートできました。
Debian3.0くらいのころはdist-upgradeなんてできる気が全くしませんでしたが、
最近のLinuxは簡単にできるんですね。

Thinkpadではグラボの関係なのかrvizがバグって(グリッドの線が消えない)いましたが、
10.04にしたらちゃんと使えそうです。

ROSもcturtleを入れました。

そして、今作っているパッケージをmakeしてみたのですが、


$ make
mkdir -p bin
cd build && cmake -Wdev -DCMAKE_TOOLCHAIN_FILE=`rospack find rosbuild`/rostoolchain.cmake  ..
[rosbuild] Building package egeometry
[rosbuild] Cached build flags older than manifests; calling rospack to get flags
Failed to invoke /opt/ros/cturtle/ros/bin/rospack cflags-only-I;--deps-only egeometry
[rospack] warning: got non-zero exit status from executing backquote expression "ret="`echo 'ERROR: It is invalid to depend on the gtest package'; false`" && echo $ret" in [/opt/ros/cturtle/ros/3rdparty/gtest/manifest.xml]
[rospack] error in backquote expansion for egeometry


CMake Error at /opt/ros/cturtle/ros/core/rosbuild/public.cmake:113 (message):
 

  Failed to invoke rospack to get compile flags for package 'egeometry'.
  Look above for errors from rospack itself.  Aborting.  Please fix the
  broken dependency!

Call Stack (most recent call first):
  /opt/ros/cturtle/ros/core/rosbuild/public.cmake:202 (rosbuild_invoke_rospack)
  CMakeLists.txt:12 (rosbuild_init)


-- Configuring incomplete, errors occurred!
make: *** [all] エラー 1

となりコンパイルできません。

なんのエラーだか分かりませんでしたが、よく調べたらgtestへの依存はmanifestに書かないようになったみたいです。

今までmanifest.xmlにgtestを利用するために
  <depend package="gtest"/>
と書いていましたが、cturtleでは不要になったようで、
これがあるとエラーになるようになったようです。

ご注意あれ。

2010年9月19日日曜日

お茶注ぎロボット完成〜。

前回紹介したお茶注ぎロボットが(一応)完成したのでとりあえず動画だけ
紹介しておきます。

本当はもっといろいろやりたかったですが、もう時間がないのでここまでです。

次回以降中身を少し紹介します。



2010年9月16日木曜日

作成中のお茶くみロボットのソフト構成

現在製作中のお茶くみロボットのノード構成の設計を以下に示します。
やっつけなので、メッセージはstd_msgsを連発してしまいます。
まあ、こまられなければそれがいいんでしょうけどちょっと寂しいですね。
これまでにやってきた既存資産とオープンソースの力をいかしまくって、ROSの多対多の通信を活用して、
さらっと結合できる。
予定です。

多分世界一高機能なお茶くみロボットになるでしょう。


作ったロボットはMOM01で展示するので、万一興味をもたれた方は見にきてくださいね〜。

2010年9月10日金曜日

twitterへの書き込みをするROSノードを作成(OAuth対応)

TwitterがBasic認証締め出しために、Twitter APIを利用するために
OAuthという方法を使用しなければいけなくなりました。

なので、以前書いた記事
http://ros-robot.blogspot.com/2010/01/twitterros.html
が役に立たなくなってしまいました。

Twitter APIを再び使いたくなったので、またROSノードを作って見ました。

相変わらずへなちょこな私なので既存のライブラリを使わせていただきました。

Pythonだけあれば使える以下のライブラリが良さげでした。

http://www.techno-st.net/wiki/Python-twoauth

OAuthを利用するプログラムを書くためには、まず
http://dev.twitter.com/apps/でソフトを登録します。
そこでconsumer keyとconsumer secretを取得します。
そしてユーザにaccess_tokenとPINを取得してもらいます。
この4つの情報をつかってAPIを利用します。

なのでノードは以下のようになります。
パスワードを直接書かなくてよいので安全にはなったでしょうか。
面倒くさいですが。



#!/usr/bin/env python                                                                    

import twoauth
import roslib; roslib.load_manifest('rostwitter')
import rospy
from std_msgs.msg import String

# 以下をあらかじめ取得しておく必要がある。
consumer_key = 'HOHGOEHOGHEOHGOE'
consumer_secret = 'HOGEOGHOEHO'
access_token = 'HOGEOHGOEHOG'
access_token_secret = 'HOGEOGOEHOGHOE'

def twit(data):
    rospy.loginfo(rospy.get_name()+"I heard %s",data.data)
    twitter.status_update(data.data)

def listener():
    rospy.init_node('rostwit_server', anonymous=True)
    rospy.Subscriber("twit", String, twit)
    rospy.spin()

if __name__ == '__main__':
    twitter = twoauth.api(consumer_key, consumer_secret, access_token, access_token_secret)
    listener()

書き込みは
$ rostopic pub /twit std_msgs/String 'Tweet by ROS node test'
でやりました。


via lv1と書かれています。
lv1というのが登録したソフトの名称になります。

2010年8月31日火曜日

日本語をしゃべるROSノード

ロボットに日本語をしゃべらせたかったので、
日本語をしゃべるROSノードを作りました。Ubuntuでのみ動作します。




jtalk_nodeです。
ソースは最後に張っておきます。

(もし使いたい人がいれば、
http://code.google.com/p/otl-ros-pkg/source/checkout
の指示にしたがいsubversionからcheckoutしてください。)

/talkトピックをSubscribeして、もらった文字列(ローマ字)を発音します。
~talk_speedをパラメータに取ってしゃべる速度を変えることができます。

インストールには、

$ rosdep install jtalk_node
$ rosmake jtalk_node
としてください。

主にライブラリAquesTalk2のインストールの自動化ところに苦労しました。
jtalk_nodeはNew BSDライセンスですが、

AquesTalk2のライセンスは
「本ソフトは、非営利の個人利用に限り無償で使用できます。それ以外のご利用の場合はライセンスの購入が必要です。 法人での使用は、使用が個人であってもライセンスの購入が必要です。 」
となっているので注意してください。

以下ソース



/// talk japanese node

#include <stdio.h>
#include "AquesTalk2.h"
#include <ros/ros.h>
#include <std_msgs/String.h>

// talk speed
static int s_talk_speed = 100;

/// call back for /talk
void CommandCB(const std_msgs::String::ConstPtr& talk)
{
  int   data_size;
  FILE *play_fd;

  // make wav data usign AquesTalk2
  unsigned char *wav_buff = AquesTalk2_Synthe_Roman(talk->data.c_str(), s_talk_speed, &data_size, NULL);

  if(wav_buff==0){
    ROS_ERROR("AquesTalk2_Synthe_Roman failed");
  }
  else
  {
    play_fd = popen("play -t wav -", "w");
  
    if (play_fd < 0)
    {
        ROS_ERROR("popen fail");
    }
    else
    {
      // write to play command stdin
      fwrite(wav_buff, 1, data_size, play_fd);
      // free the data buff
      AquesTalk2_FreeWave(wav_buff);
      pclose(play_fd);
    }
  }
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "talk_node");
  ros::NodeHandle local_node("~");
  local_node.param<int>("talk_speed", s_talk_speed, 100);

  ros::NodeHandle node;
  ros::Subscriber sub = node.subscribe("talk", 10, &CommandCB);
  ros::spin();
  return 0;
}

2010年8月28日土曜日

EusLispを試す

ごぶさたです。

今日はEusLispを試してみたので、どんな感じかデモを紹介します。
(環境はUbuntu 10.04です。(OSX上のVirtualBox内の、です))
EusLispっていうのは産総研(当時は電総研)で作られたロボット用言語です。

日本で唯一PR2がある東大のJSK (情報システム工学研究室: Jouhou System Kougaku)が使っている言語で、ROSに対応(roseus)しています。

以前からもEusLispは入手可能でしたが、インストールが取っ付きにくく、なかなか一般の人に知られることは少なかったです。

また、EusLispは「戦争には使ってはいけない」という特殊なライセンスだったのですが、ROSのブログによるとBSDライセンスになったそうで、もっと自由に使うことができそうです。(EusLispのページなどにはライセンスについて記述がない?(古いライセンスのまま?)ライセンスについて分かる人教えてください。)

1)インストール
以下のページを参考にインストールします。
非常に簡単です。

http://sourceforge.net/apps/mediawiki/jskeus/index.php?title=Main_Page

~/src以下にインストールするとすると、

$ sudo apt-get install subversion gcc g++ libjpeg62-dev libxext-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev libpq-dev libpng12-dev
$ cd ~/src
$ svn co -N https://jskeus.svn.sourceforge.net/svnroot/jskeus/trunk jskeus
$ cd jskeus
$ make

そして、.bashrcに、
source ~/src/jskeus/bashrc.eus
を追加します。

以上でインストールは完了です。

2)デモ

$ cd ~/src/jskeus/irteus
$ irteusgl demo.l
としてインタプリタを起動します。

$ (test1)
とすると、ヒューマノイドモデルが表示され、手先をのばしていくアニメーションが表示されます。足を固定して全身のIKをときながら顔を手先に向けるモーションです。
インタプリタ上でリターンを押すと止まります。

$ (test2)
ほうきを地面にそって動かすモーションです。
これもリターンで終了します。

$ (test3)
今度はハンドですね。把持物体とリンクの距離を計算しながらなじむようにグラスピングしているようです。

$ (test4)

最後はクランクをまわします。
全身で重心位置を制御しながらクランクまわしです。

サンプルもかなり面白いですね。個人的にはOpenRAVEより楽しそうに感じました。


結構これだけでもいろいろできそうですね。
ドキュメント/コメントが致命的になさ過ぎなのが残念です。

2010年8月11日水曜日

cturtleのgazeboを試す。

さっそくcturtleのPR2のシミュレーションを試してみます。

$ roslaunch pr2_gazebo pr2_empty_world.launch



おー、テクスチャが張られて、色も実物っぽいです。
かっちょいい!
見た目重要ですね。

$ rosrun  image_view image_view image:=/narrow_stereo_textured/left/image_color
などとするとカメラ画像も取れていることが分かります。

では、新機能を使って、遊んでみます。
まず、BOXを手先にぶつけてみます。


あれ?
衝突しないですね。
BOX以外のシリンダ、球ではちゃんと衝突しました。
↓あられもないPR2の姿。


パラメータを見る限りシリンダもBOXも同じ設定なので、衝突しないのはバグでしょうか?
ちょっと分かりません。