[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の記述

パッケージディレクトリ直下の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コマンドから生成した実行ファイルを指定できるようにするためinstallTARGETに追記します.

install(TARGETS
  simple_node
  DESTINATION lib/${PROJECT_NAME}
)

package.xmlの記述

パッケージディレクトリ直下の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

参考サイト

⚠️ **GitHub.com Fallback** ⚠️