More Related Content Similar to ROS Tutorial 02 - CIT Similar to ROS Tutorial 02 - CIT (20) ROS Tutorial 02 - CIT2. 目次
1.ROSとは
2.ディストリビューション
3.ROSの歴史
4.便利なパッケージを動かしてみよう
5.本日の学習範囲
6.通信の基本モデル
7.ROSのノードについて理解する
8.ROSのトピックを理解する
9.RVizで図形を可視化しよう
3. ROS(Robot Operating System)とは
■オープンソースで提供されるロボット向けのメタ・オペレーティングシステム
■ロボット制御用のミドルウェア
→ ソースをコンパイルするためのビルドシステム
→ プロセス間通信のための通信ライブラリ
■ロボット工学分野の研究・開発におけるコードの”再利用”を
支援することが目的
ROS = 通信 + ツール群 + 機能群 + エコシステム
9. ■パッケージのインストール
$ sudo apt-get install ros-hydro-hector-slam
■バグファイル(ログ)のダウンロード
$ wget http://tu-darmstadt-ros-pkg.
googlecode.com/files/Team_Hector_MappingBox_RoboCup_2
011_Rescue_Arena.bag
■hector_slamの起動
$ roslaunch hector_slam_launch tutorial.launch
■バグファイルの再生
$ rosbag play
Team_Hector_MappingBox_RoboCup_2011_Rescue_Arena.bag
--clock
■地図の保存
$ rostopic pub syscommand std_msgs/String "savegeotiff"
12. 本家チュートリアル
初級
1.ROS環境のインストールとセットアップ
2.ROSのファイルシステムを学ぶ
3.ROSパッケージを作る
4.ROSのパッケージをビルドする
5.ROSのノードを理解する
6.ROSのトピックを理解する
7.ROSのサービスとパラメータを理解する
8.rqt_consoleとroslaunchを使う
9.ROSでrosedを使ってファイルを編集する
10.ROSのメッセージやサービスなどを作る
11.シンプルなパブリッシャとサブスクライバを書く
12.データを記録し、リプレイをする
中級
他のライブラリのチュートリアル
その他
13. 初級
1.ROS環境のインストールとセットアップ
2.ROSのファイルシステムを学ぶ
3.ROSパッケージを作る
4.ROSのパッケージをビルドする
5.ROSのノードを理解する
6.ROSのトピックを理解する
7.ROSのサービスとパラメータを理解する
8.rqt_consoleとroslaunchを使う
9.ROSでrosedを使ってファイルを編集する
10.ROSのメッセージやサービスなどを作る
11.シンプルなパブリッシャとサブスクライバを書く
12.データを記録し、リプレイをする
中級
他のライブラリのチュートリアル
その他
本日の学習範囲
本家チュートリアル
26. ■ノードが起動しているか確認
$ rosnode ping my_turtle
rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://daikimaekawa-ThinkPad-X230:58887/
time=0.523806ms
xmlrpc reply from http://daikimaekawa-ThinkPad-X230:58887/
time=1.019001ms
xmlrpc reply from http://daikimaekawa-ThinkPad-X230:58887/
time=1.125097ms
30. ■rostopicはトピックの詳細を調べるコマンド
$ rostopic echo /turtle1/cmd_vel
linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 2.0
---
linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---
33. ■配信-購読されているトピックとその型の情報を調べる
$ rostopic list -v
Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
* /rosout [rosgraph_msgs/Log] 3 publishers
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher
Subscribed topics:
* /turtle1/cmd_vel [geometry_msgs/Twist] 2 subscribers
* /rosout [rosgraph_msgs/Log] 1 subscriber
35. ■rosmsgを使用してメッセージの詳細を調べる
$ rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
39. ■rostopic hzは配信されたデータの更新頻度を調べる
■/turtle1/poseを購読して, turtlesim_nodeの速さがど
の程度か見てみよう
$ rostopic hz /turtle1/pose
subscribed to [/turtle1/pose]
average rate: 62.489
データの更新頻度は60Hz
min: 0.016s max: 0.016s std dev: 0.00011s window: 62
average rate: 62.491
min: 0.016s max: 0.016s std dev: 0.00009s window: 125
average rate: 62.496
min: 0.016s max: 0.016s std dev: 0.00009s window: 187
40. ■コマンドを組み合わせて便利に使える
■rostopic type と rosmsg showを結合して使ってみよう
→ 普通にパイプが使える
$ rostopic type /turtle1/cmd_vel | rosmsg show
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
44. ■rosservice listでアクティブなサービスの情報を表示
$ rosservice list
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
52. ■全てのパラメータサーバの中身を見る
$ rosparam get /
background_b: 255
background_g: 86
background_r: 255
rosdistro: 'hydro
'
roslaunch:
uris: {host_daikimaekawa_thinkpad_x230__57324:
'http://daikimaekawa-ThinkPad-X230:57324/'}
rosversion: '1.10.2
'
run_id: 2ec6f1ae-be3f-11e3-986c-b8763fd266b5
53. ■全てのパラメータをファイルに書き出す
$ rosparam dump params.yaml
■yamlファイルをcopyというネームスペース
の中に読み込む
$ rosparam load params.yaml copy
■rosparam getで中身を確認する
$ rosparam get copy/background_b
255
55. ■ROSのワークスペースを作成(catkin)
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
$ cd ~/catkin_ws
$ catkin_make
$ echo “source ~/catkin_ws/devel/setup.bash”
>> ~/.bashrc
$ source ~/.bashrc
56. ■パッケージ作成
$ cd ~/catkin_ws/src
$ catkin_create_pkg marker_publisher roscpp
visualization_msgs
59. ■初期設定
#define DEFAULT_RATE 20
int main(int argc, char *argv[]){
ros::init(argc, argv, “test”);
ros::NodeHandle n;
ros::Publisher marker_pub =
n.advertise<visualization_msgs::Marker>(“visualiz
ation_marker”, 10);
・・・
}
60. ■初期設定
int main(int argc, char *argv[]){
・・・
visualization_msgs::Marker line_strip;
line_strip.header.farme_id = “practice”;
line_strip.ns = “practice”;
line_strip.id = 1;
line_strip.type =
visualization_msgs::Marker::LINE_STRIP;
line_strip.action =
visualization_msgs::Marker::ADD;
・・・
}
61. ■初期設定
int main(int argc, char *argv[]){
・・・
line_strip.scale.x = 0.1;
line_strip.color.b = 1.0;
line_strip.color.a = 1.0;
float phai = 0.0;
n.setParam(“/rate”, DEFAULT_RATE);
・・・
}
62. ■図形を作成
int main(int argc, char *argv[]){
・・・
for(int i=0; i <= 10; i++){
const float radius = i % 2 ? 6.0 : 3.0;
const float theta =
(72.0 * (i/2) + (i%2) * 36.0) * M_PI / 180.0;
geometry_msgs::Point vertex;
vertex.x = radius * cos(theta);
vertex.y = radius * sin(theta);
line_strip.points.push_back(vertex);
}
・・・
}
63. ■図形の回転
int main(int argc, char *argv[]){
・・・
while(ros::ok()){
int val = DEFAULT_RATE;
if(n.getParam(“/rate”, val)){
std::cout << “val = ” << val << std::endl;
}
ros::Rate r(val);
line_strip.header.stamp = ros::Time::now();
line_strip.pose.orientation.z = sin(phai / 2);
line_strip.pose.orientation.w = cos(phai / 2);
・・・
}
return 0;
}
68. ■ノードを起動
$ rosrun marker_publisher marker_publisher_node
■rostopic echoでframe_idを確認
$ rostopic echo /visualization_marker
・・・
frame_id: practice
・・・
line_strip.header.frame_id = “practice”
72. ■rosbagでトピックを記録
$ rosbag record /visualization_marker
■marker_publisher_nodeを停止
$ Ctrl - C
■rosbagでバグファイルを再生
$ rosbag play *.bag
rosbagはデバックの強い味方