ROS2中launch编写及参数含义(xml、python)

news2025/6/12 18:14:32

ROS2系列文章目录

ROS2中nav_msgs/msg/Path 数据含义及使用

ROS2中std_msgs/msg/Header 数据含义及使用

ROS中TF变换详解


文章目录

  • ROS2系列文章目录
  • ROS2中launch编写及参数含义(xml、python)
  • 一、ROS官方介绍
  • 二、实现案例
    • 1.编写主函数、CMakeLists.txt及package.xml
    • 2.编写启动节点的launch文件
    • 3.编译并运行


ROS2中launch编写及参数含义(xml、python)


一、ROS官方介绍

ROS 2中的启动系统负责帮助用户描述其系统的配置,然后按描述执行。系统的配置包括运行什么程序,在哪里运行,传递什么参数,以及ROS特定的约定,这些约定通过为每个组件提供不同的配置,使其易于在整个系统中重用组件。它还负责监测启动过程的状态,并报告和/或对这些过程的状态变化作出反应。
ROS2官方说明:http://docs.ros.org/en/humble/Tutorials/Intermediate/Launch/Creating-Launch-Files.html#write-the-launch-file

二、实现案例

1.编写主函数、CMakeLists.txt及package.xml

此处创建learn_ros2功能包,在learn_ros2/src目录下建立main.cpp,该函数具体实现功能参照博文:ROS2中nav_msgs/msg/Path 数据含义及使用

#include <nav_msgs/msg/path.hpp>
#include <rclcpp/rclcpp.hpp>
#include <string>
#include <unistd.h>
using namespace std;
class My_node:public rclcpp::Node{
public:
    My_node(std::string node_name):Node(node_name){

    }
};
int main(int argc, char**argv){
    rclcpp::init(argc,argv);//节点初始化
    std::shared_ptr<My_node> node_ptr = std::make_shared<My_node>("test_node");
    rclcpp::Publisher<nav_msgs::msg::Path>::SharedPtr nav_pub = node_ptr->create_publisher<nav_msgs::msg::Path>("/global_path",1);
    nav_msgs::msg::Path path;
    geometry_msgs::msg::PoseStamped pose;
    path.header.frame_id = "world";
    while (rclcpp::ok())
    {
        path.header.stamp = node_ptr->now();
        path.poses.clear();
        for (int i = 0; i < 10; i++)
        {
            pose.header.frame_id = "world";
            pose.header.stamp = node_ptr->now();
            pose.pose.position.set__x(i);
            pose.pose.position.set__y(0.2*i*i+2);
            pose.pose.position.set__z(0);
            pose.pose.orientation.set__x(0);
            pose.pose.orientation.set__y(0);
            pose.pose.orientation.z = 0;
            pose.pose.orientation.w = 1;
            path.poses.push_back(pose);
        }
        nav_pub->publish(path);
        sleep(1);
        std::cout<<"已发送path"<<std::endl;
    }    
    std::cout<<"退出程序"<<std::endl;
}

指定功能包learn_ros2的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.8)
project(learn_ros2)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclpy REQUIRED)
find_package(std_msgs REQUIRED)
find_package(nav_msgs REQUIRED)
if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  # the following line skips the linter which checks for copyrights
  # comment the line when a copyright and license is added to all source files
  set(ament_cmake_copyright_FOUND TRUE)
  # the following line skips cpplint (only works in a git repo)
  # comment the line when this package is in a git repo and when
  # a copyright and license is added to all source files
  set(ament_cmake_cpplint_FOUND TRUE)
  ament_lint_auto_find_test_dependencies()
endif()
#添加可执行文件名
add_executable(test_node src/main.cpp)
#给可执行文件链接ros2的标准库及其他依赖
ament_target_dependencies(test_node rclcpp std_msgs nav_msgs)
#将可执行文件安装在指定目录下
install(TARGETS test_node
DESTINATION lib/${PROJECT_NAME})
#将launch目录下的文件安装在指定目录下
install(DIRECTORY launch
  DESTINATION share/${PROJECT_NAME})
ament_package()

2.编写启动节点的launch文件

在learn_ros2目录下建立launch文件夹,并在文件目录中新建python及xml文件如下:
test_launch.launch.py,test_xml_launch.xml

首先使用python实现test_launch.launch.py文件,具体含义参考注释

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():

    parameters_basic1 = Node(
        package="learn_ros2",
        executable="test_node",
    )
    # 创建LaunchDescription对象launch_description,用于描述launch文件
    launch_description = LaunchDescription(
        [parameters_basic1])
    # 返回让ROS2根据launch描述执行节点
    return launch_description

该处使用的url网络请求的数据。

使用XML实现test_xml_launch.xml文件,具体含义参考注释

<launch>

  <!-- 启动节点,命名为/name1/test_node -->
  <node pkg="learn_ros2" exec="test_node" name="test_node" namespace="name_1"/>
  
  <!-- 启动节点,命名为/name2/test_node -->
  <node pkg="learn_ros2" exec="test_node" name="test_node" namespace="name_2"/>
  
  <!-- 启动节点,命名为/name3/test_node,同时将话题/global_path,映射为/test_node3/global_path-->
  <node pkg="learn_ros2" exec="test_node" name="test_node" namespace="name_3">
    <remap from="/global_path" to="/test_node3/global_path"/>
  </node> 

</launch>

3.编译并运行

注意:编写完成launch文件后,要使用ros2编译命令对功能包的可执行文件进行生成

使用test_xml_launch.xml启动各个程序

source install/setup.bash
ros2 launch learn_ros2 test_xml_launch.xml

请添加图片描述

使用test_launch.launch.py启动各个程序如下:

请添加图片描述

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

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

相关文章

一学就会 | ChatGPT提示词极简指南-有爱AI实战教程(三)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 导读&#xff1a;在使用 ChatGPT 时&#xff0c;当你给的指令越精确&#xff0c;它的回答会越到位&#xff0c;举例来说&#xff0c;假如你要请它帮忙写文案&#xff0c;如…

近年来文本检测相关工作梳理

引言 场景文本检测任务&#xff0c;一直以来是OCR整个任务中最为重要的一环。虽然有一些相关工作是端对端OCR工作的&#xff0c;但是从工业界来看&#xff0c;相关落地应用较为困难。因此&#xff0c;两阶段的OCR方案一直是优先考虑的。 在两阶段中&#xff08;文本检测文本识…

springboot254小区团购管理

小区团购管理设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装小区团购管理软件来发挥其高效地信…

DataWhale公开课笔记2:Diffusion Model和Transformer Diffusion

Stable Diffusion和AIGC AIGC是什么 AIGC的全称叫做AI generated content&#xff0c;AlGC (Al-Generated Content&#xff0c;人工智能生产内容)&#xff0c;是利用AI自动生产内容的生产方式。 在传统的内容创作领域中&#xff0c;专业生成内容&#xff08;PGC&#xff09;…

稀碎从零算法笔记Day10-LeecCode:赎金信

题型&#xff1a;哈希表、字符串 链接&#xff1a;383. 赎金信 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以…

Proxmox VE安装CentOS

1、下载CentOS镜像文件 阿里巴巴开源镜像站&#xff1a; https://developer.aliyun.com/mirror/ CentOS 镜像文件&#xff08;图形化界面&#xff09; https://mirrors.aliyun.com/centos/8.5.2111/isos/x86_64/CentOS-8.5.2111-x86_64-dvd1.iso 2、上传ISO镜像 选择ISO镜像…

【Linux】软件包管理器yum(命令行工具rz,sz)

目录 01.何为软件包 软件包 软件包管理器 02.命令行工具rz、sz 03.yum的使用 查看与搜索 安装 卸载 其他 01.何为软件包 软件包 我们手机电脑上的各种软件应用其实就是一个个的可执行程序&#xff08;及其相关文件和资源的集合&#xff09;&#xff0c;打开应用的过程其…

计算机组成原理-微程序设计实验

一、实验目的 1.在简单模型机的基础上&#xff0c;通过知识的综合运用&#xff0c;进行5条机器指令的微程序设计。 2.进一步理解微程序控制器的工作原理&#xff0c;掌握指令与微指令的区别与联系。 3.通过编写和调试微程序&#xff0c;提高研究与设计能力。 二、实验要求 …

P1958 上学路线

难度&#xff1a;普及- 题目描述 你所在城市的街道好像一个棋盘&#xff0c;有 a 条南北方向的街道和 b 条东西方向的街道。南北方向的 a 条街道从西到东依次编号为 1 到 a&#xff0c;而东西方向的 b 条街道从南到北依次编号为 1 到 b&#xff0c;南北方向的街道 i 和东西方…

嘉绩咨询:搭建品牌招商桥梁,提供卓越讲师与会议服务

当下&#xff0c;品牌成功的关键在于强大的渠道支撑和高效的招商能力&#xff0c;在这一背景下&#xff0c;嘉绩咨询&#xff0c;这一专注于渠道招商全案系统孵化的知名平台型企业&#xff0c;今日宣布&#xff0c;将进一步加强其在品牌招商桥梁搭建上的服务功能&#xff0c;通…

如何不丢精度保存PPT中的图片,实测有效

1.在powerpoint软件中 文件-》选项 -》高级-》设置为不压缩&#xff0c;且默认输出为最高 2.导入对应图片后&#xff0c;右键导出图片&#xff0c;选择.emf文件 3.使用windows自带的画图工具打开.emf文件&#xff0c;ctrls另存为.png文件 此方法亲测可以生成清晰度很高的图片

13. 用户注册功能实现

文章目录 一 、增加路由二、书写流程控制&#xff08;controller&#xff09;逻辑三、书写业务逻辑四、与DB交互五、测试 代码地址&#xff1a;https://gitee.com/lymgoforIT/bluebell 一 、增加路由 添加路由&#xff0c;使用分组管理 v1 : r.Group("/api/v1")//…

运动想象 (MI) 迁移学习系列 (3) : MSFT

运动想象迁移学习系列:MSFT 0. 引言1. 主要贡献2. 数据增强方法3. 基于度量的空间滤波转换器3.1 空间过滤3.2 脑电图ViT3.2.1 变压器编码器层3.2.2 基于度量的损失函数 4. 实验结果4.1 消融实验4.2 基线任务对比4.3 跨主题 5. 总结欢迎来稿 论文地址&#xff1a;https://www.s…

C# WinForm AndtUI第三方库 Table控件使用记录

环境搭建 1.在NuGet中搜索AndtUI并下载至C# .NetFramework WinForm项目。 2.添加Table控件至窗体。 使用方法集合 1.单元格点击事件 获取被点击记录特定列内容 private void dgv_CellClick(object sender, MouseEventArgs args, object record, int rowIndex, int columnIn…

javascript中的严格模式(use strict)

下面是一个使用JavaScript严格模式的代码示例。在这个示例中&#xff0c;我将展示如何在整个脚本中启用严格模式&#xff0c;并演示一些严格模式下可能遇到的问题。 "use strict"; a 1; // Uncaught ReferenceError: a is not defined // 尝试使用一个未声明的变量…

中国钛合金自行车出口海外营销策略-大舍传媒

中国是世界上自行车产量最大的国家之一&#xff0c;而如今&#xff0c;它也在自行车制造领域迈出了一大步。Titan Super Bond与Bright Laser Technologies (BLT)合作&#xff0c;成功开发了中国和亚洲首款全3D打印钛合金自行车车架。 这款创新的自行车车架采用了BLT-A320机器&a…

bat文件给多个Android设备安装apk

本文是安装一个apk 1、确保以下3个文件在同一个目录下 1>要安装的apk&#xff0c;这里是mmb.apk 2>设备名单&#xff0c;保存在.txt文件中&#xff0c;一行一个设备名&#xff0c;设备名通过adb devices获取&#xff0c;截图中是两个设备 txt文件中的样式 3>要运行…

二、实战篇 商户查询缓存

源码仓库地址&#xff1a;gitgitee.com:chuangchuang-liu/hm-dingping.git 1、什么是缓存&#xff1f; 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码 1.1、为什么要使用缓存&#xff1f; 添加缓存后&#xff0c;重复的…

icp许可证年报入口在哪?icp许可证年报流程详细介绍

近期拥有ICP许可证的企业负责人都会收到各地方通管局下发的年报通知&#xff0c;需要在每年的1-3月份报送年报信息&#xff0c;最晚报送时间是2024年3月31日。 对于刚申请或者刚接触这方面的朋友来说&#xff0c;可能连icp许可证年报入口在哪都不知道&#xff0c;更不用说后面…

OpenStack之keystone(用户认证)

Keystone&#xff08;认证&#xff09; Keystone 概述 1)管理用户及其权限 2)维护OpenStack Services 的 Endpoint 3)Authentication&#xff08;认证&#xff09;和 Authorization&#xff08;授权&#xff09; keystone的名词概念 1.User&#xff08;用户或服务&#xf…