ros2-node
python
import rclpy
from rclpy.node import Nodedef main():rclpy.init() # 初始化node = Node("python_node")node.get_logger().info('你好 python 节点')rclpy.spin(node=node)rclpy.shutdown()if __name__=="__main__":main()
报错:
(base) yfzx@yfzx:~/project/learn/ros2fish$ python node.py
Traceback (most recent call last):File "/home/yfzx/project/learn/ros2fish/node.py", line 2, in <module>from rclpy.node import NodeFile "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/node.py", line 42, in <module>from rclpy.client import ClientFile "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/client.py", line 22, in <module>from rclpy.impl.implementation_singleton import rclpy_implementation as _rclpyFile "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/impl/implementation_singleton.py", line 31, in <module>rclpy_implementation = _import('._rclpy')File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/impl/__init__.py", line 28, in _importreturn importlib.import_module(name, package='rclpy')File "/home/yfzx/miniconda3/lib/python3.10/importlib/__init__.py", line 126, in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named 'rclpy._rclpy'
The C extension '/opt/ros/foxy/lib/python3.8/site-packages/rclpy/_rclpy.cpython-310-x86_64-linux-gnu.so' isn't present on the system. Please refer to 'https://index.ros.org/doc/ros2/Troubleshooting/Installation-Troubleshooting/#import-failing-without-library-present-on-the-system' for possible solutions
解决:foxy版本ros2支持python3.8,此处使用3.10,因此报错,新建conda环境 python=3.8,运行成功
通过ros2 node list 查看节点,运行成功
c++
#include "iostream"
#include "rclcpp/rclcpp.hpp"int main(int argc, char** argv){std::cout<<"参数数量:\t"<<argc<<"\n";std::cout<<"程序名字:\t"<<argv[0]<<"\n";rclcpp::init(argc, argv);auto node = std::make_shared<rclcpp::Node>("cpp_node"); // 使用make_shared创建智能指针RCLCPP_INFO(node->get_logger(), "你好 cpp节点");rclcpp::spin(node);rclcpp::shutdown();return 0;
}
cmakelists.txt
cmake_minimum_required(VERSION 3.17)
project(ros2fosh)set(CMAKE_CXX_STANDARD 20)find_package(rclcpp REQUIRED) # 直接查找到对应的头文件和库文件, REQUIRED 表示这个库为必须
message(STATUS ${rclcpp_INCLUDE_DIRS}) # 头文件 及 rclcpp依赖的头文件
message(STATUS ${rclcpp_LIBRARIES}) # 库文件 及rclcpp依赖的库文件add_executable(node_cpp node_cpp.cpp)
target_include_directories(node_cpp PUBLIC ${rclcpp_INCLUDE_DIRS}) # 头文件包含
target_link_libraries(node_cpp ${rclcpp_LIBRARIES}) # 库文件链接