Hello, ROS 예제 코드

|

패키지 구성

ROS 2.0의 각 노드의 패키지 구성은 다음과 같습니다.

  • package.xml
  • CMakeLists.txt
  • 소스 코드들

package.xml은 안드로이드의 manifest.xml과 같은 역할을 하며, 노드의 이름이나 라이센스, 설명 등의 내용이 들어있습니다.

CMakeLists.txt는 ROS2 만의 독특한 명령어가 조금 들어있긴 하지만 기본적으로 일반적인 CMakeLists 파일과 거의 유사합니다.

‘Hello, ROS’의 예제 코드는 다음과 같습니다. ROS적인 요소는 아예 들어있지 않지만 ament를 이용해서 빌드를 할 수 있다는 데 의의를 가질 수 있을 것 같습니다.


package.xml

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format2.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="2">
  <name>hello_ros</name>
  <version>0.4.0</version>
  <description>Snow ROS Message Publisher using class</description>
  <maintainer email="snowdeer0314@gmail.com">snowdeer</maintainer>
  <license>Apache License 2.0</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <build_depend>rclcpp</build_depend>

  <exec_depend>rclcpp</exec_depend>
  
  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>


CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(snow_publisher)

# Default to C++14
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)
find_package(std_msgs REQUIRED)

add_executable(${PROJECT_NAME} main.cpp)
ament_target_dependencies(${PROJECT_NAME} rclcpp std_msgs)

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

ament_package()


main.cpp

#include <cstdio>

using namespace std;

int main(int argc, char * argv[]) {
  
  printf("Hello ROS. I am snowdeer.\n");

  return 0;
}