點(diǎn)01)
一、Python 節(jié)點(diǎn)運(yùn)行命令python3 ros2_python_node.py 運(yùn)行 Python 節(jié)點(diǎn)腳本ros2 node list 查看節(jié)點(diǎn)列表代碼骨架import rclpy 導(dǎo)入 ROS2 Python 客戶端庫(kù)from rclpy.node import Node 導(dǎo)入 Node 類rclpy.init() 初始化 ROS2node Node(python_node) 創(chuàng)建節(jié)點(diǎn)node.get_logger().info(你好python節(jié)點(diǎn)) 輸出日志信息rclpy.spin(node) 持續(xù)運(yùn)行節(jié)點(diǎn)rclpy.shutdown() 關(guān)閉 ROS2日志格式環(huán)境變量export RCUTILS_CONSOLE_OUTPUT_FORMAT[{function_name}:{line_number}]:{message} 設(shè)置日志輸出格式RCUTILS_CONSOLE_OUTPUT_FORMAT rcutils 提供的日志輸出模板變量{function_name} 函數(shù)名占位符{line_number} 行號(hào)占位符{message} 消息內(nèi)容占位符二、C 節(jié)點(diǎn)代碼骨架#include rclcpp/rclcpp.hpp 導(dǎo)入 ROS2 C 客戶端庫(kù)rclcpp::init(argc, argv) 初始化 ROS2std::make_sharedrclcpp::Node(cpp_node) 創(chuàng)建節(jié)點(diǎn)RCLCPP_INFO(node-get_logger(), Hello c!) 輸出日志信息rclcpp::spin(node) 持續(xù)運(yùn)行節(jié)點(diǎn)rclcpp::shutdown() 關(guān)閉 ROS2CMakeLists.txt修正版cmake_minimum_required(VERSION 3.8) 指定 CMake 最低版本project(ros2_cpp_node) 定義項(xiàng)目名稱find_package(rclcpp REQUIRED) 查找 rclcpp 依賴包add_executable(ros2_cpp_node ros2_cpp_node.cpp) 生成可執(zhí)行文件target_include_directories(ros2_cpp_node PUBLIC ${rclcpp_INCLUDE_DIRS}) 配置頭文件路徑target_link_libraries(ros2_cpp_node ${rclcpp_LIBRARIES}) 鏈接庫(kù)編譯與運(yùn)行cmake . 生成 Makefilemake 編譯cmake . | grep rclcpp 過濾 rclcpp 相關(guān)輸出ros2 node info /cpp_node 查看節(jié)點(diǎn)詳細(xì)信息三、關(guān)鍵要點(diǎn)節(jié)點(diǎn)三件套 init → 創(chuàng)建 Node → spin → shutdownC 與 Python 差異 C 需 CMake 配置頭文件路徑和鏈接庫(kù)易錯(cuò)點(diǎn) CMake 中鏈接庫(kù)用 target_link_libraries不是 target_link_directories調(diào)試工具 ros2 node list / ros2 node info