[ROS2]何もしないノード - graspPlugin/wiki GitHub Wiki
クラスによるROS2風のノードを記述します.
今回は全体像を掴むため,何もしないノードを書いていきます.
- | version |
---|---|
Ubuntu | 20.04 |
ROS2 | Foxy |
パッケージディレクトリ内のsrc
ディレクトリに移動し,ソースファイルsimple_node.cpp
を作成します.
touch simple_node.cpp
simple_node.cpp
の内部に以下を記述します.
#include <rclcpp/rclcpp.hpp>
class SimpleNode : public rclcpp::Node {
public:
SimpleNode(std::string node_name)
: rclcpp::Node(node_name) {
RCLCPP_INFO(get_logger(), "constructor called");
}
~SimpleNode() {
RCLCPP_INFO(get_logger(), "deconstructor called");
}
};
int main(int argc, char* argv[]) {
rclcpp::init(argc, argv);
auto simple_node = std::make_shared<SimpleNode>("simple_node");
rclcpp::spin(simple_node);
rclcpp::shutdown();
return 0;
}
パッケージディレクトリ直下のCMakeLists.txt
を編集していきます.
デフォルトで記述されているfind_package(ament_cmake REQUIRED)
付近に以下を追記します.
find_package(rclcpp REQUIRED)
simple_node
という名前の実行ファイルを生成するように以下を追記します.
add_executable(simple_node src/simple_node.cpp)
ament_target_dependencies(simple_node rclcpp)
最後に端末上のros2
コマンドから生成した実行ファイルを指定できるようにするためinstall
のTARGET
に追記します.
install(TARGETS
simple_node
DESTINATION lib/${PROJECT_NAME}
)
パッケージディレクトリ直下のpackage.xml
を編集していきます.
デフォルトで記述されているtest_depend
タグ付近に以下を追記します.
<depend>rclcpp</depend>
ワークスペースディレクトリに移動しビルドを行います.
colcon build
ros2コマンドで実行ファイルを指定します.
ros2 run my_pkg hello_ros_world
実行時に文字列constructor called
が出力されます.
[INFO] [1677473814.984992281] [simple_node]: constructor called
また,Ctrl
+C
を押したときに文字列deconstructor called
が出力されて,ノードが終了します.
[INFO] [1677473816.331598644] [simple_node]: deconstructor called