2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Amazonウィジェット

  • miniPC
  • 最近買った本
  • Raspberry Pi
  • クアッドコプター
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

« 2015年10月 | トップページ | 2016年2月 »

2016年1月

2016年1月29日 (金)

お手軽なPythonのはじめ方

ROS(Robot Operating System)ではC++とPythonの2種類を使ってプログラミングできるので、ためしにPythonを勉強してみることにした。

Ardroneでも一度操縦用のライブラリを使うためにさわったことがあった。しかし、そのころはあまり便利とも思わず、インデントでブロックを作るなんてなんて堅苦しいんだろうという感想しか持たなかった。

今はやりの機械学習はPythonで書かれていることが多いらしく、ためしに買った本も中々面白かったので、立て続けにPython本を買った。



ちょっと読んだだけで色々試したくなってしまい、Windows環境で手軽に始められて、パッケージが最初から全部入っているソフトを探していた。

環境を整えて、早速作ってみたのがこのGUIだった。
ツールというような立派なものではないが、スクロールバーやボタンに連動するラベルなど、C#ではちょっとしたサイズになるものが、Pythonなら50行程度で書ける。しかも全部入りのインストーラならパッケージを入れる必要は無い。

Ws000061

実践編

Windows環境ではじめるならば、WinPythonが便利だった。
インストーラを実行するだけで、Matlabのような記述ができるnumpiや科学技術計算用のscipiなどが入った状態で付いてくる。さらにUSBに入れて環境を持ち歩ける。という強みを持っている。GUIの開発環境でデバッグも行える。

ここから公式サイトへ


色々バージョンがあってよくわからないのだが、Python2.7というのがライブラリがあって普及しているらしかったのでとりあえずPython2.7の64bitを選んでおいた。

インストールが終わったらSpyder.exeを立ち上げる。
※のっそり立ち上がるので、気長に待つこと。

Ws000062

これが画面。
左のペインにソースを書き込み、上の緑の三角を押すと実行される。

色々いじっているうちに、おかしくなってこんなワーニングが出ることがある。

Warning: No IPython console is currently available to run hogehoge.py.
Please open a new one and try again.


そんなときは、右下のペインで右クリックし、新規コンソールを立ち上げると書いたソースの実行が可能になる。


2016年1月25日 (月)

ROS hector_slamを使ってマップを作る。<No.2>

一回目でhector_slamのパッケージをインストールしたら、後はhokuyo_nodeを使ってLRF(laser range finder)の情報をpublishしてhector_slamのマッピングをするノードにデータを入れればよい。

最終的にこんなマップが作れるようになった。
Ws000059

hector_slamを使うまでに、一番ネックになったのはTFの理解だった。
ROSでは座標変換をトピックを使って実施している。これを処理するのがTFノードで、各ノードはTFノードに座標変換情報を投げて、ほしい座標系を受け取っている。

hector_slamが必要としているフレーム(座標系)を持ったTFのトピックを、hector_slamノードに投げてやる必要がある。

hector_slamをLRFを手に持ってデータを取るだけなら、とりあえず難しいことはさておき、全ての座標変換を(x,y,z,roll,pitch,yaw)=(0,0,0,0,0,0)でやってしまっても問題なく動く。

TFを投げる方法として、TFパッケージのstatic_transform_publisherがある。
これを必要なだけlaunchファイルに書き出せばOK。


launchファイルの例。
















 

hokuyo_nodeを起動して、URG-04LXのデータをpublishする方法。 このデータがマッピングノードに送られることで、マップが生成される。











rvizの見方
Fixed Frameはmapにする。tfツリーのトップはmapにしてあるので、mapを基準としてLRFが動き回る。LRFがどこに居るかは/laserというフレームを見ればわかる。LRFの生データは/scanトピックを追加することで見られる。

mapの保存
mapの保存は、rvizではなくrosrunからのmapsaverで行う。

rosrun map_server map_saver -f ./mymap

これを間違いやすい。よくでるエラーは

[ WARN] [1452915362.940959897]: Using deprecated map server interface. Please switch to new interface. [ERROR] [1452915363.068600220]: Map_server could not open -f.

こういうのが出たらmap_saverの打ち間違い。すごく紛らわしいので注意。


mymap.pgmの例

Ws000060

mymap.yamlの例

「mymap.yaml」をダウンロード


次回はマップ作成の実践編

2016年1月24日 (日)

ROSのhector_slamを使ってマップを作る。

hector_slamとLRF(laser range finder)があれば、グリッドマッピングが簡単に実行できる。しかもオドメトリ情報が要らないので、LRFを手で持って移動するだけでマップが作成できる。

※このページの内容を試そうと思ったら、一通りチュートリアルをやってrvizと、launchファイルの起動の仕方。ノードとトピックの見方。などを押さえておいたほうがスムーズに行きます。

LRFの例。

ROSでよく使われているのは北陽電機のURG
最近はお掃除ロボットにも搭載されて、ロボット自体も低価格化が進んでいる。アメリカではLRFを手に入れるためにお掃除ロボットを買って分解する人もいるそうな。


激安LRF¥32,583!!ついにここまで安くなった。ROSに対応していないと思うので、ノードのプログラムを書く技術があるならトライしてみても良いかも。

いきなり実機を使ってやろうとするのは難しかったので、サンプルデータを使ってマップのできる様子やどんなトピックが出ているかを見ていくことにした。

セッティングの方法

hector_slamのサンプルデータを使って、マッピングの様子を見た。

まずは、このコマンドでbagファイルをダウンロードする。基本的にコピペ。

wget http://tu-darmstadt-ros-pkg.googlecode.com/files/Team_Hector_MappingBox_RoboCup_2011_Rescue_Arena.bag

 

 

hector_slamに必要なノード群をlaunchファイルで一括起動して、
roslaunch hector_slam_launch tutorial.launch
さっきダウンロードしたbagファイルを再生させると、実機で動作させたときのトピックの状況が再現される。
rosbag play Team_Hector_MappingBox_RoboCup_2011_Rescue_Arena.bag  --clock
このlaunchファイルはマップを表示させるためのrvizの設定まではやってくれていないので、自分で参照したいトピックを指定する。
マップを見たかったら、by topicでmapを指定する。


次回は実機を使って試します。

2016年1月19日 (火)

ROSでnavigationを試す。

ROSのnavigationを使ってみたときの記録。

目標としているのはこんな事。
⇒既知の地図を用いたTurtleBotの自律ナビゲーション

いつの間にか、こんなところに無料のROS本が公開されている!!
のでありがたくここの内容を参考にさせてもらうことにした。

マシンは、マスター用にミニPCのECS LIVA、kobukiに搭載するPCにraspberryPi2(以下RPI2と記載)を使った。


上記rosbookのrosbook_kobuki packageをダウンロードして、catkin_makeしたら、
source catkin_ws/devel/setup.bash
の実行が必要。
これをやらないとTAB補完で候補として出てこない=登録されない。
launchファイルを起動してみたが、urg_nodeが入っていないというエラーが出たので、仕方なく、urg_nodeをインストールした。
まずはliva上に入れて、エラーメッセージがでなくなることを確認した。
URG-04Xとkobukiを直接livaにつなぎ、liva上でnavigationを実行した。
すると、工程がすすんで起動が完了した。
view_navigation.launchを使ってrvizを起動し、サンプルで用意されたマップとともに現在のスキャンデータが表示された。

最初に2DPoseEstimateをGUIで入力すると、kobukiが登場する。
それから2DNavGoalを入力したらkobukiが移動した。

次に、RPI2上でやろうと思いurg_nodeをインストールしたのだが、
なぜかnot authenticatedというエラーがでてインストールできなかった。
LIVA上ではなんとか動かすところまでいったので、RPI2上でrosbook_kobukiパッケージをhokuyo_nodeで動くように作り変えて見る。


まずはurgという単語を
findを使ってあぶり出すことにした。urgをhokuyoに変えたらいけそうか。

find ./ -type f -print | xargs grep 'urg'



とりあえず全てのurgという単語を置き換えて起動するところまではいったものの、
robot_state_publisher
というノードが立ち上がらず。おそらく、このノードに渡すパラメータがurgとhokuyo_nodeで異なっているために、正しく起動できていないようだ。


仕方がないので再度livaにLRFとkobukiをつないで、node_graphの正解をみることにした。
Rosgraphnavi


続いて、試しにmyRoomのマップ(以前hector_slamで作成したマップ)を読み込ませてみると、うまく動作した。

EstimatedPointを指定して、NavGoalを指定すると、ちゃんと動くのだが、部屋が狭いせいでpotentialCollisonで動けないというエラーが出た。コストマップのパラメータを小さい値に変更すれば良さそうだ。


myRoomのマップを実行した時のrviz

20160116myroomcostmap





2016年1月17日 (日)

ROSでwebカメラを使う

ROSにwebカメラをつないで画像処理をしたり、デスクトップPCに遠隔操作のための画像を配信したりする。


↑最初はラズパイで使っていたelecomのwebカメラを試した。

ROSのパッケージをインストール。
sudo apt-get install ros-indigo-usb-cam
lsusbでつないだUSBが認識されたかみることができる。
このカメラはelecomとしか出てこなかった。
rosparamでyuvuを設定するが、ちっともうまく行かず。
しばらくするとノードが落ちてしまう。
日本語のHPは古いのが多かったので、ひたすら英語サイトを引っ張った。
ここにlaunchファイルの例があったので、それを試した。


roslaunchでwebcam.launchを起動すれば、ウェブカメラの画像が表示される。
launchファイルにカメラのパラメータ、画素数とかフォーマットを書き込む。
結局冒頭のelecom製では起動せず、iBuffaloのレンズ付きカメラで試したらうまく行った。
形式はyuvuではなくmjpegだった。


↑結局こっちを使うことになってしまった。ちょっと高いのだがレンズが大口径で明るい画像が撮れるタイプ。
付属品のフレキシブルミニ三脚が意外としっかりしていて、ロボットの支柱などを掴ませて手軽に固定することができる。



やってみた結果をlaunchファイルにまとめて、一発でカメラを起動できるようにした。


  
    
    
    
    
    
    
  
  
    
    
  

これを、cam.launchなどとしてファイルに保存し、

roslaunch ./cam.launch

で起動すると、カメラとカメラビューワーが一緒に立ち上がる。


« 2015年10月 | トップページ | 2016年2月 »