0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ROS2のC++ノードの最小構成

Posted at

概要

ROS2でのC++ノードの最小構成を備忘録的に残しておきます。

ワークスペースの構成とファイルの中身

ワークスペース(ros2_workspace)を作成してその中にパッケージ1つ(my_package)とノード1つ(my_node)を作成します。

フォルダ構成

ros2_workspace
└── src/ 
    └── my_package/
        ├── include/
        │   └── my_package/
        │       └── my_node.hpp
        ├── src/
        │   └── my_node.cpp
        ├── CMakeLists.txt
        └── package.xml

my_node.hpp

#pragma once

#include "rclcpp/rclcpp.hpp"

namespace my_package
{

class MyNode : public rclcpp::Node
{
public:
  MyNode();
};

}  // namespace my_package

my_node.cpp

#include "my_package/my_node.hpp"

namespace my_package
{

MyNode::MyNode()
: Node("my_node")
{
  RCLCPP_INFO(this->get_logger(), "MyNode has been started");
}
}  // namespace my_package

int main(int argc, char** argv)
{
  rclcpp::init(argc, argv);
  rclcpp::spin(std::make_shared<my_package::MyNode>());
  rclcpp::shutdown();
  return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(my_package)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)

include_directories(include)

add_executable(my_node src/my_node.cpp)
ament_target_dependencies(my_node rclcpp)

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

ament_package()

package.xml

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>my_package</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="email@email.com">my_pc</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <depend>rclcpp</depend>

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

ビルドと実行

以下のコマンドをワークスペース直下で順に実行すれば、MyNode has been startedのメッセージが表示されるはずです。

colcon build
source install/setup.bash
ros2 run my_package my_node

まとめ

今回はROS2でのC++ノードの最小構成を備忘録的に書いてみました。
僕自身も勉強途中なため、ベストプラクティスでないと思いますが、誰かの役に立てば幸いです。
また、他に良い方法を知っている方がいれば、教えていただけると幸いです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?