ROS2プログラミング入門 #2 Hello world
この記事では、ROS2プログラミングで Hello world
する流れを紹介します。
準備
Foxy Fitzroyの Configuring your ROS 2 environment を確認しつつ、ROS2の環境を準備します。
はじめに、次の一行を ~/.bashrc
の最後に追記してターミナルを再起動します。[1]
source /opt/ros/foxy/setup.bash
そしてターミナルで printenv | grep -i ROS
を実行すると、次のように表示されるはずです。
ROS_VERSION=2
ROS_PYTHON_VERSION=3
中略
ROS_DISTRO=foxy
最低限の準備としてはこれで良いのですが、さらに ros2
コマンドのタブキー補完を助けてくれるパッケージもインストールしておきます。ここでもターミナルを再起動します。
sudo apt install python3-argcomplete
パッケージを作ってビルドする
ROS2のパッケージは、他のプログラミング環境でいうプロジェクトみたいなものだと思います。
準備もできましたし Creating your first ROS 2 package を参考に ros2
コマンドでパッケージを作成し、ビルドしてみます。
パッケージの作成
コマンドは次のような感じです。パッケージは ~/dev_ws/src/
に作成されます。
mkdir -p ~/dev_ws/src
cd ~/dev_ws/src/
ros2 pkg create --build-type ament_cmake my_first_package
パッケージのビルド
ROS2では colcon
コマンドでビルドを実行します。
colcon
コマンドがインストールされていない場合は、次のようにインストールします。
sudo apt install python3-colcon-common-extensions
パッケージをビルドする時は ~/dev_ws
ディレクトリで colcon build
を実行します。次のように実行すると楽かも知れません。
(cd ~/dev_ws/ && colcon build)
ちなみに、ビルドに成功するとトップバーに通知が出るみたいです。
ビルドに成功してトップバーに通知が出る様子
機能は特にありませんけれど、ここまでで、ひとまずパッケージを作成してビルドできることが確認できました。
Hello world
それではいよいよ Hello world
に取り組みましょう。
hello.cpp
まず、パッケージルートの src
ディレクトリに、次の内容で hello.cpp
を作ります。
#include "rclcpp/rclcpp.hpp"
int main(int argc, char** argv) {
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared("hello");
RCLCPP_INFO(node->get_logger(), "Hello, ROS2 world!");
rclcpp::shutdown();
return 0;
}
CMakeLists.txt
続けて、パッケージルートの CMakeLists.txt
を編集します。
なお ros2 pkg create
で生成した元々の CMakeLists.txt
にはコメントがついていますが、次に示すのはコメントを消したものです。
cmake_minimum_required(VERSION 3.5)
project(my_first_package)
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
add_executable(hello src/hello.cpp)
ament_target_dependencies(hello rclcpp)
install(TARGETS hello DESTINATION lib/${PROJECT_NAME})
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_package()
変更内容としては次の行を追加しました。
+ find_package(rclcpp REQUIRED)
+
+ add_executable(hello src/hello.cpp)
+ ament_target_dependencies(hello rclcpp)
+ install(TARGETS hello DESTINATION lib/${PROJECT_NAME})
これでソースファイル hello.cpp
から実行ファイル hello
がビルドできるようになります。
動作確認
(cd ~/dev_ws/ && colcon build)
を実行してビルドしましょう。
なお hello
を実行する前に ~/dev_ws/
で次のコマンドを実行しておく必要があります。
. install/setup.bash
最後に、次のコマンドを実行して
ros2 run my_first_package hello
下記のような感じで表示されれば Hello world
は成功です。
helloを実行した様子
おわりに
ROS2プログラミングで Hello world
する流れを紹介しました。どなたかのお役に立てば幸いです。
-
あるいは
source ~/.bashrc
でも設定変更は反映されると思います。 ↩︎
Discussion