ROS2 Launch文件编辑及运行

news2025/4/13 13:01:23

在第一版的 ROS 中launch 一般使用 xml 文件的格式进行编写和运行,但从 ROS2 中增添了 py 的 python 的可执行文件


作用

  • 为了解决频繁的 ros2 run 命令,和多个节点之间的运行及关闭

特性

  • launch文件允许我们同时启动和配置多个包含 ROS 2 节点的可执行文件,设计了一套完整的语法和规则的文件来帮助我们组织节点的启动

编写

使用官方推荐的 python 的方式来编写 launch 文件(Python 拥有 xml 和 Yaml )

src 工程文件结构
在这里插入图片描述


步骤

  1. 创建 src 及功能包
  2. 创建 src 及功能包
  3. 在功能包内创建 launch 文件夹,编写 .py 文件
  4. CMakeLists.txt 文件的更改
  5. 编译运行


创建 src 及功能包

打开终端运行

ros2 pkg create robot_startup --build-type ament_cmake --destination-directory src


编写好 cpp 源文件

内容为以 500 ms 发布消息,内容为 “one

#include "rclcpp/rclcpp.hpp"
#include <iostream>
#include "std_msgs/msg/string.hpp"


class Publisher:public rclcpp::Node
{
public:
    Publisher(std::string name) : Node(name)
    {
        RCLCPP_INFO(this->get_logger(), "大家好,我是%s.", name.c_str());
        command_publisher_ = this->create_publisher<std_msgs::msg::String>("command", 10);
        // 创建定时器,500ms为周期,定时发布
        timer_ = this->create_wall_timer(std::chrono::milliseconds(500), std::bind(&Publisher::timer_callback, this));
    }
private:
    // 声明话题发布者
    rclcpp::Publisher<std_msgs::msg::String>::SharedPtr command_publisher_;
    void timer_callback()
    {
        // 创建消息
        std_msgs::msg::String message;
        message.data = "One";
        // 日志打印
        RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", message.data.c_str());
        // 发布消息
        command_publisher_->publish(message);
    }
    // 声名定时器指针
    rclcpp::TimerBase::SharedPtr timer_;
};

int main(int argc, char **argv)
{
    rclcpp::init(argc, argv);
    auto node = std::make_shared<Publisher>("topic_One");
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;

}

在功能包内创建 launch 文件夹,编写 .py 文件[重点]

mkdir launch
touch test.launch.py

然后在 .py 文件后键入

# 导入库
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    """launch内容描述函数,由ros2 launch 扫描调用"""
    action_robot_01 = Node(
        package="robot_start_up",
        executable="action_robot_01"
    )
    # 创建LaunchDescription对象launch_description,用于描述launch文件
    launch_description = LaunchDescription(
        [action_robot_01])
    # 返回让ROS2根据launch描述执行节点
    return launch_description
  • 需要导入两个库(launch 描述文件的生成,Node打包)

LaunchDescription
launch_ros.actions 中的 Node

  • Node 节点打包

action_robot_01 = Node(
package=“robot_start_up”,
executable=“action_robot_01”
)

其中:
package 后面填写的内容为功能包的名字
executable 后面填写的内容为功能包中的 cpp文件生成的可执行文件名字
最后返回即可



CMakeLists.txt 文件的更改

添加以下几项

  • 寻找必要的包
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
  • 源文件生成可执行文件
add_executable(action_robot_01 src/action_robot_01.cpp)
ament_target_dependencies(action_robot_01 rclcpp std_msgs)

install(TARGETS
  action_robot_01
  DESTINATION lib/${PROJECT_NAME}
)
  • install py 文件
install(DIRECTORY launch
  DESTINATION 
  share/${PROJECT_NAME})


编译运行

colcon build
source install/build
ros2 run robot_start_up est.launch.py 

执行结果:
在这里插入图片描述


在执行 ‘colcon build’ 后就会发现,在自己创建的工程目录文件夹 ‘install/功能包/share/launch’下会拷贝原来编辑好的 .py 文件

在这里插入图片描述


🌸🌸🌸完结撒花🌸🌸🌸


🌈🌈Redamancy🌈🌈


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

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

相关文章

Java学习者看过来。。。这些优质项目千万别错过

程序员宝藏库&#xff1a;https://gitee.com/sharetech_lee/CS-Books-Store 这么主流的编程语言&#xff0c;如果去GitHub搜一下&#xff0c;会发现Java项目多如牛毛。 这就会带来很多困扰&#xff0c;假如有10万个项目&#xff0c;想从其中找到适合初学、进阶等不同阶段的项目…

【OpenFOAM】-olaFlow-算例7-波面自适应网格

算例路径&#xff1a; none 算例描述&#xff1a; 波面附近采用自适应网格划分 学习目标&#xff1a; 动网格设置和使用&#xff0c;dynamicFvMesh dynamicRefineFvMesh 的各参数含义 学习体会&#xff1a;    (1) 在结构附近的加密网格&#xff0c;自适应网格依然会对细网格…

weston 窗口管理 (1)

窗口管理 (1) 一、概述 在传统嵌入式场景下,通常只会运行一个UI程序,故相当于单窗口程序,无需桌面服务器的介入;在桌面系统下,对于每一个UI程序而言,它们的行为相比于嵌入式场景仍然没有发生改变,其对接的仍然是窗口,只不过在同一个时刻允许多个UI程序同时运行. 无论如何对于…

Git的标签:tag

目录 1. 查看标签 1.1 简单查看 1.2 匹配筛选标签 2. 创建标签 2.1 附注标签 2.2 轻量标签 2.3 代码提交之后打标签 2.4 提交标签 3. 删除标签 4. 检出标签 Git 可以给仓库历史中的某一个提交打上标签&#xff0c;以示重要。 比较有代表性的是人们会使用这个功能来标记…

thrift OOM 内存溢出

最近经常发生thrift服务半夜宕机的问题&#xff0c;虽然是测试环境&#xff0c;但是每天早上重启也很恶心。 经过很长时间的摸索&#xff0c;终于找到了原因。先说背景&#xff1a; 我们用的thrift版本是0.9.2&#xff0c;用做service的rpc框架&#xff0c;某一天开始&#x…

安全狗云原生安全产品入选《2022网络安全技术应用试点示范项目名单》

近日&#xff0c;工信部正式发布《2022网络安全技术应用试点示范项目名单》。作为国内云原生安全领导厂商&#xff0c;安全狗也凭借突出的产品能力&#xff0c;入选名单。 据悉&#xff0c;此次评选需层层通过单位申报、部门初审和推荐、专家评审、网上公示等多个环节。安全狗…

玉湖冷链黄铮洪出任广东省物流标准化技术委员会副主任

1月5日&#xff0c;广东省物流标准化技术委员会(第三届)成立大会召开&#xff0c;玉湖冷链执行董事黄铮洪出任副主任委员。 大会现场 根据2022年9月广东省市场监督管理局发布的通告&#xff0c;决定成立第三届广东省物流标准化技术委员会(以下简称「标准化委员会」)。此次大会进…

七、k8s Service详解

文章目录1 Service介绍1.1 userspace 模式1.2 iptables 模式1.3 ipvs 模式2 Service类型3 Service使用3.1 实验环境准备3.2 ClusterIP类型的Service3.3 Endpoint3.4 HeadLiness类型的Service3.5 NodePort类型的Service3.6 LoadBalancer类型的Service3.7 ExternalName类型的Serv…

树莓派3B摄像头的详细使用教程(拍照+录像+监控)

树莓派4B摄像头的详细使用教程&#xff08;拍照录像监控&#xff09; 本篇博文将介绍树莓派摄像头是如何在树莓派开发板上从安装到使用的&#xff0c;博主过程中参考了许多帖子&#xff0c;现将整理的比较全面的过程分享出来&#xff0c;供大家参考使用。 排线连接 硬件连接时…

【阶段二】Python数据分析数据可视化工具使用02篇:条形图与雷达图

本篇的思维导图: 条形图 条形图与柱形图类似,几乎可以表达相同多的数据信息。条形图的柱形变为横向,从而导致与柱形图相比,条形图更加强调项目之间的大小对比。尤其在项目名称较长以及数量较多时,采用条形图可视化数据会更加美观、清晰。 代码 # 导入需要的包imp…

java学习day70(乐友商城)授权中心

1.无状态登录原理 1.1.什么是有状态&#xff1f; 有状态服务&#xff0c;即服务端需要记录每次会话的客户端信息&#xff0c;从而识别客户端身份&#xff0c;根据用户身份进行请求的处理&#xff0c;典型的设计如tomcat中的session。 例如登录&#xff1a;用户登录后&#x…

cubeIDE开发, stm32的C库应用分析

一、stm32的C库 cubeIDE针对STM32芯片开发&#xff0c;提供个了两大库&#xff0c;HLA库和C库&#xff08;集成GNU Tools for STM32工具链时提供&#xff0c;该工具链同样是意法半导体提供&#xff0c;可在http:// www.st.com单独下载&#xff09;&#xff0c;前者帮助开发这简…

P1055 [NOIP2008 普及组] ISBN 号码————C++

文章目录题目[\[NOIP2008 普及组\] ISBN 号码](https://www.luogu.com.cn/problem/P1055)题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2提示解题思路1Code运行结果解题思路2Code运行结果题目 [NOIP2008 普及组] ISBN 号码 题目描述 …

windows 安装jenkins运行发布vue项目到linux服务器

文章目录背景安装jenkins安装插件安装nodej插件Publish over SSH系统配置Publish over SSH全局工具配置设置node构建项目创建一个freestyle的项目Discard old buildsgit命令报错Host key verification failedBuild背景 由于服务器上运行jenkins很卡&#xff0c;所以对于小公司…

windows安装jenkins运行发布java springboot项目到linux服务器

文章目录背景安装jenkins安装插件安装maven插件Publish over SSH系统配置Global propertiesPublish over SSH全局工具配置设置jdk设置maven设置git构建java maven项目freestyle 或者maven都可以Discard old buildsgit命令报错Host key verification failed每次构建前清理构建环…

可观测性之Log4j2优雅日志打印

可观测性之Log4j2优雅日志打印# 简介 对于Log4j2大家应该都不是很陌生&#xff0c;听说最多的应该是2021年年底出现的安全漏洞了&#xff0c;不过最让大家头痛的应该不仅仅是这个安全漏洞的处理&#xff0c;安全漏洞通过升级最新的依赖版本即可快速解决&#xff0c;平时在使用…

基于Java+SpringMvc+vue+element实现上海汽车博物馆平台

基于JavaSpringMvcvueelement实现上海汽车博物馆平台 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源…

C语言.表白神器.爱你之心之闪耀

前言 爱你之心之闪耀&#xff0c;这个名字比较沙雕哈哈哈。。。 爱你之心之闪耀前言爱心函数的选取爱心函数1爱心函数2简单爱心粒子发射原理爱心结构一些宏初始化init创建若干爱心并初始化setHeart展示爱心showHeart爱心变大modifyHeart设置音乐主函数Love.hLove.cpp祝有情人&a…

【有营养的算法笔记】一文轻松学会高精度算法(加减乘除)

&#x1f451;作者主页&#xff1a;进击的安度因 &#x1f3e0;学习社区&#xff1a;进击的安度因&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;有营养的算法笔记 文章目录一、前言二、高精度加法1、思想及模板2、代码实现三、高精度减法1、思路及模板2…

电脑一键重装系统卡在正在准备就绪怎么办

最近有些用户想要给电脑换新的系统使用&#xff0c;选择一键重装工具重装&#xff0c;但结果卡住了&#xff0c;小白一键重装系统卡在正在准备就绪怎么办?下面小编就教下大家小白一键重装系统卡在正在准备就绪怎么办的解决办法。 工具/原料&#xff1a; 系统版本&#xff1a;…