ROS2代码阅读笔记2-ROS 2 启动文件Python

ROS2教程 - 4 话题通信 在搭建 ROS2 环境的时候,演示了小海龟案例,其中启动了两个节点,一个是窗口显示小海龟的节点,一个是键盘控制的节点。键盘为什么能控制小海龟窗口的运动呢,这里就涉及到节点之间的通信。在机器人的组件中,有摄像头、雷达等传感器,这些传感器都是一个个节点,他们会采集数据,并将数据传递给其他一个或多个节点进行显示或处理。ROS 中节点间的通信有很多方式,例如话题、服务、参数服务器等,其中话题是用的最多的一种通信方式,像摄像头数、雷达等数据都是话题在节点之间进行传输的。 阅读详情
from ament_index_python.packages import get_package_share_path, get_package_share_directory
  • get_package_share_path(package_name): 返回指定包的共享目录的路径,使用 pathlib.Path 对象表示。
  • get_package_share_directory(package_name): 返回指定包的共享目录的路径,使用字符串表示。
#这些函数用于获取 ROS 2 包的共享目录路径,通常用于查找配置文件、URDF 文件等
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription
from launch.conditions import IfCondition, UnlessCondition
from launch.substitutions import Command, LaunchConfiguration
  • LaunchDescription: 描述一组将被一起启动的动作和事件。
  • DeclareLaunchArgument: 声明一个启动参数,允许用户在运行时指定参数值。
  • IncludeLaunchDescription: 包含另一个启动文件的描述。
  • IfCondition: 条件动作,如果条件为真,则执行某些动作。
  • UnlessCondition: 条件动作,如果条件为假,则执行某些动作。
  • Command: 运行一个命令并使用其输出作为参数值。
  • LaunchConfiguration: 获取启动参数的值。
#这些库用于定义和控制 ROS 2 启动文件的行为和逻辑
from launch_ros.actions import Node
#这个库用于启动和配置 ROS 2 节点
from launch_ros.parameter_descriptions import ParameterValue

#这个库用于设置和传递 ROS 2 节点的参数
from launch.launch_description_sources import PythonLaunchDescriptionSource
# PythonLaunchDescriptionSource: 允许包含另一个 Python 启动文件的描述
#配置路径
urdf_tutorial_path = get_package_share_path('yahboomcar_description')
default_model_path = urdf_tutorial_path / 'urdf/yahboomcar_X3.urdf'
default_rviz_config_path = urdf_tutorial_path / 'rviz/yahboomcar.rviz'
#声明启动参数,这些路径指向机器人的 URDF 文件和 RViz 配置文件
#这些参数允许在运行时配置不同的选项,如是否启用 GUI、URDF 文件路径、RViz 配置路径和是否发布 odom 到 base_footprint 的 TF。
gui_arg = DeclareLaunchArgument(name='gui', default_value='false', choices=['true', 'false'], description='Flag to enable joint_state_publisher_gui')
model_arg = DeclareLaunchArgument(name='model', default_value=str(default_model_path), description='Absolute path to robot urdf file')
rviz_arg = DeclareLaunchArgument(name='rvizconfig', default_value=str(default_rviz_config_path), description='Absolute path to rviz config file')
pub_odom_tf_arg = DeclareLaunchArgument('pub_odom_tf', default_value='false', description='Whether to publish the tf from the original odom to the base_footprint')
#生成机器人的描述参数,使用 xacro 工具将 URDF 文件解析为 XML
robot_description = ParameterValue(Command(['xacro ', LaunchConfiguration('model')]), value_type=str)
定义节点
  • robot_state_publisher_node: 发布机器人的状态信息。
  • joint_state_publisher_node: 发布关节状态信息(在未启用 GUI 时)。
  • joint_state_publisher_gui_node: 发布关节状态信息(在启用 GUI 时)。
  • rviz_node: 启动 RViz 以可视化机器人。
  • driver_node: 启动机器人驱动节点。
  • base_node: 启动机器人基础功能节点,并配置 pub_odom_tf 参数。
  • imu_filter_node: 启动 IMU 滤波节点,使用指定的配置文件。
  • ekf_node: 启动 EKF(扩展卡尔曼滤波)节点。
  • yahboom_joy_node: 启动机器人控制节点。
robot_state_publisher_node = Node(
    package='robot_state_publisher',
    executable='robot_state_publisher',
    parameters=[{'robot_description': robot_description}]
)

joint_state_publisher_node = Node(
    package='joint_state_publisher',
    executable='joint_state_publisher',
    condition=UnlessCondition(LaunchConfiguration('gui'))
)

joint_state_publisher_gui_node = Node(
    package='joint_state_publisher_gui',
    executable='joint_state_publisher_gui',
    condition=IfCondition(LaunchConfiguration('gui'))
)

rviz_node = Node(
    package='rviz2',
    executable='rviz2',
    name='rviz2',
    output='screen',
    arguments=['-d', LaunchConfiguration('rvizconfig')],
)

imu_filter_config = os.path.join(
    get_package_share_directory('yahboomcar_bringup'),
    'param',
    'imu_filter_param.yaml'
)

driver_node = Node(
    package='yahboomcar_bringup',
    executable='Mcnamu_driver_X3',
)

base_node = Node(
    package='yahboomcar_base_node',
    executable='base_node_X3',
    parameters=[{'pub_odom_tf': LaunchConfiguration('pub_odom_tf')}]
)

imu_filter_node = Node(
    package='imu_filter_madgwick',
    executable='imu_filter_madgwick_node',
    parameters=[imu_filter_config]
)

ekf_node = IncludeLaunchDescription(
    PythonLaunchDescriptionSource([os.path.join(
        get_package_share_directory('robot_localization'), 'launch'),
        '/ekf_x1_x3_launch.py'])
)

yahboom_joy_node = Node(
    package='yahboomcar_ctrl',
    executable='yahboom_joy_X3',
)
#这个部分将所有声明的参数和节点加入到 LaunchDescription 对象中并返回,以便 ROS 2 在启动时使用。
return LaunchDescription([
    gui_arg,
    model_arg,
    rviz_arg,
    pub_odom_tf_arg,
    joint_state_publisher_node,
    joint_state_publisher_gui_node,
    robot_state_publisher_node,
    driver_node,
    base_node,
    imu_filter_node,
    ekf_node,
    yahboom_joy_node
])

ros2 Navigation 学习笔记 第一、二章(the construct 网站) 根据国外网站the construct的ros2 navigation基础教程 阅读详情

相关推荐

ROS2学习笔记(十)-- ROS2 launch启动文件

简介:接触过ROS1的同学对launch肯定不陌生,在ROS1中,我们常用launch实现node和master同时启动、多节点同时启动配置等功能,ROS2中的launch也是用于多节点启动、配置功能,但是在使用方法上有了很多不同,ROS1只支持xml格式的.launch文件配置,ROS2在兼容xml的基础上,还支持yaml和python格式,而python格式的launch是我的学习重点,因为相对于另外两种配置方式,使用python更加灵活:

aibingjin的博客 2万+

ROS2 C++ 调参——( 1 ) Param基础命令 和 如何配置 configs.yaml

Param基础命令 和 如何配置 configs.yaml

2203_76027118的博客 3507

ROS2-在编译类型为ament_python的包里安装launch文件方法

ROS2 setup.cfg 这个文件将告诉脚本将安装在哪里 修改setup.py以安装launch文件 关键在这一行 (os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')), 还可以安装yaml结尾的 (os.path.join('share', package_name, 'config'), glob('config/*.yaml')), import os from glob import glob

生活不止眼前的苟且 1461

ROS 2边学边练(31)-- 管理大工程

本篇主要介绍了ROS 2中如何通过launch文件来管理比较大的工程(多节点),并举例说明。

DIANZI520SUA的专栏 1824

提炼总结—ROS2机器人开发(第2章)

《ROS2机器人开发 从入门到实践》是一本从零基础到实战落地的机器人开发指南,通过"基础理论+工具详解+项目实战"的三阶学习路径,带你掌握机器人操作系统ROS2核心架构。书中不仅包含通信机制、URDF建模等必备知识,更有SLAM导航、机械臂控制等12个工业级案例,配合Git代码库和仿真环境配置指南,帮助开发者快速实现从算法仿真到真机部署的完整闭环。无论是学生、工程师还是科研人员,都能通过本书构建系统的ROS2开发能力,抢占机器人技术前沿阵地。

weixin_41705306的博客 1735

ROS入门跟着我就够了(一)ROS概述与环境搭建

编写 ROS 程序,在控制台输出文本: Hello World,分别使用 C++ 和 Python 实现。ROS中的程序即便使用不同的编程语言,实现流程也大致类似,以当前HelloWorld程序为例,实现流程大致如下:先创建一个工作空间;再创建一个功能包;编辑源文件;编辑配置文件;编译并执行。赵老师说的这个流程基本上就是一个完整的开发思路,之前就听说ROS开发基本是站在巨人肩膀上学习,看来是真的,只要你会调用已写好的功能包,使其适配即可完成功能的实现。1.创建工作空间并初始化。

zhangyuanbonj的博客 1万+

ROS2手写接收IMU数据(Imu)代码并发布

ROS2 humble手写python通过串口接收IMU数据并发布

scarecrow_sun的博客 8866

MMCV安装后报错‘from mmcv import Config’?别慌,这是MMCV 2.0的锅!快速降级回退MMCV 1.x全指南

本文详细解析了MMCV 2.0版本升级导致的‘from mmcv import Config’报错问题,提供了从诊断到降级回退MMCV 1.x的完整解决方案。通过pip和OpenMIM工具链的实操指南,帮助开发者快速解决版本冲突,确保项目稳定运行。

weixin_29102619的博客 263

【ROS2指南-19】使用Launch启动/监控多个节点

使用Launch启动和监控多个节点

weixin_39538031的博客 1520

嘉立创EDA实战:从点亮第一盏灯到完成首块PCB

本文详细介绍了使用嘉立创EDA从点亮第一盏LED灯到完成首块PCB的全过程。通过实战案例分享,包括原理图绘制、PCB设计、DRC检查、覆铜操作等关键步骤,帮助电子设计爱好者快速掌握嘉立创EDA的使用技巧,并避免常见的设计错误。

weixin_30314793的博客 373

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search 发表位置 ECCV 2020 摘要 作者提出了一种基于得分的黑盒Square attack,该模型不依赖于模型的局部梯度信息,因此可以绕过梯度隐藏防御攻击。Square Attack是一种随机搜索方法,它在随机位置选择局部的方形更新,使得每次迭代时扰动近似位于可行集的边界。 背景 当涉及到对安全至关重要的机器学习应用时,对抗性的例子尤其值得

yayayamaomaoya的博客 2493

ROS2学习笔记1--配置ros2环境

概要:这篇主要介绍是配置ros2环境. 环境:ubuntu20.04,ros2-foxy,vscode 2.1.1配置ros2环境(原文:https://docs.ros.org/en/foxy/Tutorials/Configuring-ROS2-Environment.html) >>教程>>配置ros2环境 你正阅读的是ros2较老版本,但仍然支持的说明文档.想查看最新版本的信息,请看galactic版本链接( https://docs.ros.org/en/galactic/

qq_45701501的博客 4749

从零到一:手把手教你构建自定义ReaxFF力场参数

本文手把手教你从零构建自定义ReaxFF力场参数,详解反应力场的动态键序机制与参数化逻辑。通过LAMMPS实战演示,涵盖训练数据准备、参数优化算法选择及性能优化技巧,助力研究人员精准模拟化学反应过程。适用于材料科学、催化研究等领域,特别适合已掌握分子动力学基础的进阶用户提升力场开发能力。

weixin_28365523的博客 1057

ROS2 Humble学习笔记 (2)

本文是我按照ROS2 humble官方入门教程的第二部分学习过程的理解和记录。按照官方入门教程理论上不会出现问题,但有一些概念本文可能会理解的更清楚。本文不能代替入门教程。但可以作为你在学习入门教程过程的一个扶手和参考。

watershade2010的专栏 1740

uni-app蓝牙MTU设置失效探因:从20字节限制到跨设备兼容性实战

本文深入探讨了uni-app蓝牙开发中MTU设置失效的常见问题,特别是20字节限制的成因及解决方案。通过分析设备兼容性、蓝牙协议栈特性和系统版本差异,提供了智能延迟策略、设备特征检测和渐进式MTU提升等实战方案,帮助开发者优化蓝牙数据传输效率。

weixin_29289821的博客 288

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

官网:www.SZLCSC.COM以芯片为例器件类——>芯片类——>对应芯片确定芯片——>数据手册1:原理图2:PCB3:打开操作流程选中原理图——>文件——>导出——>AD1: ✔2:导出AD文件操作流程选中PCB图——>文件——>导出——>AD1: ✔2:导出AD文件1:PCB图2:原理图操作流程文件——>打开操作流程选中文件——>打开操作流程项目文件——>添加新的...到工程——>Schematic Library新原理图库操作流程项目文件——>添加新的...到工程——>PCB Library新的PC

XU157303764的博客 5437

《动手学ROS2》1.2ROS与ROS2对比

本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途。 1.2 ROS与ROS2对比 经过上一节的学习,相信你已经对ROS和ROS2的发展有了一定的了解,本节小鱼将给大家从多个角度讲解ROS和ROS2的区别之处。 1.ROS问题举例 上节课说到ROS的设计目标是简化机器人的开发,如何简化呢?ROS为此设计了一整套通信机制(话题、服务、参数、动作)。 通过这些通信机制,ROS实现了将机器人的.

生活不止眼前的苟且 1912

【实战项目开发技术分享】ROS1.0、ROS 2.0和CyberRT开源通信框架对比

随着机器人和自动驾驶技术的飞速发展,开源通信框架在机器人、自动驾驶行业扮演着重要的角色。ROS1.0是一个广泛应用于机器人领域的开源框架,ROS 2.0是其改进版本,而CyberRT是Baidu Apollo自动驾驶平台的通信框架。ROS和ROS 2.0都注重灵活性和共享性,适用于各种机器人应用。CyberRT则专注于实时性和高性能,适用于自动驾驶等对实时性要求较高的场景。选择适合的框架取决于具体应用需求和开发者的偏好。

xiewf的博客 2万+

代码实践思考:ROS1和ROS2

ROS1大量案例直接批处理用智能工具转为ROS2案例不同版本之间的工具软件直接用智能方式进行代码升级例如OpenCV之类,一些函数变化,直接用智能工具进行批量代码优化。

zhangrelay的专栏 1334

多思计组实验实验三、存储器读写实验

实验三、存储器读写实验

qq_53089329的博客 3652

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ROS学习笔记一

ROS21讲,ROS入门

鳿_的博客 2662

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【ROS2机器人入门到实战】2.ROS与ROS2对比

获取完整教程及配套资料代码,请关注公众号获取两驱版四驱版为方便交流,搭建了机器人技术问答社区:地址经过上一节的学习,相信你已经对ROS和ROS2的发展有了一定的了解,本节小鱼将给大家从多个角度讲解ROS和ROS2的区别之处。1.ROS问题举例上节课说到ROS的设计目标是简化机器人的开发,如何简化呢?ROS为此设计了一整套通信机制(话题、服务、参数、动作)。通过这些通信机制,ROS实现了将机器人的各个组件给的连接起来,在设计这套通信机制的时候就设计了一个叫做Ros Master。

生活不止眼前的苟且 8681

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ros2笔记-3.2python 话题订阅与发布

简单介绍了话题发布订阅通信的概念,并通过python实现了一个发布订阅语音合成的例子。

bohu83的博客 1620

ROS2入门21讲__第15讲__Launch:多节点启动与配置脚本

到目前为止,每当我们运行一个ROS节点,都需要打开一个新的终端运行一个命令。机器人系统中节点很多,每次都这样启动好麻烦呀。有没有一种方式可以一次性启动所有节点呢?答案当然是肯定的,那就是,它是ROS系统中多节点启动与配置的一种脚本。这是一个完整的Launch文件,乍看上去,好像Python代码呀,没错,。Launch的核心目的是,我们在命令行中输入的各种参数,在Launch文件中,通过类似这样的很多代码模版,也可以进行配置,甚至还可以使用Python原有的编程功能,大大丰富了启动过程中的多样化配置。

sangyongqi的博客 1767

ROS2代码阅读笔记3-ROS2激光雷达简单避障行为

ROS2简单的雷达避障

Java_Caorui的博客 1460

从零开始的 ROS2 指南(一)

在 2016 年,当我共同创立一家机器人初创公司时,我在寻找构建新六轴机器人手臂软件的工具和技术,偶然发现了 ROS。不知何故,我有一种直觉,认为 ROS 似乎正是我一直在寻找的东西。然而,我并不能真正理解它是什么,或者它在做什么。我花了很长时间才理解 ROS,在学习的过程中,我意识到这个过程有多么痛苦。当时(现在也是如此)缺乏清晰的教学材料和在线资源,尤其是对于初学者。随着我多年来继续使用 ROS,我也意识到这不仅仅是我一个人遇到的问题——许多其他开发者仍然感到迷茫。

龙哥盟 2685
上一篇: ROS2代码阅读笔记1-发布里程计消息和广播相应的 TF 变换
下一篇: PX4 1.13-EKF2 EKF2代码注释
Lelin_8013
博客等级 码龄6年 423粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值