本文最后更新于:2022年2月14日
最近频繁把包迁移至ROS2,借此机会记录下。
照着官方例程改的这3个文件就可以了。
package.xml
重点在catkin修改为ament_cmake,roscpp修改为rclcpp,将run_depend部分改为export部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <package format="2"> <name>talker</name> <version>0.0.0</version> <description>talker</description> <maintainer email="gerkey@osrfoundation.org">Brian Gerkey</maintainer> <license>Apache License 2.0</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<depend>rclcpp</depend> <depend>std_msgs</depend> <export> <build_type>ament_cmake</build_type> </export> </package>
|
CMakeLists.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #cmake_minimum_required(VERSION 2.8.3) cmake_minimum_required(VERSION 3.5) project(talker) 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(catkin REQUIRED COMPONENTS roscpp std_msgs) find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) #catkin_package() #include_directories(${catkin_INCLUDE_DIRS}) include_directories(include) add_executable(talker talker.cpp) #target_link_libraries(talker ${catkin_LIBRARIES}) ament_target_dependencies(talker rclcpp std_msgs) #install(TARGETS talker # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) install(TARGETS talker DESTINATION lib/${PROJECT_NAME}) install(DIRECTORY include/ DESTINATION include) ament_export_include_directories(include) ament_export_dependencies(std_msgs) ament_package()
|
scr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <sstream>
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp" int main(int argc, char **argv) {
rclcpp::init(argc, argv); auto node = rclcpp::Node::make_shared("talker");
auto chatter_pub = node->create_publisher<std_msgs::msg::String>("chatter", 1000); rclcpp::Rate loop_rate(10); int count = 0;
std_msgs::msg::String msg;
while (rclcpp::ok()) { std::stringstream ss; ss << "hello world " << count++; msg.data = ss.str();
RCLCPP_INFO(node->get_logger(), "%s\n", msg.data.c_str()); chatter_pub->publish(msg);
rclcpp::spin_some(node); loop_rate.sleep(); } return 0; }
|
参考资料