ROS2 入门应用 创建启动文件(C++)

news2024/11/24 17:23:41

ROS2 入门应用 创建启动文件(C++)

  • 1. 创建功能包
  • 2. 添加依赖关系
  • 3. 添加编译信息
  • 4. 创建启动文件
    • 4.1. Python
    • 4.2. XML
    • 4.3. YAML
  • 5. 编译和运行


1. 创建功能包

PythonXMLYAML编写的启动文件可以启动和停止不同的节点,以及触发和处理各种事件
提供这个框架的包是launch_ros,它在下面使用了非ROS特定的launch框架

那么就创建一个独立的cpp_launch_example 启动功能包

cd ~/ros2_ws/src
ros2 pkg create cpp_launch_example --build-type ament_cmake

在功能包中新建目录launch

cd ~/ros2_ws/src/cpp_launch_example
mkdir launch

2. 添加依赖关系

package.xml清单文件中,添加对依赖项的声明

<exec_depend>ros2launch</exec_depend>

3. 添加编译信息

增加可执行文件位置,调整CMakeLists.txt文件,在ament_package()之前添加:

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

4. 创建启动文件

进入launch文件夹,创建启动文件,启动两只海龟,并设置模仿运动

cd ~/ros2_ws/src/cpp_launch_example/launch

可以选择多种方式


4.1. Python

创建 turtlesim_mimic_launch.py 文件

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='turtlesim',
            namespace='turtlesim1',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            namespace='turtlesim2',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            executable='mimic',
            name='mimic',
            remappings=[
                ('/input/pose', '/turtlesim1/turtle1/pose'),
                ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
            ]
        )
    ])

启动文件应该定义generate_launch_description()函数
该函数返回一个launch. launchdescription(),以供ros2 launch使用


4.2. XML

创建 turtlesim_mimic_launch.xml 文件

<launch>
  <node pkg="turtlesim" exec="turtlesim_node" name="sim" namespace="turtlesim1"/>
  <node pkg="turtlesim" exec="turtlesim_node" name="sim" namespace="turtlesim2"/>
  <node pkg="turtlesim" exec="mimic" name="mimic">
    <remap from="/input/pose" to="/turtlesim1/turtle1/pose"/>
    <remap from="/output/cmd_vel" to="/turtlesim2/turtle1/cmd_vel"/>
  </node>
</launch>

4.3. YAML

创建 turtlesim_mimic_launch.yaml 文件

launch:

- node:
    pkg: "turtlesim"
    exec: "turtlesim_node"
    name: "sim"
    namespace: "turtlesim1"

- node:
    pkg: "turtlesim"
    exec: "turtlesim_node"
    name: "sim"
    namespace: "turtlesim2"

- node:
    pkg: "turtlesim"
    exec: "mimic"
    name: "mimic"
    remap:
    -
        from: "/input/pose"
        to: "/turtlesim1/turtle1/pose"
    -
        from: "/output/cmd_vel"
        to: "/turtlesim2/turtle1/cmd_vel"

5. 编译和运行

进入工作空间根目录

cd ~/ros2_ws

编译:

colcon build --packages-select cpp_launch_example

现在可以打开一个新终端,启动海龟模仿运动启动文件,可以启动了两只海龟:

ros2 launch cpp_launch_example turtlesim_mimic_launch.py

再打开一个新终端,并在/turtlesim1/turtle1/cmd_vel主题上运行ros2 topic pub命令,让第一只海龟移动:

ros2 topic pub -r 1 /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"

会看到两只乌龟走相同路径

在这里插入图片描述

打开一个新终端并运行rqt_graph,以更好地了解启动文件中节点之间的关系

rqt_graph

在这里插入图片描述

终端命令ros2 topic pub将数据发布到左侧的/turtlesim1/turtle1/cmd_vel话题,/turtlesim1/sim节点订阅了该话题
模仿节点mimic订阅到/turtlesim1/turtle1/pose话题,并发布/turtlesim2/turtle1/cmd_vel话题,/turtlesim2/sim节点订阅了该话题
所以就呈现了两只乌龟走相同路径


谢谢

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

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

相关文章

法规标准-GB/T 39323标准解读(2020版)

GB/T 39323是做什么的&#xff1f; GB/T 39323全称为乘用车车道保持辅助(LKA)系统性能要求及试验方法&#xff0c;其中主要描述了LKA系统的功能要求及测试要求 一般要求 1.系统应能在状态良好的车道边线环境下识别车辆与车道边线的相对位置&#xff0c;辅助驾驶员将车辆保持…

76.建立一个主体样式第二部分

上节课的时候我们完成的页面是这个样子&#xff01; ● 之后我们通过绝对定位来解决位置定位的问题 .header-container {width: 1200px;margin: 0 auto;position: absolute;left: 50%;top: 50%; }header {height: 100vh;background-color: orange;position: relative; }● 之…

通过Python的PyPDF2库提取pdf中的文字

文章目录 前言一、PyPDF2库是什么&#xff1f;二、安装PyPDF2库三、查看PyPDF2库版本四、使用方法1.引入库2.定义pdf路径3.打开PDF文件4.创建PDF阅读器对象5.获取PDF文件中的页数6.遍历每一页7.获取当前页内容8.提取当前页文本9.打印当前页文本10.效果 总结 前言 一、PyPDF2库…

【2023 · CANN训练营第一季】初识新一代开发者套件 Atlas 200I DK A2---介绍Atlas 200I DK A2的基本使用

1.Atlas 200I DK A2开发者套件板介绍 应用场景&#xff1a;昇腾AI开发者上手学习、实践创新场景&#xff0c;提供配套软硬件 关键特性规格描述形态135mm120mm44mmAI 算力整数精度&#xff08;INT8):8 TOPS 半精度&#xff08;FP16): 4 TFLOPS摄像头接口2* MIPI - CSI 支持两个…

研报精选230521

目录 【行业230521山西证券】煤炭行业周报&#xff1a;量减需增进口倒挂&#xff0c;煤炭价格企稳反弹 【行业230521东吴证券】大炼化周报&#xff1a;油价弱势震荡&#xff0c;下游表现疲软 【行业230521东海证券】4月社零报告专题&#xff1a;低基数下创新高&#xff0c;实质…

MyBatisX

文章目录 MyBatisXMybatis带参方法 动态条件查询多条件查询多条件-动态条件查询ifchoose(when,otherwise) 添加添加-主键返回 修改修改全部字段修改动态字段 删除MyBatis参数传递多个参数单个参数 MyBatis注解完成增删改查 MyBatisX pojo类中的属性名要和数据库中的一致才能实现…

ARM学习笔记_2 模式,寄存器,流水线

ARM arm体积小功耗低性能高&#xff0c;支持thumb ARM双指令集&#xff0c;兼容8/16位器件&#xff1b;大量使用寄存器&#xff0c;指令定长&#xff0c;寻址简单。 ARM是32位架构&#xff0c;Word 32bit&#xff0c; half Word 16bit. 模式 用户模式是用户程序的模式&#…

RK3568平台开发系列讲解(驱动基础篇)RK平台IR的使用

🚀返回专栏总目录 文章目录 一、红外遥控配置二、内核驱动2.1 DTS 定义键值表2.2 内核用户码和IR键值的获取2.3 编译 IR 驱动进内核2.4 Android 键值映射三、IR 波形沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将对RK IR的使用进行学习。 一、红外遥控配置 …

解决插件加载动态库的冲突问题

最近发给用户的插件在使用过程中&#xff0c;UI界面一直未能加载成功&#xff0c;分析后发现和其他的插件发生冲突了&#xff0c;同时用到了一个UI库&#xff1a;MahApps.Metro&#xff08;自己改造过的版本&#xff09;。 分析过程中使用ProcessExplorer查看Revit运行过程中所…

二叉树最大宽度-广度优先方式 -队列应用_20230520

二叉树最大宽度-广度优先(BFS)方式 -队列应用 前言 上一遍介绍了求解二叉树最大宽度的DFS解法&#xff0c;求解的核心主要是对根节点、左孩子及右孩子的宽度取最大值&#xff0c;通过赋值给根节点后&#xff0c;然后通过递归栈层层返回&#xff0c;当返回至树的根节点上的时候…

数字图像处理—图像分割算法详解(边缘检测、阈值处理)

前言 令R表示一幅图像占据的整个空间区域。图像分割&#xff1a;把R分为n个子区域R1,R2,…,Rn的过程&#xff0c;满足 点、线、边缘检测 背景知识 一阶导数的近似要求&#xff1a; &#xff08;1&#xff09;在恒定灰度区域必须为零 &#xff08;2&#xff09;在灰度台阶或…

【连续介质力学】张量值张量函数

张量值张量函数 张量值张量函数有以下类型&#xff1a;标量&#xff0c;向量和高阶张量 标量值张量函数&#xff1a; Ψ Ψ ( T ) det ⁡ T Ψ Ψ ( T , S ) T : S \Psi \Psi(T) \det T \\ \Psi \Psi(T,S) T:S ΨΨ(T)detTΨΨ(T,S)T:S 其中&#xff0c; T , S T, S …

【JavaEE】MyBatis + 单元测试

目录 MyBaits项目的创建使用 引入相关依赖 配置文件设置 数据库连接 配置XML路径 映射器文件模板 业务代码实例 创建实体类 添加Mapper接口创建映射器 验证是否成功 MyBatis原理 什么是MyBatis 为什么学习MyBatis MyBatis工作原理 单元测试 前置工作 生成测试…

Selenium是什么,带你了解自动化测试的神奇之处

一、使用测试工具 工欲善其事&#xff0c;必先利其器。在开始具体的自动化测试之前&#xff0c;我们需要做好更多的准备&#xff0c;包括以下几个方面&#xff1a; 认识自动化测试 准备自动化测试工具 使用有效的方式 针对具体的测试对象 接下来的第一部分内容&#xff0c;我…

基于Java web的电子商务系统

摘要 【摘要】 所谓电子商务就是在网上开展商务活动&#xff0c;当企业将它的主要业务通过企业内部网&#xff08;Intranet&#xff09;、外部网&#xff08;Extranet&#xff09;以及Internet与企业的职员、客户供销商以及合作伙伴直接相连时&#xff0c;其中发生的各种活动就…

基于SpringBoot的校园志愿者管理系统的设计与实现

背景 本次设计任务是要设计一个校园志愿者管理系统&#xff0c;通过这个系统能够满足管理员和志愿者的校园志愿者信息管理功能。系统的主要功能包括首页、个人中心、志愿者管理、活动类型管理、活动信息管理、活动报名管理、活动通知管理、活动心得管理、交流反馈、系统管理等…

【LTspice入门】一、LTspice安装

一、LTspice安装 1、仿真的重要性&#xff1a;2、LTspice介绍3、LTspice官网4、LTspice下载与安装 1、仿真的重要性&#xff1a; 掌握好电路仿真有助于加深对电子电路分析理论的理解。 由于电子电路仿真不需要实际的元件和仪器仪表设备,设计者就可以对所涉及的电子电路进行性能…

PCIE总线基本介绍(和PCI总线差异、速率计算、引脚定义)

1、PCI和PCIE的差异 (1)PCIE协议在软件编程上是兼容PCI协议&#xff0c;不同在于PCIE和PCI的控制器&#xff1b; (2)PCIE是差分串行信号线&#xff0c;PCI是电平并行信号线&#xff1b; (3)PCI协议使用INTA#、INTB#、INTC#、INTD#四根中断线来触发终端&#xff0c;PCIE协议没有…

sshd_conf 配置文件详解

/etc/ssh/sshd_config配置文件内容详解。 Port 22 设置SSHD监听端口号。 SSH 预设使用 22 这个port&#xff0c;也可以使用多个port&#xff0c;即重复使用 port 这个设定项&#xff01;例如想要开放SSHD端口为 22和222&#xff0c;则多加一行内容为&#xff1a; Port 222 即…

kotlin协程async与await

kotlin协程async与await import kotlinx.coroutines.* import kotlin.system.measureTimeMillisfun main() {val time measureTimeMillis {runBlocking {/*** async 是 CoroutineScope 扩展函数&#xff0c;async 和 launch 的区别在于async 可以返回协程结果&#xff0c;而 l…