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も同じ設定なので、衝突しないのはバグでしょうか?
ちょっと分かりません。

2010年8月10日火曜日

cturtleのインストール

Ubuntuにcturtleをインストールします。

以下のリンクにしたがいます。

http://www.ros.org/wiki/cturtle/Installation/Ubuntu

私はすでにaptでrosをインストールしていたので、

$ sudo apt-get update
$ sudo apt-get install ros-cturtle-pr2
した後に、
.bashrcの以下のように編集しました。

#source /opt/ros/boxturtle/setup.sh
source /opt/ros/cturtle/setup.sh

以下のようにして動作確認してみましょう。
$ source .bashrc
$ roslaunch gazebo_worlds empty_world.launch

おっと、以下のようなエラーが出てしまいました。


Traceback (most recent call last):
  File "/opt/ros/cturtle/ros/bin/roscore", line 34, in <module>
    from ros import roslaunch
  File "/opt/ros/boxturtle/ros/core/roslib/src/ros/__init__.py", line 63, in __getattr__
    return __import__(name)
  File "/opt/ros/cturtle/ros/tools/roslaunch/src/roslaunch/__init__.py", line 43, in <module>
    from roslaunch.config import ROSLaunchConfig
  File "/opt/ros/cturtle/ros/tools/roslaunch/src/roslaunch/config.py", line 49, in <module>
    import roslaunch.loader
  File "/opt/ros/cturtle/ros/tools/roslaunch/src/roslaunch/loader.py", line 45, in <module>
    from roslib.names import make_global_ns, ns_join, PRIV_NAME, load_mappings, is_legal_name, canonicalize_name
ImportError: cannot import name canonicalize_name

$ roscore
としても同じエラーです。

$PYTHONPATHがboxturtle側が優先されていました。
一旦ターミナルを落として、新しいshellでもう一度トライしたらできました。


cturtleの目玉はgazeboだと思っていますが、
だいぶドキュメント等も進化していますね。
モデルを作成して、worldファイルに保存できるみたいです。

時間ができたら、少しトライしてみます。

2010年8月4日水曜日

C-Turtleリリース

ROSのディストリビューションであるBox Turtleの次のバージョン、
C Turtleがリリースされましたね。

http://www.ros.org/news/2010/08/ros-c-turtle-has-been-released.html

今回はアイコンがめっちゃかっちょいいですね。

Gazeboのアップデートや同一プロセスでの複数ノードをサポートするnodeletなど、
試すのが楽しみです。

2010年8月1日日曜日

アーム試作その2

両手と回転台ができました。

完成イメージ
(ボディーはゴミ箱です。。。。)

From アームその2

今回作ったもの
(右手でコップをつかみます。(自由度0))
回転台で飲み物を選択。
From アームその2

卓上モードだとこんなイメージ。
でも基本的に床を移動して机の上にサーブしたいので、
このモードは使わない。Webカメラがついています。

From アームその2




あとはこれをどう固定するかです。
非常に難問。。。。