当前位置: 首页 > news >正文

ROS2学习笔记|创建工作空间并打印文件内容

一,创建 ROS 2 工作空间 

  1. 创建工作空间目录及src子目录:
    mkdir -p ~/ros2_ws/src
    cd ~/ros2_ws

    解释:mkdir -p命令用于创建目录,如果目录已存在则不报错。这里创建了名为ros2_ws的工作空间目录,并进入该目录,src目录用于存放功能包源代码。

  2. 初始化工作空间(首次编译时会自动初始化)

    ​colcon build

    解释:colcon build命令用于编译工作空间,首次执行时会自动初始化工作空间,创建编译所需的文件和目录。编译完成后会生成build目录(存放中间编译文件)、install目录(存放安装后的文件,包括可执行文件、库文件等)和log目录(存放编译日志)。

  3. 设置工作空间环境变量:
    source install/setup.bash

    解释:该命令让系统识别工作空间中的功能包和节点等资源。为方便每次打开新终端自动设置,可将其添加到.bashrc文件:

    echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
    source ~/.bashrc

 二、创建功能包 

  1. 进入src目录:
    cd ~/ros2_ws/src
  2. 创建 Python 功能包:
    ros2 pkg create --build-type ament_python demo_python_topic --dependencies rclpy

    解释:ros2 pkg create用于创建功能包,--build-type ament_python指定使用 Python 构建类型,demo_python_topic是功能包名称,--dependencies rclpy表示该功能包依赖 ROS 2 的 Python 客户端库rclpy

  3. 目录结构说明:创建完成后,src目录下会生成demo_python_topic功能包目录,包含以下重要文件:package.xml:记录功能包的元信息,如名称、版本、依赖等。setup.py:用于配置功能包的构建和安装,包括定义可执行文件的入口点等。demo_python_topic目录:存放 Python 源代码文件。

三、编写代码实现文件内容打印

    进入功能包的 Python 代码目录

    cd ~/ros2_ws/src/demo_python_topic/demo_python_topic
    1. 创建 Python 脚本文件(如novel_pub_node.py),内容如下:
      import rclpy
      from rclpy.node import Node
      import osclass NovelPubNode(Node):def __init__(self, node_name):super().__init__(node_name)self.get_logger().info(f'{node_name},启动!')def print_novel_from_file(self):# 直接指定工作空间根目录workspace_dir = '/home/elf/chapt3/topic_ws'file_path = os.path.join(workspace_dir, 'novel1.txt')self.get_logger().info(f"尝试打开文件: {file_path}")try:with open(file_path, 'r', encoding='utf-8') as file:content = file.read()self.get_logger().info('开始打印小说内容:')self.get_logger().info(content)except FileNotFoundError:self.get_logger().error('未找到 novel1.txt 文件,请检查文件是否存在。')except Exception as e:self.get_logger().error(f'读取文件时出现错误:{e}')def main():rclpy.init()node = NovelPubNode('novel_pub')node.print_novel_from_file()# 打印完文件内容后,手动销毁节点并关闭rclpynode.destroy_node()rclpy.shutdown()if __name__ == "__main__":main()

      解释:导入rclpy库用于 ROS 2 Python 开发,Node类用于创建节点,os库用于文件路径操作。 NovelPubNode类继承自Node,在构造函数中初始化节点并输出启动信息。print_novel_from_file方法用于读取指定文件内容,其中workspace_dir需根据实际工作空间路径设置,os.path.join用于拼接路径。通过try-except捕获文件读取过程中的异常。main函数初始化 ROS 2,创建节点实例,调用文件读取方法,最后销毁节点并关闭 ROS 2 环境。

    2. 赋予脚本可执行权限:
      chmod +x novel_pub_node.py

      解释:该命令为novel_pub_node.py脚本添加可执行权限,确保 ROS 2 能运行该脚本。

    四、配置setup.py文件

    1. 打开~/ros2_ws/src/demo_python_topic/setup.py文件,在entry_points部分添加以下内容:

      'console_scripts': ['novel_pub_node = demo_python_topic.novel_pub_node:main',
      ],

      解释:console_scripts用于定义命令行可执行脚本,novel_pub_node是运行节点时使用的名称,demo_python_topic.novel_pub_node指定功能包和脚本文件名(不含.py后缀),:main表示脚本中的主函数。

    五、编译工作空间

    cd ~/ros2_ws
    colcon build

    解释:重新编译工作空间,使新添加或修改的代码生效。编译过程中会根据setup.pypackage.xml文件配置生成可执行文件等。 

    六、运行节点

    1. 确保已设置工作空间环境变量
      source install/setup.bash

      运行节点

      ros2 run demo_python_topic novel_pub_node

      解释:ros2 run命令用于运行 ROS 2 节点,demo_python_topic是功能包名称,novel_pub_node是在setup.py中配置的节点名称。运行后,节点将读取并打印novel1.txt文件内容。

       

      如果在运行过程中遇到问题,可参考以下常见问题排查:

    2. 未找到可执行文件:检查setup.py文件中entry_points配置是否正确,脚本是否有可执行权限,重新编译工作空间。
    3. 文件未找到错误:确认文件路径是否正确,文件是否存在,文件权限是否可读。
    4. 环境变量问题:确保 ROS 2 和工作空间的环境变量已正确设置,可尝试重新设置或添加到.bashrc文件

    相关文章:

  1. 2025年最新嵌入式开发STM32单片机详细教程(更新中)
  2. Linux 进程间通信(IPC)详解
  3. thonny提示自动补全功能
  4. 【AI面试准备】NLP解析API文档生成测试脚本
  5. AWS在跨境电商中的全场景实践与未来生态构建
  6. GoFrame 奉孝学习笔记
  7. PyTorch_指定运算设备 (包含安装 GPU 的 PyTorch)
  8. HybridCLR 详解:Unity 全平台原生 C# 热更新方案
  9. 【言语理解】中心理解题目之结构分析
  10. 安卓基础(MediaProjection)
  11. 基于Springboot旅游网站系统【附源码】
  12. rails 8 CSS不起效问题解决
  13. 华为云Flexus+DeepSeek征文|DeepSeek-V3商用服务开通教程
  14. GCD 深入解析:从使用到底层实现
  15. 数据库=====
  16. 数字信号处理学习笔记--Chapter 0 数字信号处理概述
  17. 【深度学习】典型的 CNN 网络
  18. 力扣-字符串-165 比较版本号
  19. P4552 [Poetize6] IncDec Sequence 题解
  20. 玩转Docker | 使用Docker部署AI证件照工具
  21. 公积金利率降至历史低位,百万房贷30年省5万
  22. 一网红被指涉脱衣殴打霸凌事件,沈阳警方:刑拘1人,处罚5人
  23. 呼和浩特65户业主被一房两卖,十年诉讼却难胜
  24. 1101名优秀运动员拟保送,全红婵、黄雨婷、盛李豪在列
  25. “鱼米之乡”江苏兴化的产业哲学:以融合与创新重构价值链条
  26. 特朗普考虑任命副幕僚长米勒任国安顾问,曾策划驱逐移民行动