ROS2 2 (Workspace, Package)

ROS2のTutorialsをやります。暫くはTutorialsそのままをやります。

ディレクトリ構成を理解します。この記事はC++を使います。

Creating a package

環境はUbuntu 22.04です。ROS2 Humbleです。

ディレクトリ構成

ホームディレクトリに移動します。


$ cd ~

ここでは作業ディレクトリ名をros2_studyとします。


$ mkdir ros2_study
$ cd ros2_study

workspaceを作成します。
colcon buildは必ずここで実行します。


$ mkdir hello_world_cpp_ws
$ cd hello_world_cpp_ws

workspaceの中にsrcディレクトリを作成してcleanに保ちましょう、とされています。


$ mkdir src
$ cd src

srcの下にpackageを作ります。
packageはROS2 codeの構成の単位との説明があります。
一般的にもROS2の場合にもsrcの隣りにはincludeなどのディレクトリを作ります。

ros2 pkg create

helloという名前のpackageを作ります。


$ ros2 pkg create hello --build-type ament_cmake --node-name hello_node

簡単なやつなら--node-name使うと便利だよ、と公式に書いてあります。

念の為、整理しておきます。

hello : package name
hello_node : node name

ディレクトリ構成を確認します。

  • ros2_study/
    • hello_world_cpp_ws/
      • src/
        • hello/
          • include/
            • hello/
          • src/
            • hello_node.cpp
          • CMakeLists.txt
          • package.xml

hello_node.cpp

viで確認します。


$ vi ~/ros2_study/hello_world_cpp_ws/src/hello/src/hello_node.cpp

hello_node.cpp

#include <cstdio>

int main(int argc, char ** argv)
{
  (void) argc;
  (void) argv;

  printf("hello world hello package\n");
  return 0;
}

CMakeLists.txt

生成されるCMakeLists.txtです。

CMakeLists.txt


cmake_minimum_required(VERSION 3.8)
project(hello)

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)
# uncomment the following section in order to fill in
# further dependencies manually.
# find_package( REQUIRED)

add_executable(hello_node src/hello_node.cpp)
target_include_directories(hello_node PUBLIC
  $
  $)
target_compile_features(hello_node PUBLIC c_std_99 cxx_std_17)  # Require C99 and C++17

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

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  # the following line skips the linter which checks for copyrights
  # comment the line when a copyright and license is added to all source files
  set(ament_cmake_copyright_FOUND TRUE)
  # the following line skips cpplint (only works in a git repo)
  # comment the line when this package is in a git repo and when
  # a copyright and license is added to all source files
  set(ament_cmake_cpplint_FOUND TRUE)
  ament_lint_auto_find_test_dependencies()
endif()

ament_package()

colcon build


$ cd ~/ros2_study/hello_world_cpp_ws

buildできる一覧を表示。


$ colcon list

$ colcon build --packages-select hello

ディレクトリ構成を確認します。

  • ros2_study/
    • hello_world_cpp_ws/
      • build/
      • install/
      • log/
      • src/
        • hello/
          • include/
            • hello/
          • src/
            • hello_node.cpp
          • CMakeLists.txt
          • package.xml

installの下のsetup.bashを読み込みます。


$ . install/setup.bash

ros2 run

実行します。


$ ros2 run hello hello_node

広告

IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』
さくらのレンタルサーバ
ムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト


ROS2 1 (Install ROS2)
ROS2 2 (Workspace, Package)
ROS2 3 (Topics (C++))
ROS2 4 (Creating custom srv file)
ROS2 5 (Services (C++))


«       »