rclcpp 비교
같은 talker를 C++로 쓰면 무엇이 달라질까?
같은 바탕
rclcpp도 같은 rcl 위에 섭니다
C++ 노드는 rclcpp(ROS Client Library for C++)로 짭니다. rclpy와 rclcpp는 같은 rcl 위에 서 있습니다. 그래서 파이썬 talker와 C++ listener도 같은 토픽으로 그대로 이야기합니다.
공식 튜토리얼의 C++ talker를 기준으로 비교합니다. 클래스와 파일 이름은 줄였습니다.
main
init, spin, shutdown은 그대로
순서는 같고 이름만 rclcpp::로 바뀝니다. C++에서는 노드를 std::make_shared로 만들어 공유 포인터로 spin에 넘깁니다. 문장 끝마다 세미콜론이 붙습니다.
퍼블리셔
타입은 꺾쇠 안에 적습니다
파이썬은 메시지 타입을 인자로 넘기지만, C++은 꺾쇠 <> 안에 템플릿 인자로 적습니다. 타입 이름도 std_msgs::msg::String처럼 다 씁니다. self 대신 this->를 씁니다.
C++에서는 publisher_를 클래스 안에 타입과 함께 미리 선언해 둡니다.
타이머와 로그
콜백은 흔히 람다로 씁니다
C++ 튜토리얼은 콜백을 람다(lambda), 곧 그 자리에서 짓는 이름 없는 함수로 씁니다. 타이머는 create_wall_timer에 500ms처럼 단위를 붙여 넘기고, 로그는 RCLCPP_INFO 매크로로 남깁니다.
500ms라고 쓸 수 있는 것은 파일 위의 using namespace std::chrono_literals; 덕분입니다.
빌드
C++는 컴파일을 거칩니다
C++ 노드는 ament_cmake 패키지에 넣고(5강 9편), CMakeLists.txt에 실행 파일과 의존성을 적은 뒤 install(TARGETS ...)로 설치합니다. 코드를 고칠 때마다 다시 컴파일해야 하며, --symlink-install로도 건너뛸 수 없습니다.
package.xml에는 <depend>rclcpp</depend>와 <depend>std_msgs</depend>를 적습니다.
언제 무엇을
빨리 짜려면 파이썬, 빨리 돌려면 C++
둘은 같은 토픽으로 이야기하니 한 시스템 안에 섞어 써도 됩니다. 빠른 주기로 도는 제어나 센서 드라이버는 C++로, 빠르게 시험하고 고칠 노드는 파이썬으로 짜는 경우가 많습니다. 이 강의는 계속 파이썬으로 갑니다.
다음 강