SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
M1 前田修一
ROS2勉強会資料
ROS2で始めよう
次世代ロボットプログラミング
3.6~3.8章
自己紹介
• 名前:前田 修一(Shuichi Maeda )
• 出身:福岡市
• 所属:九州工業大学工学 M1 西田研究室
• 研究:産業用ロボットの軌道生成,Visual SLAM
• 趣味:釣り,ランニング
• 最近の興味:FPGA
アウトライン
• 3-6トピック
• 3-6-1 プロセス間通信
• 3-6-2 プロセス内通信
• 3-6-3 コンピュータ間通信
• 3-7 サービス
• 3-7-1 サーバ実装
• 3-7-2 同期/非同期クライアント実装
• 3-8 パラメータ
• 3-8-1 パラメータ取得・設定メソッド
• 3-8-2 パラメータ設定イベントのコールバック
3-6 トピック
$ ros2 pkg create
$ mkdir –p catkin_ws/src
$ cd catkin_ws/src
パッケージの作成方法
ワークスペースの作成
パッケージの新規作成コマンド
$ ros2 pkg create –build-type ament_cmake <パッケージ名>
--dependencies <依存パッケージ>
例 CMakeLists.txtとpakage.xmlが生成される
hello_worldパッケージの作成とTalker,Listenerノードの実装
ROS1と同じ
3-6 トピック
Pakcage.xmlについて
• ROS2のパッケージの概要を記述
• フォーマットが<package format=“3”>に変更
依存パッケージの条件にROS1パッケージかROS2パッケージかを指定可能に!
• <name> パッケージ名
• <version> パッケージのバージョン
• <description> パッケージの中身の説明
• <maintainer> パッケージを管理している人の名前とメアド
• <licence> パッケージのラインセンス
• <buildtool_depend> パッケージのビルドツール
• <build_depend> パッケージのビルドに必要な依存パッケージ
• <exec_depend> パッケージを実行するのに必要な依存パッケージ
• <test_depend> パッケージのテストに必要なパッケージ
• <depend> ビルド,実行,テストに必要なパッケージ
Package.xmlの必須タグ
Package.xmlの依存関係タグ
3-6 トピック
パブリッシャの実装(talker.cpp)
#include <std_msgs/msg/string.hpp>
#include <chrono>
#include <memory>
#include <rclcpp/rclcpp.hpp>
C++で実装するためにrclcppAPIを利用
Std_msgs/String型のヘッダのインクルード
ROS2ではC++14を利用.時間に1h,1sのように単位をつけ
て表示
std::shared_ptr, std::make_sharedを利用するため
• “Hello world!”というメッセージを1秒に10回送信するノード
プリプロセッサ部に関して
3-6 トピック
パブリッシャの実装(talker.cpp)
class Talker : public rclcpp::Node
{
ノードのクラス定義.クラスはrclcppに含まれているrclcpp::Nodeクラ
スから継承
explicit Talker(const std::string & topic_name) : Node(“talker”)
pub_ = create_publisher<std::msgs::msg::String>(topic_name)
Talkerクラスに関して
• “Hello world!”というメッセージを1秒に10回送信するノード
クラスのコンストラクタの定義
パブリッシャの初期化
3-6 トピック
パブリッシャの実装(talker.cpp)
rclcpp::init(argc, argv);
ros2の初期設定
auto node = std::make_shared<Talker>(“chatter”);
rclcpp::spin(node)
main関数部分に関して
ノードのインスタンスの生成
インスタンスをspinにわたす
3-6 トピック
サブスクライバの実装(listener.cpp)
sub_ =
create_subscription<std_msgs::msg::String>(topic_name,callback);
• メッセージを受信するトピック
• 受信するたびにコールバックメソッドを実施
サブスクライバの初期化
listener.cpp
3-6 トピック
3-6-1 プロセス間通信
ノードを別々のプロセスで実行してメッセージの送受信を行う
データの受け渡しにはRTPSプロトコルに従う
buildコマンドでビルド実行
$ cd ~/catkin_ws
$ colcon build
$source ~/catkin_ws/install/setup.bash
$ros2 run <パッケージ名> <ノード名>
buildコマンドでビルド実行
パスを通す
Runコマンドで実行
3-6 トピック
3-6-2 プロセス内通信
複数ノードを1つのプロセスで動作させたいときに利用
rclcpp::executors::SingleThreadedExecutor exec;
auto talker = std::make_shared<Talker>(“chatter”);
exec.add_node(talker);
auto listener = std::make_shared<Listener>(“chatter”);
exec.add_node(listener);
ビルド時のプロセス内通信を強制する
ノードのインスタンス
add_node(<インスタンス名>)メソッド
talker_listener_composition.cpp
3-6 トピック
3-6-3 コンピュータ間通信
同一ネットワークにあるコンピュータ間でROS2ノード
を通信させたい場合に利用
ROS1のケース
$export ROS_MASTER_URI=<IP>
$export ROS_HOSTNAME=<name>
各PCで環境変数の設定が必要
各PCで環境変数の設定が不必要
通信ミドルウェアDDSのUDPマルチ
キャストを利用するため
ROS2のケース
3-6 トピック
3-6-3 コンピュータ間通信
ただし…
同一ネットワーク上で複数のROS2を分離運用したい場合
$export ROS_DOMAIN_ID=<ID> Idは0から255の値
同一ドメインに設定したいPCに同じドメインIDを付与する
共有ネットワーク内でROS2アプリケーションを使用する際は必ず設定する
同一ドメイン間でのトピック受信が可能
3-7 サービス
3-7-0 ROS1とROS2の違い
• 同期通信のみ
• リクエストした結果が返って
くるまで待つ
• その処理の間はスレッドの動
きは止まっている
ROS1のケース
• 同期通信+非同期通信
• 結果を得るまで待つメソッド
を別途呼び出す
ROS2のケース
• ROSのメッセージ通信のひとつ
• 遠隔ノードが持つ関数を呼び出す機能
3-7 サービス
3-7-1 サーバ実装
talker_with_service.cppの一部
handle_set_message変数
にサービスが呼び出され
たときのコールバック関
数が設定
std::shared_ptr<set_message::srv::SetMessage::Request> request;
std::shared_ptr<set_message::srv::SetMessage::Response> response;
サービスの引数
サービスの返り値
3-7 サービス
3-7-2 同期/非同期クライアント実装
client_async.cpp
関数呼び出しの処理が完了しているかわからない段階で
処理結果Futureをかえし,返り値取得を後回しにする手法
コード中ServiceResponseFuture future変数のgetメソッドを呼
び出すことで,関数呼び出しの処理の完了待ちを行い,実際の
値を得る. 関数呼び出しから返り値取得までの間に他の
作業ができる
3-8 パラメータ
3-8-0 ROS1とROS2での違い
• 動的なパラメータ変更に対応
Dynamic_reconfigureが不要
• パラメータサーバが各ノードに
1つずつ
• メッセージ通信の一つ
• 単純なデータ構造の読み書きに利用
• ノードの起動時に読み込み
静的なパラメータの読み込みが基本
• 動的なパラメータ読み込みには
Dynamic_reconfigureなどが必要
• パラメータサーバはroscore内に1つ
ROS1のケース ROS2のケース
3-8 パラメータ
3-8-1 パラメータ取得・設定メソッド
• パラメータの取得・設定メソッドを直接呼び出す形式
のプログラムをset_and_get_parameters.cppで実装
auto parameters_client =
std::make_shared<rclcpp::SyncParametersClient>(node)
node->declare_parameter(“foo”);
node->declare_parameter(“bar”);
node->declare_parameter(“baz”);
パラメータサービスのクライアントのインスタンス化
declare_parameterメソッドにより
foo, bar, bazというパラメータの宣言
set_and_get_parameters.cpp
3-8 パラメータ
3-8-2 パラメータ設定イベントのコールバック
set_and_get_parameters.cppでは..
ノードの処理ループごとに毎回
パラメータを取得しているため
非効率的
パラメータが書き換わったときに
だけ呼び出されるパラメータ設定
イベントのコールバック機能
talker_with_service_param.cppで実装

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Cartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMCartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAM
 
四脚ロボットによる つくばチャレンジへの取り組み
四脚ロボットによるつくばチャレンジへの取り組み四脚ロボットによるつくばチャレンジへの取り組み
四脚ロボットによる つくばチャレンジへの取り組み
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 
ORB-SLAMの手法解説
ORB-SLAMの手法解説ORB-SLAMの手法解説
ORB-SLAMの手法解説
 
ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築
 
20190307 visualslam summary
20190307 visualslam summary20190307 visualslam summary
20190307 visualslam summary
 
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
 
ROSによる今後のロボティクスのあり方
ROSによる今後のロボティクスのあり方ROSによる今後のロボティクスのあり方
ROSによる今後のロボティクスのあり方
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
 
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
 
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージmcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
 
Moveitを使ったアプリケーションの紹介
Moveitを使ったアプリケーションの紹介Moveitを使ったアプリケーションの紹介
Moveitを使ったアプリケーションの紹介
 
LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料
 
20180424 orb slam
20180424 orb slam20180424 orb slam
20180424 orb slam
 
G2o
G2oG2o
G2o
 
NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部
 
ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例
 
Open3DでSLAM入門 PyCon Kyushu 2018
Open3DでSLAM入門 PyCon Kyushu 2018Open3DでSLAM入門 PyCon Kyushu 2018
Open3DでSLAM入門 PyCon Kyushu 2018
 
WindowsではじめるROSプログラミング
WindowsではじめるROSプログラミングWindowsではじめるROSプログラミング
WindowsではじめるROSプログラミング
 
つくばチャレンジ2019技術調査報告
つくばチャレンジ2019技術調査報告つくばチャレンジ2019技術調査報告
つくばチャレンジ2019技術調査報告
 

Semelhante a 03 第3.6節-第3.8節 ROS2の基本機能(2/2)

High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
Takuma Usui
 
ZytleBot: 自律移動ロボットへのFPGA活用のすゝめとROS 2移行への道
ZytleBot: 自律移動ロボットへのFPGA活用のすゝめとROS 2移行への道ZytleBot: 自律移動ロボットへのFPGA活用のすゝめとROS 2移行への道
ZytleBot: 自律移動ロボットへのFPGA活用のすゝめとROS 2移行への道
Tamtlebot
 

Semelhante a 03 第3.6節-第3.8節 ROS2の基本機能(2/2) (20)

High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
 
Introduction of FPGA
Introduction of FPGAIntroduction of FPGA
Introduction of FPGA
 
ZytleBot: 自律移動ロボットへのFPGA活用のすゝめとROS 2移行への道
ZytleBot: 自律移動ロボットへのFPGA活用のすゝめとROS 2移行への道ZytleBot: 自律移動ロボットへのFPGA活用のすゝめとROS 2移行への道
ZytleBot: 自律移動ロボットへのFPGA活用のすゝめとROS 2移行への道
 
2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf
 
Imaocande LT
Imaocande LTImaocande LT
Imaocande LT
 
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
 
SORACOM Technology Camp 2018 アドバンストラック2 | 売れば売るほど大変"を防ぐ!「IoT デバイス初期設定の工数削減」手法
SORACOM Technology Camp 2018 アドバンストラック2 | 売れば売るほど大変"を防ぐ!「IoT デバイス初期設定の工数削減」手法SORACOM Technology Camp 2018 アドバンストラック2 | 売れば売るほど大変"を防ぐ!「IoT デバイス初期設定の工数削減」手法
SORACOM Technology Camp 2018 アドバンストラック2 | 売れば売るほど大変"を防ぐ!「IoT デバイス初期設定の工数削減」手法
 
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォーム
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォームZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォーム
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォーム
 
SORACOM UG Explorer 2018 | SORACOM セッションへようこそ!
SORACOM UG Explorer 2018 | SORACOM セッションへようこそ!SORACOM UG Explorer 2018 | SORACOM セッションへようこそ!
SORACOM UG Explorer 2018 | SORACOM セッションへようこそ!
 
ROBOMECH2021 RTMオンライン講習会 第1部
ROBOMECH2021 RTMオンライン講習会 第1部ROBOMECH2021 RTMオンライン講習会 第1部
ROBOMECH2021 RTMオンライン講習会 第1部
 
SORACOM Conference "Discovery" 2018 | F2. SORACOMサービスを利用したIoTアプリケーションのクラウド連携
SORACOM Conference "Discovery" 2018 | F2. SORACOMサービスを利用したIoTアプリケーションのクラウド連携SORACOM Conference "Discovery" 2018 | F2. SORACOMサービスを利用したIoTアプリケーションのクラウド連携
SORACOM Conference "Discovery" 2018 | F2. SORACOMサービスを利用したIoTアプリケーションのクラウド連携
 
SORACOM UG Shikoku #2 in 高知 | SORACOM 紹介 & Updates at ITPro Expo
SORACOM UG Shikoku #2 in 高知 | SORACOM 紹介 & Updates at ITPro ExpoSORACOM UG Shikoku #2 in 高知 | SORACOM 紹介 & Updates at ITPro Expo
SORACOM UG Shikoku #2 in 高知 | SORACOM 紹介 & Updates at ITPro Expo
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
SORACOM Conference Discovery 2017 | E2. IoTデバイス・デザインパターン ベストプラクティス
SORACOM Conference Discovery 2017 | E2. IoTデバイス・デザインパターン ベストプラクティスSORACOM Conference Discovery 2017 | E2. IoTデバイス・デザインパターン ベストプラクティス
SORACOM Conference Discovery 2017 | E2. IoTデバイス・デザインパターン ベストプラクティス
 
Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法
Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法
Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法
 
SORACOM Conference "Discovery" 2018 | B3. IoT活用のはじめ方 〜IoTシステムを迅速に構築する手法
SORACOM Conference "Discovery" 2018 | B3. IoT活用のはじめ方 〜IoTシステムを迅速に構築する手法SORACOM Conference "Discovery" 2018 | B3. IoT活用のはじめ方 〜IoTシステムを迅速に構築する手法
SORACOM Conference "Discovery" 2018 | B3. IoT活用のはじめ方 〜IoTシステムを迅速に構築する手法
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF
 
悪性Botnet包囲網のBotによるWannaCryのようなマルウェアの活動検知の試み
悪性Botnet包囲網のBotによるWannaCryのようなマルウェアの活動検知の試み悪性Botnet包囲網のBotによるWannaCryのようなマルウェアの活動検知の試み
悪性Botnet包囲網のBotによるWannaCryのようなマルウェアの活動検知の試み
 
ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部
 
IEICE technical report (RECONF), January 2015.
IEICE technical report (RECONF), January 2015.IEICE technical report (RECONF), January 2015.
IEICE technical report (RECONF), January 2015.
 

Mais de Mori Ken

Mais de Mori Ken (7)

20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた
20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた
20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた
 
bloom ではじめる自作 ROS パッケージのリリース
bloom ではじめる自作 ROS パッケージのリリースbloom ではじめる自作 ROS パッケージのリリース
bloom ではじめる自作 ROS パッケージのリリース
 
ROS Kyushu User Group の発足
ROS Kyushu User Group の発足ROS Kyushu User Group の発足
ROS Kyushu User Group の発足
 
08 第6.6節-第6.9節 Roomba用ROS1ドライバのROS2移行(2/2)
08 第6.6節-第6.9節 Roomba用ROS1ドライバのROS2移行(2/2)08 第6.6節-第6.9節 Roomba用ROS1ドライバのROS2移行(2/2)
08 第6.6節-第6.9節 Roomba用ROS1ドライバのROS2移行(2/2)
 
07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)
07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)
07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)
 
05 第4.4節-第4.8節 ROS2の応用機能(2/2)
05 第4.4節-第4.8節 ROS2の応用機能(2/2)05 第4.4節-第4.8節 ROS2の応用機能(2/2)
05 第4.4節-第4.8節 ROS2の応用機能(2/2)
 
01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉
01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉
01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉
 

03 第3.6節-第3.8節 ROS2の基本機能(2/2)