ROS/ROS2工程中的路径管理

news2025/4/7 2:47:20

1 Launch文件访问yaml

ROS2中,launch文件可以用python编写,且后缀名为.launch.py,由于python比传统的xml更加灵活,因此,可以在launch文件中找到某个package的yaml。yaml通常存在package下面的config目录下,这是一个convention。

举例如下,使用了PathJoinSubstitution方法,将yaml的路径进行了拼接,有一点需要注意的是package的名称尽可能不要改变。这样对于launch文件,就只需要确保目录结构不变,无需修改具体路径名称。

由于FindPackageShare返回的是share下面的package路径,而不是src下package的目录,因此,在CMakeLists.txt中,需要增加:

install(DIRECTORY
  config
  DESTINATION share/${PROJECT_NAME}/
)

相当于把yaml从src复制了一份到install/share下面。
launch文件内容如下:


"""Launch lidar tracking demo"""

from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
import launch_ros.actions

from launch_ros.substitutions import FindPackageShare
from launch.substitutions import PathJoinSubstitution

def generate_launch_description():

   pcl_yaml_file = PathJoinSubstitution(
           [FindPackageShare("lidar_tracking"), "config", "pcl_and_feature_map.yaml"]
   )
   
   return LaunchDescription([
        launch_ros.actions.Node(
            package='lidar_tracking', executable='foxglove_translator', output='screen',
            ros_arguments=['--params-file', pcl_yaml_file]),
#        launch_ros.actions.Node(
#            package='lidar_tracking', executable='perception_node', output='screen',
#            ros_arguments=['--params-file', '/home/novauto/workspace/pcl_and_feature_map.yaml'])

    ])

2 yaml文件中存路径

  • 在ROS/ROS2中,使用参数服务器的方式读取,如用launch文件加载
  • 在非ROS/ROS2中,使用yaml的相关库函数对文件内容进行操作

2.1 不涉及大量类似内容

在YAML中写出绝对路径,更换设备时,进行修改,尽量不要在C++中进行拼接。

2.2 涉及大量类似内容

以NuScenes数据集为例,其目录结构如下图所示,有214个文件夹,编号从0到213
在这里插入图片描述

每个文件夹下面都有类似的内容,且其命名有明显的规则。

在这里插入图片描述
对于这类resource,由于其体积大(6.6GB),一般在设备上只会有一份,由不同算法工程所共享,这样最好是 在yaml文件里存储其最顶层目录,比如:

resource_dir: home/scarlett/bevdet_demo/resource/nuscenes-0103

然后在C++程序中使用for循环等方式拼接其具体图像或者bin文件的名称。
更换设备时,需要在yaml中进行修改。

3 不要在ROS/ROS2 源码中写相对路径

使用./或者…/是不被推荐的,因为ROS节点运行时应该是在install目录下,而./通常会用于访问src目录下的资源,除非这个资源也被install到了install目录,不然这种方式是无法打开对应文件的。总而言之,不推荐。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

30 KVM管理系统资源-CPU热插

文章目录 30 KVM管理系统资源-CPU热插30.1 概述30.2 约束限制30.3 操作步骤30.3.1 配置虚拟机XML30.3.2 热插并上线CPU 30 KVM管理系统资源-CPU热插 30.1 概述 在线增加(热插)虚拟机CPU是指在虚拟机处于运行状态下,为虚拟机热插CPU而不影响…

企业级信息系统开发——初探Spring - 采用Java配置类管理Bean

文章目录 一、打开项目二、创建子包三、创建杀龙任务类四、创建勇敢骑士类五、创建Spring配置类六、创建测试类七、运行测试类八、总结Spring管理Bean的四种方式 一、打开项目 Maven项目 - SpringDemo 二、创建子包 在net.shuai.spring包里创建day04子包 三、创建杀龙任务…

open3d-gui 所有不同种类的部件

整体效果如上. 下面一步一步添加部件来实现. 目录 1. 菜单栏 2. 文件选择部件 3. 垂直可折叠部件 3.1 label部件 3.2 复选框checkbox 3.3 色板 3.4 下拉框combobox 3.5 拨动开关toggleSwitch 3.6 部件代理WidgetProxy 3.7 WidgetStack 3.8 列表 3.9 树形视图 3.…

AI时代的数据革命,分布式融合存储为何堪当大任?

有人说,以ChatGPT为代表的人工智能应用的兴起标志着AI时代奇点来临。 诚然如斯。这一波AIGC浪潮来袭,让人们真正意识到AI给生产力带来的巨大飞跃。从今年起,AI大模型成为行业用户重点关注的对象,甚至金融、媒体、广告营销等用户纷…

LangChain 实践之工具使用

参考:LangChain中文入门教程 LangChain官网 通过 Google 搜索并返回答案 import os os.environ["OPENAI_API_KEY"] "xxx" os.environ[SERPAPI_API_KEY] "xxx"from langchain.agents import load_tools from langchain.agents im…

华为OD机试真题 Java 实现【优秀学员统计】【2023Q1 100分】

一、题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。每个员工会对应一个id,每天的打卡记录记录当天打卡员工的id集合,一共30天。 请你实现…

进入阿里外包一个月,我离职了

有一种打工人的羡慕,叫做“大厂”。 真是年少不知大厂香,错把青春插稻秧。 但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂…

设计模式详解之工厂模式

作者:刘文慧 本文将着眼于工厂模式,从简单工厂模式、工厂方法模式和抽象工厂模式出发,展开学习和深入探讨。 ​ 一、概述 我们在进行软件开发时要想实现可维护、可扩展,就需要尽量复用代码,并且降低代码的耦合度&…

SwiftUI 实现一个 iOS 上 Files App 兼容的文件资源管理器

功能需求 在 SwiftUI 中自己白手起家写一个 iOS(或iPadOS)上迷你的文件资源管理器是有些难度滴,不过从 iOS 11 (2017年) 官方引入自家的 Files App 之后,我们就可以借助它的魔力轻松完成这一个功能了。 …

防抖和节流 含义及区别图文详解秒懂

防抖和节流都是为解决短时间内频繁触发某个功能函数而导致的性能问题。比如,触发频率过高而导致响应速度跟不上,以致出现延迟,假死或卡顿的现象。 防抖 图解:一件事情,计划5s以后触发,结果中途意外触发了…

一款可以自动写代码的编辑器,解放你的双手

Cursor 是集成了 GPT-4 的 IDE 工具,目前免费并且无需 API Key,支持 Win、Mac、Linux 平台,可以按要求生成代码,或者让 AI 帮助优化代码,分析代码。Cursor目前已经集成了openai的GPT-4,它或将彻底改变我们写…

gdb调试 与 coredump

gdb调试 与 coredump调试 1. 启动gdb2.gdb中的相关命令3. coredump调试(附属于gdb调试中一种,当程序出现错误时,会使用coredump调试)1)coredump是什么?2)前期设置3)什么情况下会导致…

JavaEE进阶5/25

1.五大类注解详解(重点 1.Controller 控制器,用于业务逻辑层,来控制用户的行为。它用来检查用户参数的有效性。 当用户的参数有效的话会继续分发到服务层。controller可以理解为程序的安保系统 2.Service 服务层。归属服务层,调用…

MySQL---SQL优化上(explain分析执行计划、查看SQL的执行效率、定位低效率SQL)

1. 查看SQL的执行效率 MySQL 客户端连接成功后,通过 show [session|global] status 命令可以查看服务器状态信息。通 过查看状态信息可以查看对当前数据库的主要操作类型。 --下面的命令显示了当前 session 中所有统计参数的值 show session status like Com____…

【滴水逆向P77】加载进程(PE查看器)应用程序源码解析

在上一篇文章中讲解了通用控件,做了一个基本的加载进程(PE查看器)的应用程序项目,Win32通用控件,加载进程(PE查看器)项目初步,大家如果有不懂的可以去看看,由于不是很了解…

如何搭建一个高效、可靠的积分商城系统?

互联网购物的普及,积分商城系统已经成为商家和消费者之间互动的一种常见方式。它不仅可以帮助商家增加品牌影响力,还可以提高顾客体验,从而增加销售额。下面就如何搭建一个高效、可靠的积分商城系统作一些简单介绍。 第一步:确定需…

MyBatis源码学习三之查询主逻辑

MyBatis源码学习三之查询主逻辑 继续上一章节。 MyBatis的一个主要流程图。从图中可以看出,核心的东西主要集中在3个Handler中。分别是入参处理,执行sql语句处理,以及返回结果处理。 一 实例 Test public static void main(String[] args…

Revit建模|10种方法帮你解决Revit操作卡顿!

大家好,这里是建模助手。 相信各位BIMer在使用Revit建模时,肯定遇到过软件加载慢或者程序未响应的现象。我们经过测试发现,除了硬件配置及软件本身的问题以外,建模习惯及软件使用方法不当也会造成软件卡顿。 以下就是我们总结的…

TPlinker解读

参考: 关系抽取之TPLinker解读加源码分析 TPLinker 实体关系抽取代码解读 实体关系联合抽取:TPlinker TPLinker中文注释版 Tagging TPLinker模型需要对关系三元组(subject, relation, object)进行手动Tagging,过程分为三部分: &…

阿里面试,HR说我不配21K,直接翻脸.....

好家伙,这奇葩事可真是多,前两天和粉丝聊天,他说前段时间面试阿里的测开岗,最后和面试官干起来了。 我问他为什么,他说没啥,就觉得面试官太装了,我说要21K,他说太高了,说…