节点文件
xxx.py
节点是ros中的最基本计算单元,作为一个独立的进程执行特定的任务。
rclpy是ros为python开发者提供的库(ros client library) 相应的还有rclcpp rcljava
《编写后保存并编译》
在home/worksapce/install/lear_node/lib/learning_node里面存放的就是编译后的可执行文件/节点
使用ros2 run ....的时候执行的就是该文件/节点
这意味着在你重新修改源代码文件后,需要重新在工作空间目录下编译,再ros2 run...
否则你就是运行的上一版本未修改的结点
《项目-识别苹果》
注意路径问题:使用pwd命令来查看当前所处路径,即print working directory的缩写
《项目-打开摄像头识别》
需要先连接摄像头 然后USB兼容性改成3.1
ros2 run 运行结点即可
《常用命令》
ros2 node list //查看当前运行的结点
ros2 node info /xxx结点名称 //查看当前运行结点的相关信息
描述文件
package.xml
安装
setup.py
有几个需要关注的 1.指定资源文件安装目录 2.指定程序的入口节点
Cmakelists.txt
本质上就是调用Cmake提供的函数或者命令来指挥Cmake行事
# 《基础设置组》
cmake_minimum_required(VERSION 3.8) # 指定 CMake 最低版本
project(my_ros2_package) # 指定 项目名称
set(CMAKE_CXX_STANDARD 17) # 设置 C++ 标准
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 《查找依赖组》
find_package(ament_cmake REQUIRED) # 统一依赖:构建系统
find_package(rclcpp REQUIRED) # 节点包依赖:ROS2库
find_package(rosidl_default_generators REQUIRED) # 接口包依赖:接口生成工具
find_package(pluginlib REQUIRED) # 插件包依赖:插件生成工具
find_package(nav2_core REQUIRED) # 插件包依赖:插件抽象基类
# 《接口生成组》
set(MSG_FILES "msg/MyMessage.msg")
set(SRV_FILES "srv/MyService.srv")
rosidl_generate_interfaces(${PROJECT_NAME} ${MSG_FILES} ${SRV_FILES} DEPENDENCIES builtin_interfaces)
# 《编译库源组》
add_library(my_plugin SHARED src/my_plugin.cpp src/plugin_utils.cpp) # 编译插件为动态库
target_include_directories(my_plugin PUBLIC include) # 为插件文件找头文件
add_executable(my_node src/my_node.cpp) # 可执行结点
target_include_directories(my_node PUBLIC include)
# 《链接库文件组》
target_link_libraries(my_plugin nav2_core::nav2_core pluginlib::pluginlib rclcpp::rclcpp )
target_link_libraries(my_node rclcpp::rclcpp my_plugin) # 链接插件库
target_link_libraries(my_node rclcpp::rclcpp) # 链接Ros2动态库
# 《插件注册组》
pluginlib_export_plugin_description_file(${PROJECT_NAME} plugins.xml)
# 《安装指定组》
install(TARGETS my_plugin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin)
install(DIRECTORY include/ DESTINATION include)
install(TARGETS my_node DESTINATION lib/${PROJECT_NAME})
# 《依赖导出组》
ament_export_dependencies(rclcpp pluginlib nav2_core) # 导出插件包的依赖
ament_export_include_directories(include) # 导出头文件路径
ament_export_dependencies(rosidl_default_runtime) # 导出接口依赖
ament_package() # 必须放在最后!
基础设置:查找依赖—>接口生成—>编译—>链接—>注册—>安装—>导出依赖