2015年5月13日水曜日

Caffeインストール記録(VMWare,ROS indigo導入済み)

Deep learning のフレームワークとして最近Caffeが話題だったらしいのでインストールしてみた。
以下はそのメモ


参考サイト:
Deep Learningライブラリ「Caffe」の実行環境をUbuntu14.04で作るhttp://reiji1020.hatenablog.com/entry/2014/12/03/210234
FPGAの部屋 Caffe Deep Learning Frameworkをインストール1
http://marsee101.blog19.fc2.com/blog-entry-3058.html
公式サイト:
Caffe
http://caffe.berkeleyvision.org/

インストール環境について
VMWare
Ubuntu14.04
GPU:無し

GPU無しなので今回はCPUonlyモードでのインストールを行う
なお、今回はROS indigoを導入済みである環境にCaffeをインストールする
(ROS indigoには最初からOpenCV、boost、Pythonなどが導入済みという違いがある、ROSを導入してない場合は上記サイトや、公式のインストールを参考にしてインストールすると間違いがない)

BLASのインストール:
BLASに関しては下記wikiを参照
http://ja.wikipedia.org/wiki/Basic_Linear_Algebra_Subprogramsベクトル、行列の操作を行う基本的なAPI群
ATLASというものをインストール
$ sudo apt-get install libatlas-base-dev

その他依存パッケージのインストール公式のopencvとboostに関するもの以外をインストールした
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev

以下パッケージもインストール(libflags-devだけだと引っかかったが下のコマンドにした場合いけた...なぜ?)
$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

pipのインストール
$ sudo apt-get install python-pip

pythonに関するパッケージのインストール
$ sudo apt-get install Cython$ sudo apt-get install python-numpy$ sudo apt-get install python-scipy
githubからCaffeをダウンロード、解凍ディレクトリは好きなようにだがディレクトリの構成は把握しておくように

pipによるインストール
$ sudo pip install -r Caffe/python/requirements.txt

Makefileの書き換え
Makefile.config.exampleをMakefile.configに変更中身のCPU_ONLYがコメントアウトされているのコメントアウトを外すBLASがATLASであることを確認

コンパイル
Makefileがある場所で
$ make all
$ make runtest

大体は参考通りにやってくとうまくいった。
ディレクトリに関してはCaffeがあるディレクトリで作業するように

ツールを使ったサンプルはここを使う

このサイトを使って勉強予定

2014年12月7日日曜日

ROS hydroでTurtlebot2を(シュミレータ上で)動かしてみる2(オドメトリ情報からの動作)

前置きは無しにしてぱぱっと書きます
 ROS hydroのgazeboを使ってTurtlebot2を動かします。

方法は簡単で前回記事にあったTurtlebot2のトピックリストから使える情報を取得して速度情報を送るという感じです。
今回はオドメトリの情報を入力、出力を速度情報という形で動作させます。

流れは下のようになります 。
1.gazeboのワールド上にTurtlebotのみを表示
 $ roslaunch turtlebot_gazebo turtlebot_empty_world.launch

2.動作プログラムを走らせる
動作プログラムは下のような形で作りました


#include<iostream>
#include<math.h>
#include<ros/ros.h>
#include<nav_msgs/Odometry.h>
#include<geometry_msgs/Twist.h>

using namespace std;

namespace{
    double poseX;
    double poseY;
    double poseT;
}

void odomCallback(const nav_msgs::Odometry::ConstPtr &odom)
{
    poseX = odom->pose.pose.position.x;
    poseY = odom->pose.pose.position.y;
    poseT = odom->pose.pose.orientation.w;

    cout<<"x = "<<poseX<<"[m]"<<"\t";
    cout<<"y = "<<poseY<<"[m]"<<"\t";
    cout<<"theta = "<<poseT*180/M_PI<<"[deg]"<<endl;
}

int main(int argc,char **argv)
{
    ros::init(argc,argv,"kobuki_navi");
    ros::NodeHandle node;

    ros::Subscriber odom_sub = node.subscribe("odom",1,odomCallback);
    ros::Publisher vel_pub = node.advertise<geometry_msgs::Twist>("cmd_vel",1);

    geometry_msgs::Twist cmd_vel;

    while(ros::ok())
    {
        if(poseX < 5.0)
        {
            cmd_vel.linear.x = 0.2;
            cmd_vel.linear.y = 0.0;
            cmd_vel.angular.z = 0.0;
        }
        else
        {
            cmd_vel.linear.x = 0.0;
            cmd_vel.linear.y = 0.0;
            cmd_vel.angular.z = 0.0;
        }
        vel_pub.publish(cmd_vel);
        ros::spinOnce();
    }
    return 0;
}

このプログラムはパブリッシュするトピックを”cmd_vel"にしているので起動時に以下のようにリマップしてください

$ rosrun パッケージ名 実行ファイル名 cmd_vel:=/mobile_base/commands/velocity

間違い訂正に気づいたら追記行います。

雑記
最初に参考にしたのがキーボード入力を行なってkobukiを動かすというものを参考にしていたのでモーター電源ONにしないと走らないんじゃ!!?と思ってモータ電源入れるプログラムも作ったけど実際後で動かしてみると要らなかったみたい。無くても普通に動き出した。

実機の場合はいるのかなぁ?
次は搭載しているセンサ使っての簡単なナビゲーションかな

2014年12月4日木曜日

ROS hydroでTurtlebot2(シュミレータ上で)を動かしてみる 1(インストール&表示編)

後輩指導のために必要になったのでメモとして

ROS hydroはインストールしていることが前提
参考サイトはチュートリアルなど

1.turtlebotのシュミレータ用ファイルをダウンロード

$ sudo apt-get install ros-hydro-turtlebot-simulator

2.gazeboに表示したturtlebotをrvizに表示するためのファイルをダウンロード

$ sudo apt-get install ros-hydro-turtlebot-apps ros-hydro-turtlebot-rviz-launchers

3.launchファイルの起動

・空のワールドにturtlebotを表示
$ roslaunch turtlebot_gazebo turtlebot_empty_world.launch

・rvizを使用してturtlebotの状態を表示
$ roslaunch turtlebot_rviz_launchers view_robot.launch

4.キーボード入力で動かしたい時
$ roslaunch turtlebot_teleop keyboard_teleop.launch
$ roslaunch kobuki_keyop keyop.launch

その他メモ

・初期起動時のturtlebotのrqt_graph




・起動時のturtlebotのトピック
/camera/depth/camera_info
/camera/depth/image_raw
/camera/depth/points
/camera/parameter_descriptions
/camera/parameter_updates
/camera/rgb/camera_info
/camera/rgb/image_raw
/camera/rgb/image_raw/compressed
/camera/rgb/image_raw/compressed/parameter_descriptions
/camera/rgb/image_raw/compressed/parameter_updates
/camera/rgb/image_raw/compressedDepth
/camera/rgb/image_raw/compressedDepth/parameter_descriptions
/camera/rgb/image_raw/compressedDepth/parameter_updates
/camera/rgb/image_raw/theora
/camera/rgb/image_raw/theora/parameter_descriptions
/camera/rgb/image_raw/theora/parameter_updates
/clock
/cmd_vel_mux/active
/cmd_vel_mux/input/navi
/cmd_vel_mux/input/safety_controller
/cmd_vel_mux/input/teleop
/cmd_vel_mux/parameter_descriptions
/cmd_vel_mux/parameter_updates
/depthimage_to_laserscan/parameter_descriptions
/depthimage_to_laserscan/parameter_updates
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/initialpose
/joint_states
/laserscan_nodelet_manager/bond
/mobile_base/commands/motor_power
/mobile_base/commands/reset_odometry
/mobile_base/commands/velocity
/mobile_base/events/bumper
/mobile_base/events/cliff
/mobile_base/sensors/bumper_pointcloud
/mobile_base/sensors/core
/mobile_base/sensors/imu_data
/mobile_base_nodelet_manager/bond
/move_base_simple/goal
/odom
/rosout
/rosout_agg
/scan
/tf
/tf_static

メモメモ
Kinectを搭載してるからrgbカメラ、depthイメージなどがある。
depthイメージをレーザーセンサと同様の働きをさせている。
bumperも使おうと思えば使える。
移動ロボットの基本となるオドメトリ情報を出している
速度に感してはcmd_vel_muxで管理している感じ?
gazeboとrvizの同時起動の負荷やばい・・・・

来週の金曜日までに動作させないとだから急がないとなぁ・・・
間違いあれば直します

2014年9月26日金曜日

Julius 孤立単語認識について 自分用メモ

自分で書いたJuliusに関するメモノートがあまりにも汚かったので、再確認を行うと同時にメモを残すためにここで書き直す。

認識の方法は孤立単語認識(「はい」など決められた単語の認識を行う)

使用したJuliusのバージョン4.3.1
OS Ubuntu 12.04

一部参考サイト
git:OpenQbo/qbo_listen
https://github.com/OpenQbo/qbo_listen/blob/master/src/julius.cpp

Juliusの解凍、インストールは公式参照

JuliusのメインのプログラムはSampleを基本としたソースコードを書けば問題がない。
また、MakeファイルやConfigurationファイルもサンプルや公式ドキュメントを参照しながら書けば問題はない。

問題は辞書ファイルの作成、辞書ファイルは文字コードがeuc-jpで書かないといけないので文字コードが違う場合、辞書ファイルは作られない。そこで文字コードを合わせるために以下のコマンドを実行した。

iconv -f utf8 -t eucjp ファイル名 | ./yomi2voca.pl > 辞書ファイル名

ファイル名、辞書ファイル名は各々が決める。
上のコマンドは、ファイルの文字コードをUTF-8からeucjpに変換するコマンドとのこと
これによって、辞書ファイルを作成することができた。

後、自分は実行の際、引数を渡すのがめんどくさかったのでgitで公開しているqbo_listenを参考にして自動で特定の場所のConfigurationファイルを読みこませるようにした。

(雑記)
時間があれば、参考サイトとか、ソースとか詳しく読み直してこのメモを詳しくしていきたいかなぁ・・・

2014年9月23日火曜日

ハッカソン終了 そのまとめ

土曜日、日曜日、月曜日の3日を使ってアイディアソン、ハッカソン、発表と行ってきました。
この3日間は自分の分野とは全く違うことをして、いろんな人と関わった。だからこそ見えてきたことや、やってみようと思う幅が広がった。結果としては最優秀賞を頂いたが正直、実装面やアイディアは他のチームの方がすごかったと思う。

参加チームのみなさん、運営のみなさん、情報提供企業のみなさん、本当にお疲れ様でしたと同時にありがとうございました。


ここからは自分的に思ったこととかを・・・
ハッカソンに関して時系列に自分の思ってたことを表すと以下の通り

ハッカソン始まるまで
・情報提供企業さん、ほとんど情報系やん!俺ら出る意味あるのかな・・・?

ハッカソン事前説明会
・html・・・JavaScript…

アイディアソン
・パルロかわええー

ハッカソン1日目
・え?ツイッターBOT・・・?PHP・・・・?

ハッカソン2日目
・Pythonスゲー、ラズパイおもれー

精神的な面
正直、始まるまではこれ...参加しなかったほうが...と思ってたのは事実です。ただ、始まって、ふたを開けてみると楽しんで頑張っていました。毛色が違うからか、今まで行わないことだったからか、それともチームで動いていたからか、多分理由はいろいろあると思うけど、いい経験になったし、参加してすごく良かったと思う。

技術的な面
ハッカソンでは普段と全く違う分野のこと(ツイッターのBOTを作ること)をした。使ったハードはRaspberry pi、一度起動のために触っただけで、それ以降は封印していた。その時の少ない知識と、拙いLinuxの知識を合わせて開発を頑張った。最初はネットにあったPHPのソースとかツイッターAPI情報とかを頼りにガリガリ書く→エラー→変更を繰り返していたけど、Pythonのモジュールを見つけてからはあっという間だった。
ほんと、Pythonさんすげーわ。

他学科との交流面
ハッカソンで他学科(特に情報系)の先生と交流があったのでいろいろと内情を聞いてみた。正直情報系の学科はWebアプリやWebページを専門にしているかと思ってたけど、Raspberry piやArduinoを使った組み込みを行ってたりする研究室が存在し、自分たちよりもロボットの知能に関しては詳しい人が多いのではないかという印象を持った。情報系の人たちに就職とかで勝つためにはそれ以上の知識か、ハードもできる万能屋になるしかないのかなぁ・・・という焦りを感じた。

最後に...今回のハッカソンで得たRaspberry piとPythonとPHPとかの技術使ってなんかやりたいなーという気持ちと得た知識を忘れないように勉強しようかなーという気持ちは高まった気がする。新しいことに足を踏み出すことはとってもいいことだと思う。







Python勉強するかなー!
なんかいいアイディア浮かばないかなー!!

2014年9月20日土曜日

アイディアソン参加 それについての個人フィードバック

アイディアソンを行ったのでそれについて思ったこととか

アイディアソンというのはアイディア出し+マラソンということ
ハッカソンだったりだとかそういう系のアイディア出しバージョン

このアイディアソン何が重要かというといい問題点を出すということらしい。
理由はアイディアソンの時点で開発の話になると開発できるかどうかだとかそういうことの掘り下げになっていくから。

アイディアソンというものを自分は思い違いをしていたのじゃないかなぁと振り返る。発表後、意見を頂いた時にこの問題点のことに対して厳しく言われ、問題点の細かい洗い出しとか必要かなと思ったが、自分たちが出した問題点が正しいかとかのフィードバックを得られることとかが重要なことなんだと思う。

明日からハッカソン、気合入れて頑張りたい。

一応まとめ
・アイディア出し難しい
・定量的なデータは問題提示時に役立つ(そういう資料をかき集める能力も必要)
・憶測だけのもの言いはよろしくない(ほんとなの?みたいに思われるとダメ)
・ちゃんとしたアイディアはちゃんとした裏付けから
・問題の掘り下げが不足していたか?
・情報系の人の発表がうまかった
・うまく情報を活用したい

2014年9月13日土曜日

クリエイティブ・マインドセット 読書記録

先日クリエイティブ・マインドセットを読み終えました。
この本は、クリエイティブになるための心構えなどを教えるために、著者らが始めた「dスクール」というクラスで教えてる内容、さらに詳しい事例や、どのようにクリエイティブ精神を鍛えるかなどの練習方法が書かれています。

クリエイティブになるには、「チャレンジ」と「失敗」が必要である。チャレンジしないと何も始まらないし、失敗しないと何も学ぶことができないから。

この2行が自分の感想です。印象に残ってるフレーズというよりも、自分が読んでてこういう印象を持ったという感じ。この「チャレンジ」と「失敗」というのは当たり前だけど、実際は後押しがないと出来ないことだと思う。そういう後押しが欲しい人は読んでみることをお勧め。

結構読んで面白かったです。自分は先ほど言った2行分のことが出来ないタイプの人なので、この本を読んでからはチャンスがあれば飛び込もう。何かしてみようと思う気持ちが強くなりました。
後、序盤は「視点を変えてみた」話だったりも面白かった。世では当たり前だけど、自分の中では気付いてなかったみたいなことも気づかせてくれます。

最後に、練習法とかは個人で出来るものから、数人で行うものまでさまざまで、クリエイティブ精神を付けようというワークショップを開催しようと思う人にとっても面白いかもしれません。