Mais conteúdo relacionado
Semelhante a 03 第3.6節-第3.8節 ROS2の基本機能(2/2) (20)
03 第3.6節-第3.8節 ROS2の基本機能(2/2)
- 2. 自己紹介
• 名前:前田 修一(Shuichi Maeda )
• 出身:福岡市
• 所属:九州工業大学工学 M1 西田研究室
• 研究:産業用ロボットの軌道生成,Visual SLAM
• 趣味:釣り,ランニング
• 最近の興味:FPGA
- 3. アウトライン
• 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 パラメータ設定イベントのコールバック
- 4. 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と同じ
- 5. 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の依存関係タグ
- 7. 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回送信するノード
クラスのコンストラクタの定義
パブリッシャの初期化
- 14. 3-7 サービス
3-7-0 ROS1とROS2の違い
• 同期通信のみ
• リクエストした結果が返って
くるまで待つ
• その処理の間はスレッドの動
きは止まっている
ROS1のケース
• 同期通信+非同期通信
• 結果を得るまで待つメソッド
を別途呼び出す
ROS2のケース
• ROSのメッセージ通信のひとつ
• 遠隔ノードが持つ関数を呼び出す機能
- 17. 3-8 パラメータ
3-8-0 ROS1とROS2での違い
• 動的なパラメータ変更に対応
Dynamic_reconfigureが不要
• パラメータサーバが各ノードに
1つずつ
• メッセージ通信の一つ
• 単純なデータ構造の読み書きに利用
• ノードの起動時に読み込み
静的なパラメータの読み込みが基本
• 動的なパラメータ読み込みには
Dynamic_reconfigureなどが必要
• パラメータサーバはroscore内に1つ
ROS1のケース ROS2のケース
- 18. 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