自律移動できた
詳しいことは後日まとめるとして、個人用メモ
roslaunch amcl amcl_deff.launch
move_base.launch
rorsrun topic_tools relay cmd_vel RosAria/cmd_vel
rvizの2dnavで移動先の指定
move_baseのyamlファイルとかがややこしい
というか自分の場合launchがうまくいかないので、わざわざlaunchファイルが置いてある場所に移動してからroslaunchしてる
2013年8月25日日曜日
topic_toolsについて
任意のトピックにパブリッシュするためのモジュール
http://ros.org/wiki/topic_tools
これかなあ?
http://ros.org/wiki/topic_tools/relay
http://ros.org/wiki/topic_tools
これかなあ?
http://ros.org/wiki/topic_tools/relay
2013年7月30日火曜日
launchファイルを作りたい
いま、自律移動やってるんですけど、
launchファイルを作らないといけない状況になってる。
でも、launchファイルって、どういう仕組みで作られているのか未だに良く分からない。
パッケージに、launchしたいノードのソースコードを入れるべきなのか、そうじゃないのか。
launchファイルも別のlaunchファイルに含められるのか。
launchファイルはフォルダのどこにおくべきなのか。
わからないことだらけ。
でも、ググってみたら、日本語のサイトがあった。やったー。
http://code.google.com/p/rtm-ros-robotics/wiki/ROS_Example_Launch_Syntax
launchファイルを作らないといけない状況になってる。
でも、launchファイルって、どういう仕組みで作られているのか未だに良く分からない。
パッケージに、launchしたいノードのソースコードを入れるべきなのか、そうじゃないのか。
launchファイルも別のlaunchファイルに含められるのか。
launchファイルはフォルダのどこにおくべきなのか。
わからないことだらけ。
でも、ググってみたら、日本語のサイトがあった。やったー。
http://code.google.com/p/rtm-ros-robotics/wiki/ROS_Example_Launch_Syntax
2013年7月23日火曜日
gmappingのやり方
0. 環境
Pioneer3dx, Xtion PRO LIVEを使用する。1. 前準備
1.1 ROSARIAを導入する
ROSARIAは以下のページを参照して導入する。
1.2 openni_launchを使えるようにする
KinectやXtionを使用するためのモジュールであるhttp://asukiaaa.blogspot.jp/2013/05/xtion_20.html
1.3 depthimage_to_laserscanを入れる
$ sudo apt-get install ros-groovy-depthimage_to_laserscan
赤外線データを取得するためのモジュールである。
これで入らない場合は、~/catkin_ws/src以下にgit cloneを使って入れる
$ cd ~/catkin_ws/src
$ git clone https://github.com/ros-perception/depthimage_to_laserscan
$ cd ~/catkin_ws
$ catkin_make
これで入らない場合は、~/catkin_ws/src以下にgit cloneを使って入れる
$ cd ~/catkin_ws/src
$ git clone https://github.com/ros-perception/depthimage_to_laserscan
$ cd ~/catkin_ws
$ catkin_make
1.4 rob_teleop.cppを追加する
rob_teleop.cppは、pioneer3dxをキー操作するためのモジュールである。
今回は、ROSARIAのパッケージにこのモジュールを追加した。
今回は、ROSARIAのパッケージにこのモジュールを追加した。
2. 手順
2.1 ROSARIAを使ってSLAMする(map_serverでマップを生成する場合)
$ roslaunch openni_launch openni.launch
新しい端末を開いて
$ rosrun depthimage_to_laserscan depthimage_to_laserscan image:=/camera/depth/image
新しい端末を開いて
$ rosrun ROSARIA RosAria
新しい端末を開いて
$ rosrun tf static_transform_publisher 0.170 0.0 0.270 0.0 0.0 0.0 /base_link /camera_link 100
新しい端末を開いて
$ rosrun ROSARIA rob_teleop
新しい端末を開いて
$ rosbag record /scan /tf
データの記録が始まるので、必要な分だけロボットを動かす。
その時のデータは、その時のディレクトリにbagファイルとして保存される。
Ctrl + c で強制終了。
すべての端末を終了させて,
$ roscore
新しい端末を開いて
$ rosparam set use_sim_time true
$ rosrun gmapping slam_gmapping scan:=scan
新しい端末を開いて
$ rosbag play (保存したbagファイルの名前).bag
処理が終わるまで待つ。
$ rosrun map_server map_saver
すると、カレントディレクトリに map.pgm と map.yaml が生成される。
2.2 ROSARIAを使ってSLAMする(rvizでリアルタイムマップ生成)
$ roslaunch openni_launch openni.launch
新しい端末を開いて
$ rosrun depthimage_to_laserscan depthimage_to_laserscan image:=/camera/depth/image
新しい端末を開いて
$ rosrun rviz rviz
新しい端末を開いて
$ rosrun ROSARIA RosAria
新しい端末を開いて
$ rosrun tf static_transform_publisher 0.170 0.0 0.270 0.0 0.0 0.0 /base_link /camera_link 100
新しい端末を開いて
$ rosrun ROSARIA rob_teleop
新しい端末を開いて
$ rosrun gmapping slam_gmapping scan:=scan
rvizの画面に戻り、mapをAddする。frameとtopicを/mapに設定する。
rviz上で地図の生成が始まる。
$ rosrun map_server map_saver
すると、カレントディレクトリに map.pgm と map.yaml が生成される。
3. 上手くいかなかったら
3.1 tfに関するエラー(警告)が出た場合
以下のコマンドのフレームを調整する。
$ rosrun tf static_transform_publisher 0.17 0.0 0.270 0.0 0.0 0.0 /base_link /camera_link 100
ここでは、tfを使って、レーザのリンクをオドメトリに渡している。
/camera_link,/base_link,/base_footpointはロボットのフレームである。
これらのフレーム変換によって、レーザースキャンデータをロボットの中心からレーザーが出ているように変換している。
存在しないフレームがあると、データが所得できない。TF_OLD_DATAみたいなWARNINGが出る。
したがって、tfで上手くいかなければ、まず、そのフレームが存在するかどうかを調べるべき。
今回はそれでつまづいた。
$ rosrun tf static_transform_publisher 0.034 0.0 0.250 0.0 0.0 0.0 /base_link /camera_link 100
デフォルトでは/laserのフレームを/base_linkに変換している。しかし、今回はXtionを使ったため、Xtion(OpenNI)のフレーム/camera_linkを指定しなければならなかった。
3.2 自己位置がrviz上で上手く反映されない場合(tfがチカチカする)
おそらく、単一のフレーム間に、tfが複数かかっていると思われる。
たとえば、ROSARIAでは、/odomから/base_linkのtfが、ROSARIAのモジュール内でなされている。
そのとき、/odomから/base_linkのtfを別にやってしまうと、rviz上でのtfの表示がチラつくようになる。
また、マップも上手く生成されなくなる。
これは、view frameで気づくことができないから、要注意である。
rqt_graphで、二重にかかっていないかチェックする。
4. 参考にしたページ
2013年7月16日火曜日
gmappingできた
gmappingできました
また後日清書します
それに伴って、ROSについて誤解していた記事も訂正・削除します
今は殴り書きだけ
$ roslaunch openni_launch openni.launch
$ rosrun depthimage_to_laserscan depthimage_to_laserscan image:=/camera/depth/image
$ rosrun rviz rviz
$ rosrun ROSARIA RosAria
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 /base_footprint /camera_link 100
※ここで注意するのは、/laserじゃなくて/camera_linkで取得しなければならなかった
チュートリアルとかのデフォでは、/laserになっている。
でも、自分の場合、/laserというリンクが存在しなかったので、tfエラーが起きてた。
よって、/laserを/camera_linkに変更したらできた
/camera_linkとは、camera(Xtion)の中心位置
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 /be_footprint /base_link 100
$ rosrun gmapping slam_gmapping scan:=scan
$ rosrun map_server map_saver
rvizで、mapだけを追加して、topicを/mapにすると、リアルタイムでマップ生成が見れる
その場合は。gmappingの前に
$ rosparam set use_sim_time true
しないと、マップ情報がちぐはぐになって(?)ぐちゃぐちゃなマップができてしまう
LaserScanを加えると、コアダンプしてrvizが落ちる
また後日清書します
それに伴って、ROSについて誤解していた記事も訂正・削除します
今は殴り書きだけ
$ roslaunch openni_launch openni.launch
$ rosrun depthimage_to_laserscan depthimage_to_laserscan image:=/camera/depth/image
$ rosrun rviz rviz
$ rosrun ROSARIA RosAria
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 /base_footprint /camera_link 100
※ここで注意するのは、/laserじゃなくて/camera_linkで取得しなければならなかった
チュートリアルとかのデフォでは、/laserになっている。
でも、自分の場合、/laserというリンクが存在しなかったので、tfエラーが起きてた。
よって、/laserを/camera_linkに変更したらできた
/camera_linkとは、camera(Xtion)の中心位置
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 /be_footprint /base_link 100
$ rosrun gmapping slam_gmapping scan:=scan
$ rosrun map_server map_saver
rvizで、mapだけを追加して、topicを/mapにすると、リアルタイムでマップ生成が見れる
その場合は。gmappingの前に
$ rosparam set use_sim_time true
しないと、マップ情報がちぐはぐになって(?)ぐちゃぐちゃなマップができてしまう
LaserScanを加えると、コアダンプしてrvizが落ちる
gmappingができない原因
gmappingが上手くいかない原因として考えられるのは
1,オドメトリがレーザー(Xtion)の位置に変換できていない
2,Xtionからのレーザー情報に不備がある(?)
3,適切なやり方(PC的には何も失敗していない)ができていない。手順がおかしい。
openni_launchのチュートリアル
http://www.ros.org/wiki/openni_launch/Tutorials
1,オドメトリがレーザー(Xtion)の位置に変換できていない
2,Xtionからのレーザー情報に不備がある(?)
3,適切なやり方(PC的には何も失敗していない)ができていない。手順がおかしい。
openni_launchのチュートリアル
http://www.ros.org/wiki/openni_launch/Tutorials
2013年6月23日日曜日
マッピングできない
http://www.ist.tugraz.at/robotics/bin/view/Main/Poineer_mapping
マッピングするためには以下の変換が必要
1./base_linkと/laser
2./base_footprintと/base_link
3./odomと/base_footprint
上記の変換をするためには以下のようにして変換しなければならない
/odom --> /base_footprint --> /base_link --> /laser
●実際は以下のように変換する
//○変換:/base_link --> /laser
tf::Quaternion laserQ;
laserQ.setRPY(0.0, 0.0, 0.0);
tf::Transform txLaser = tf::Transform(
laserQ,
tf::Point(0.034, 0.0, 0.250)
);
tf.sendTransform(
tf::StampedTransform(
txLaser,
ros::Time::now(),
"base_link",
"laser"
)
);
//○変換:/base_footprint --> /base_link
tf::Transform txIdentity(
tf::createIdentityQuaternion(),
tf::Point(0.0, 0.0, 0.0)
);
tf.sendTransform(
tf::StampedTransform(
txIdentity,
ros::Time::now(),
"base_footprint",
"base_link")
);
//○変換:/odom --> /base_footprint
tf::Quaternion odomQ;
tf::quaternionMsgToTF(
position.pose.pose.orientation,
odomQ
);<b>map_saver</b>
tf::Transform txOdom(
odomQ, tf::Point(
(double) pos.getX()/1000.0,
(double) pos.getY()/1000.0,
pos.getTh()
)
);
tf.sendTransform(
tf::StampedTransform(
txOdom,
ros::Time::now() ,
"odom",
"base_footprint")
);
※Quatarnionについて
http://www.bulletphysics.com/Bullet/BulletFull/classbtQuaternion.html
仕様が変わってるらしい
○また、上記の変換は以下のようにして端末上で変換することも出来る
$ rosrun tf static_transform_publisher 0.034 0.0 0.250 0.0 0.0 0.0 /base_link /laser 100
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 /base_footprint /base_link 100
○これでいけるかやってみた
$ roslaunch openni_launch openni.launch
$ rosrun depthimage_to_laserscan depthimage_to_laserscan image:=/camera/depth/image_raw
$ rosrun rviz rviz
でlaserscanデータを取得
$ rosrun ROSARIA RosAria
$ rosrun tf static_transform_publisher 0.034 0.0 0.250 0.0 0.0 0.0 /base_link /laser 100
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 /base_footprint /base_link 100
$ rosrun ROSARIA theo.key
で、あとはデータを取得
$ rosbag record -a
$ rosparam set use_sim_time true
$ rosrun gmapping slam_gmapping
$ rosbag play .....................bag
$ rosrun map_server map_saver
ちなみに$ rosrun gmapping slam_gmappingした端末では、以下のような警告が
ここに書いてる
http://www.ros.org/wiki/navigation/Troubleshooting
[ WARN] [1371981822.770704891]: TF_OLD_DATA ignoring data from the past for frame /base_link at time 1.37198e+09 according to authority /play_1371981806796107282
Possible reasons are listed at
[ WARN] [1371981822.770915036]: TF_OLD_DATA ignoring data from the past for frame /camera_depth_frame at time 1.37198e+09 according to authority /play_1371981806796107282
Possible reasons are listed at
[ WARN] [1371981822.771151442]: TF_OLD_DATA ignoring data from the past for frame /camera_rgb_optical_frame at time 1.37198e+09 according to authority /play_1371981806796107282
Possible reasons are listed at
うーん
マップ出来ない
上手く行ったらmy_lab_map.yamlとmy_lab_map.pgmが生成されるらしいけど
できていない
rosbagでgmappingに必要なデータが取得できていないのだろう
後一歩のところで届いてないみたいな
今回のリンクはとても参考になった
グラフ
マッピングするためには以下の変換が必要
1./base_linkと/laser
2./base_footprintと/base_link
3./odomと/base_footprint
上記の変換をするためには以下のようにして変換しなければならない
/odom --> /base_footprint --> /base_link --> /laser
●実際は以下のように変換する
//○変換:/base_link --> /laser
tf::Quaternion laserQ;
laserQ.setRPY(0.0, 0.0, 0.0);
tf::Transform txLaser = tf::Transform(
laserQ,
tf::Point(0.034, 0.0, 0.250)
);
tf.sendTransform(
tf::StampedTransform(
txLaser,
ros::Time::now(),
"base_link",
"laser"
)
);
//○変換:/base_footprint --> /base_link
tf::Transform txIdentity(
tf::createIdentityQuaternion(),
tf::Point(0.0, 0.0, 0.0)
);
tf.sendTransform(
tf::StampedTransform(
txIdentity,
ros::Time::now(),
"base_footprint",
"base_link")
);
//○変換:/odom --> /base_footprint
tf::Quaternion odomQ;
tf::quaternionMsgToTF(
position.pose.pose.orientation,
odomQ
);<b>map_saver</b>
tf::Transform txOdom(
odomQ, tf::Point(
(double) pos.getX()/1000.0,
(double) pos.getY()/1000.0,
pos.getTh()
)
);
tf.sendTransform(
tf::StampedTransform(
txOdom,
ros::Time::now() ,
"odom",
"base_footprint")
);
※Quatarnionについて
http://www.bulletphysics.com/Bullet/BulletFull/classbtQuaternion.html
仕様が変わってるらしい
○また、上記の変換は以下のようにして端末上で変換することも出来る
$ rosrun tf static_transform_publisher 0.034 0.0 0.250 0.0 0.0 0.0 /base_link /laser 100
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 /base_footprint /base_link 100
○これでいけるかやってみた
$ roslaunch openni_launch openni.launch
$ rosrun depthimage_to_laserscan depthimage_to_laserscan image:=/camera/depth/image_raw
$ rosrun rviz rviz
でlaserscanデータを取得
$ rosrun ROSARIA RosAria
$ rosrun tf static_transform_publisher 0.034 0.0 0.250 0.0 0.0 0.0 /base_link /laser 100
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 /base_footprint /base_link 100
$ rosrun ROSARIA theo.key
で、あとはデータを取得
$ rosbag record -a
$ rosparam set use_sim_time true
$ rosrun gmapping slam_gmapping
$ rosbag play .....................bag
$ rosrun map_server map_saver
ちなみに$ rosrun gmapping slam_gmappingした端末では、以下のような警告が
ここに書いてる
http://www.ros.org/wiki/navigation/Troubleshooting
[ WARN] [1371981822.770704891]: TF_OLD_DATA ignoring data from the past for frame /base_link at time 1.37198e+09 according to authority /play_1371981806796107282
Possible reasons are listed at
[ WARN] [1371981822.770915036]: TF_OLD_DATA ignoring data from the past for frame /camera_depth_frame at time 1.37198e+09 according to authority /play_1371981806796107282
Possible reasons are listed at
[ WARN] [1371981822.771151442]: TF_OLD_DATA ignoring data from the past for frame /camera_rgb_optical_frame at time 1.37198e+09 according to authority /play_1371981806796107282
Possible reasons are listed at
うーん
マップ出来ない
上手く行ったらmy_lab_map.yamlとmy_lab_map.pgmが生成されるらしいけど
できていない
rosbagでgmappingに必要なデータが取得できていないのだろう
後一歩のところで届いてないみたいな
今回のリンクはとても参考になった
グラフ
登録:
投稿 (Atom)


