ROS 2边学边练(28)-- 将launch文件集合到ROS 2包中

embedded/2024/9/20 7:27:30/ 标签: ROS 2, 机器人, 经验分享

前言

        上一篇我们单独创建了文件夹(可以任何路径),并在其中创建编写了一份launch文件,调用了小海龟例程,但通常情况下这并非是launch文件的典型应用场景,更多的是在ROS 2功能包中创建使用launch文件。

动动手

        今天的内容也是比较轻松的,但一定要动手实践。

创建一个功能包

        我们重新创建一个工作空间launch_ws及其子文件夹src:

$mkdir -p launch_ws/src

        进入src,添加一个功能包:

$ros2 pkg create --build-type ament_cmake --license Apache-2.0 cpp_launch_example

新建launch文件夹

        在功能包的根路径下新建launch文件夹用来放置我们的launch文件,并在CMakeLists.txt文件里添加以下内容指明launch文件安装信息:

# Install launch files.
install(DIRECTORYlaunchDESTINATION share/${PROJECT_NAME}/
)

编写launch文件

        在launch文件里面新建名叫my_script_launch.py的launch文件,将下面内容复制其上:

import launch
import launch_ros.actionsdef generate_launch_description():return launch.LaunchDescription([launch_ros.actions.Node(package='demo_nodes_cpp',executable='talker',name='talker'),])

        或者是xml格式的my_script_launch.xml(最简明的launch格式,但有的书籍推荐我们使用python格式的,因为其灵活性和扩展性都要优于xml,见仁见智吧):

<launch><node pkg="demo_nodes_cpp" exec="talker" name="talker"/>
</launch>

        或者yaml格式的my_script_launch.yaml:

launch:- node:pkg: "demo_nodes_cpp"exec: "talker"name: "talker"

构建运行launch

        返回到launch_ws工作空间根路径下,开始构建我们的包(目前只有一个包,简单点就全构建了):

$colcon build

        构建完成后我们再source下环境(source install/setup.bash),运行launch文件,几种格式的launch文件调用方式一样,均为ros2 launch <package_name> <launch_file_name>,我们只以python版本为例(其他版本的只需将launch文件的后缀改为对应的格式即可):

$ros2 launch cpp_launch_example my_script_launch.py

文档资料

         launch文档里提供了对launch文件更多更详细的描述,大家可前往一观,另外官方还提供了两份源码工程项目,更多的文档/例子即将补充上:

GitHub - ros2/launch: Tools for launching multiple processes and for writing tests involving multiple processes.

https://github.com/ros2/launch_ros 

本篇完。


http://www.ppmy.cn/embedded/9522.html

相关文章

v-deep 打破作用域隔离的原理

vue 中使用 scoped 样式隔离 使用 ::v-deep 和 >>> &#xff0c;穿透作用域样式&#xff0c;以便在父组件中修改子组件的样式&#xff0c;即打破样式隔离。 vue 使用了一种叫做 scoped css 的技术来隔离组件的样式&#xff0c;确保他们不会泄漏到其他组件中&#xf…

中图分类法的正则表达式参考

文章目录 1. 中图分类法2. 正则表达式3. 使用方法4. 参考 1. 中图分类法 中图分类法&#xff0c;全称为《中国图书馆图书分类法》&#xff0c;简称《中图法》&#xff0c;是中国国内普遍采用的一种图书分类体系&#xff0c;用于组织和管理图书馆藏书&#xff0c;方便读者查找和…

第25天:安全开发-PHP应用文件管理包含写入删除下载上传遍历安全

第二十五天 一、PHP文件管理-下载&删除功能实现 1.文件上传&#xff1a; 无过滤机制黑名单过滤机制白名单过滤机制文件类型过滤机制 2.文件删除&#xff1a; unlink() 文件删除函数调用命令删除&#xff1a;system shell_exec exec等 3. 文件下载&#xff1a; 修改HT…

在Debian上可以部署哪些有用的服务?

2024年4月20日&#xff0c;周六下午 在 Debian 上可以部署许多有用的服务&#xff0c;以满足各种需求。 以下是一些常见的有用服务&#xff1a; Web 服务器&#xff1a;如 Apache、Nginx、Lighttpd 等&#xff0c;用于托管网站和 Web 应用。数据库服务器&#xff1a;如 MySQL…

三分钟带你读懂面向对象的三大特征:封装,继承,多态

很多小伙伴在学面向对象的时候觉得非常抽象&#xff0c;尤其是对于面向对象的三大特征&#xff1a;封装&#xff0c;继承&#xff0c;多态不理解&#xff0c;那这期文章呢&#xff0c;九九就给大家安排&#xff0c;三分种带你迅速掌握封装&#xff0c;继承&#xff0c;多态。 …

七、Mock 模拟后端接口

1、安装&#xff1a;pnpm install -D vite-plugin-mock mockjs 2、vite.config.ts 配置文件启用插件。 // mock 插件提供的方法 import { viteMockServe } from vite-plugin-mockexport default defineConfig({plugins: [vue(),viteMockServe({mockPath: mock,enable: true,/…

Linux 2.进程(守护进程)

守护进程 何谓守护进程常见守护进程进程查看命令pskill命令编写简单守护进程守护进程的父进程 何谓守护进程 daemon&#xff0c;表示守护进程&#xff0c;简称为d&#xff08;进程名后面带d的基本就是守护进程&#xff09; 长期运行&#xff08;一般是开机运行直到关机时关闭&…

Docker一键快速私有化部署(Ollama+Openwebui) +AI大模型(gemma,llama2,qwen)20240417更新

几行命令教你私有化部署自己的AI大模型&#xff0c;每个人都可以有自己的GTP 第一步&#xff1a;安装Docker(如果已经有了可以直接跳第二步) ####下载安装Docker wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo##…

el-table-column叠加el-popover使用

需求&#xff1a;el-table-column有一列展示多个tag信息&#xff0c;实现点击tag展示tag信息以及tag对应的详细信息 table的数据格式 data:[{...,isPopoverVisible:false,},{...,isPopoverVisible:false,},... ]写法&#xff1a; <el-table-column label"配置信息&q…

字符数组和字符串题

1.字符数组(1-2) 下面的程序段将输出 ▁▁▁C▁▁ 。 char s[10] "abcd"; printf("%d\n", sizeof(s)); A.4 B.5 C.10 D.11 2.字符数组(1-3) 下面的程序段将输出 ▁▁C▁▁▁ 。 char s[] "abcd"; printf("%d\n", strlen(s))…

函数模板(Template)

文章目录 前言一、函数模版&#xff1f;函数模版的作用函数模版的语法函数模版的两种调用方法示例 总结 前言 在C中&#xff0c;模板&#xff08;Template&#xff09;是一种泛型编程工具&#xff0c;它允许程序员编写与类型无关的代码。通过使用模板&#xff0c;可以创建可重…

如何提高用户粘性?3步打造用户忠诚度!

众所周知&#xff0c;提高用户粘性对于很多企业或是个人来说&#xff0c;是非常重要的一个环节&#xff0c;只有建立起用户的忠诚度&#xff0c;才能够保持稳定的用户群体和持续的业务增长。那么&#xff0c;如何才能提高用户粘性呢&#xff1f; 接下来&#xff0c;我将为大家…

YOLOv8-PySide --- 基于 ultralytics 8.1.0 发行版优化 | 代码已开源

YOLOv8-PySide — 基于 ultralytics 8.1.0 发行版优化 Github 项目地址&#xff1a;https://github.com/WangQvQ/Ultralytics-PySide6 BiliBili视频地址&#xff1a;https://www.bilibili.com/video 页面效果 如何使用 pip install ultralytics8.1.0 or git clone --branch v…

[lesson44]继承中的访问级别

继承中的访问级别 继承中的访问级别 面向对象中的访问级别不只是public和private可以定义protected访问级别关键字protected的意义 修饰的成员不能被外界直接访问修饰的成员可以被子类直接访问 定义类时访问级别的选择 小结 面向对象中的访问级别不只是public和privatepro…

C# 语言类型(二)—预定义类型之字符串及字符类型简述

总目录 C# 语法总目录 参考链接&#xff1a; C#语法系列:C# 语言类型(一)—预定义类型值之数值类型 C#语法系列:C# 语言类型(二)—预定义类型之字符串及字符类型简述 C#语法系列:C# 语言类型(三)—数组/枚举类型/结构体 C#语法系列:C# 语言类型(四)—传递参数及其修饰符 C#语法…

基于HC32F460petb芯片给FLASH安装fat文件系统

FAT&#xff08;File Allocation Table&#xff09;文件系统是一种用于磁盘驱动器、USB闪存驱动器、软盘等存储设备的文件系统。FAT文件系统主要有两种变体&#xff1a;FAT12和FAT16&#xff0c;它们后来被FAT32所取代。FAT32文件系统是对FAT16的扩展&#xff0c;支持更大的文件…

Web3 隐私增强技术对比:探秘加密时代的数据安全与隐私保护

作者&#xff1a;Anders Dalskov&#xff08;博士&#xff0c;Partisia Blockchain 密码学科学家&#xff09; 来源&#xff1a;https://medium.com/partisia-blockchain/mpc-fhe-dp-zkp-tee-and-where-partisia-blockchain-fits-in-c8e051d053f7 编译&#xff1a;TinTinLand…

AI-数学-高中-39空间向量-2空间向量法(法向量)

原作者视频&#xff1a;【空间向量】【一数辞典】2空间向量法&#xff08;重要&#xff09;_哔哩哔哩_bilibili 法向量&#xff08;高中阶段所有与面的关系&#xff0c;都可以通过法向量去证明和解答&#xff09;&#xff1a; 是空间解析几何的一个概念&#xff0c;垂直于平面…

【matlab】计算机控制系统设计

本文基于中国MOOC上东北大学的《计算机控制系统设计》&#xff0c;完成的课程笔记&#xff0c;并无原创想法。 一、概述 1.1 本课程所需掌握的基础知识 数学基础知识&#xff08;高等数学、复变函数、矩阵理论&#xff09;专业基础知识&#xff08;自动控制原理、微机原理、实…

JIT在汽车行业中的革命性应用:颠覆传统制造模式,引领智能制造新时代

随着科技的飞速发展和市场竞争的日益激烈&#xff0c;汽车行业正面临着前所未有的变革。其中&#xff0c;准时制生产&#xff08;Just-In-Time&#xff0c;简称JIT&#xff09;作为一种先进的生产管理方式&#xff0c;已经在汽车行业中得到了广泛应用&#xff0c;成为推动汽车产…