7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NodeOptionsによるROS2ノードの初期化について

Last updated at Posted at 2019-06-14

ROS2関係トップページへ

Dashing Diademataからの初期化方法

公式のRoadmapにあるようにDashing Diademataからノードを初期化方法が変わった(まだ前の方法も使えるけど).
Crystal ClemmysでのROS2ではノードの初期化として以下の二種類のコンストラクタが用意されていた(公式apiより).

c++の場合
rclcpp::Node::Node(
  const std::string & node_name, 
  const std::string & name_space="", 
  bool use_intra_process_comms = false)

rclcpp::Node::Node(
  const std::string & node_name,
  const std::string & name_space="",
  rclcpp::Context::SharedPtr context,
  const std::vector< std::string > & arguments,
  const std::vector< Parameter > & initial_parameters,
  bool use_global_arguments = true,
  bool use_intra_process_comms = false,
  bool start_parameter_services = true)

これがnode_name(ノードの名前)とname_space(ノードの名前空間)以外全部+αをもつNodeOptionsクラスで初期化できるようになった(公式apiより).

新方法
rclcpp::Node::Node(
  const std::string & node_name,
  const NodeOptions & options = NodeOptions())

rclcpp::Node::Node(
  const std::string & node_name,
  const std::string & name_space,
  const NodeOptions & options = NodeOptions())

ちなみにNodeOptionsのところに引数を与えないとNodeOptions()によってデフォルト値を持ったものが自動的に渡される.
NodeOptionsの詳しい情報は公式のapiから.

推奨されるクラスのコンストラクタ

推奨されるコンストラクタは以下のようになる.
ちなみに,ここでの考え方としては

  • ノードの名前は固定
    • ここではhoge_nodeとしている
  • 同一ノードを複数起動させる場合,名前空間(name_space)で区別

としている.
ノードの名前を都度変えたい場合は,node_nameに関してもコンストラクタに記載することになる.

  • クラス名
    • Hoge
hoge.hpp
class Hoge : public rclcpp::Node{
...
public:
  Hoge(const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
  Hoge(const std::string & name_space, const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
};
hoge.cpp
...
Hoge::Hoge(const rclcpp::NodeOptions & options = rclcpp::NodeOptions()) : Hoge("", options){}

Hoge::Hoge(const std::string & name_space, const rclcpp::NodeOptions & options = rclcpp::NodeOptions())
: Node("hoge_node", name_space, options){
// コンストラクタの処理
}

これを使う場合には以下のようになる(名前空間を使用していない場合).

NodeOptionsを使用しない場合
#include <rclcpp/rclcpp.hpp>
#include "hoge.hpp"

int main(int argc, char * argv[]){
...
  auto node = std::make_shared<Hoge>();
...
}
NodeOptionsを使用する場合
#include <rclcpp/rclcpp.hpp>
#include "hoge.hpp"

int main(int argc, char * argv[]){
...
  std::vector<rclcpp::Parameter> params = { rclcpp::Parameter("use_sim_time", true) };
  rclcpp::NodeOptions node_options;
  node_options.parameter_overrides(params);
  auto node = std::make_shared<Hoge>(options);
...
}

参考

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?