Hello, ROS 예제 코드
21 Dec 2017 | 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; }