ROS2从入门到精通0-4:ROS2核心架构与常用指令大全

目录

  • 0 专栏介绍
  • 1 ROS2核心架构
    • 1.1 工作空间
    • 1.2 功能包
  • 2 ROS2常用指令
    • 2.1 功能包相关
    • 2.2 节点运行相关
    • 2.3 话题相关
    • 2.4 参数相关
    • 2.4 录制包、播放包相关
    • 2.5 服务相关
    • 2.6 动作相关
    • 2.7 生命周期相关

0 专栏介绍

本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。

🚀详情:《ROS2从入门到精通》


1 ROS2核心架构

ROS2工程的核心架构如图所示

请添加图片描述

其中的核心概念阐述如下:

1.1 工作空间

工作空间是存放工程开发文件的地方,可能包含多个功能包,其中又细分为四个子空间:

  • 源码空间src:源码空间包含了功能包源代码
  • 编译空间build:编译空间存放编译源码空间产生的缓存信息和中间文件
  • 日志空间log:日志空间存放各种警告、错误、信息等日志;
  • 安装空间install:安装空间存放开发完毕并通过测试的构建目标,如可执行文件和脚本。

工作空间的名称可以自己定义,数量也并不唯一

1.2 功能包

功能包是ROS的基本功能单元,可能包含多个节点,其中包含工程文件主体

  • CMakeLists.txt(用于C++功能包):配置编译规则,比如源文件、依赖项、链接库,注意这里使用ament而非ROS1中的catkinament基于CMake构建系统,开发者可以方便地管理依赖关系、编译选项、安装目标等

    cmake_minimum_required(VERSION 3.8)
    project(node_lab)
    
    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)
    
    add_executable(node_helloworld_class src/node_helloworld_class.cpp)
    ament_target_dependencies(node_helloworld_class rclcpp)
    
    install(TARGETS
      node_helloworld_class
      DESTINATION lib/${PROJECT_NAME})
    
    ament_package()
    
  • package.xml(用于C++与Python功能包):包信息,比如包名、版本、作者

    <?xml version="1.0"?>
    <?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
    <package format="1">
      <name>node_lab</name>
      <version>0.0.0</version>
      <description>TODO: Package description</description>
      <maintainer email="winter@winter.com">winter</maintainer>
      <license>TODO: License declaration</license>
    
      <buildtool_depend>ament_cmake</buildtool_depend>
      <test_depend>ament_lint_auto</test_depend>
      <test_depend>ament_lint_common</test_depend>
    
      <export>
        <build_type>ament_cmake</build_type>
      </export>
    </package>
    
  • setup.py(用于Python功能包):包含版权信息,并配置程序入口

    setup(
        name=package_name,
        version='0.0.0',
        packages=[package_name],
        data_files=[
            ('share/ament_index/resource_index/packages',
                ['resource/' + package_name]),
            ('share/' + package_name, ['package.xml']),
            (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*.launch.py'))),
            (os.path.join('share', package_name, 'config'), glob(os.path.join('config', '*.*'))),
            (os.path.join('share', package_name, 'rviz'), glob(os.path.join('rviz', '*.*'))),
        ],
        install_requires=['setuptools'],
        zip_safe=True,
        maintainer='winter',
        maintainer_email='winter@winter.com',
        description='TODO: Package description',
        license='TODO: License declaration',
        tests_require=['pytest'],
        entry_points={
            'console_scripts': [
            ],
        },
    )
    
  • scripts:存储脚本文件,例如python源码或.sh脚本

  • src: 存储C++源文件

  • include:存储.h头文件

  • launch:存储启动文件,可一次性运行多个节点

  • config:存储配置信息

其中,package.xmlCMakeLists.txt非常重要,前者作为功能包入口声明依赖关系;后者解析.xml并执行具体的查找依赖、链接库等行为,文件缺失或错误配置都会导致编译失败。

2 ROS2常用指令

2.1 功能包相关

  • 查看功能包列表

    ros2 pkg list
    
  • 创建一个新的功能包

    ros2 pkg create --build-type ament_cmake package_name
    
  • 创建功能包时添加依赖项

    ros2 pkg create --build-type ament_cmake package-name --dependencies [deps]
    
  • 编译所有功能包

    colcon build
    
  • 编译指定功能包

    colcon build –packages-select package_name
    

2.2 节点运行相关

  • 查看所有运行节点

    ros2 node list
    
  • 查看某一个节点信息

    ros2 node info node_name
    
  • 节点运行方式1

    ros2 run package_name executable_file
    
  • 节点运行方式2

    ros2 launch package_name node_launch_file (e.g., .py, .launch)
    

2.3 话题相关

  • 查看系统内活跃topic

    ros2 topic list
    
  • 查看topic的消息类型

    ros2 topic type topic_name
    
  • 显示topic内容

    ros2 topic echo topic_name
    
  • 向特定topic发送数据,其中args是实际数据,需要以YAML格式输入

    ros2 topic pub topic_name msg_type 'args' [--once | --rate <num>]
    
    • 例1:发送一次运动指令
      ros2 topic pub --once /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}}"
      
      其中--once表示发布一个消息然后退出
    • 例2:以10Hz发送运动指令
      ros2 topic pub --rate 10 /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}}"
      
      其中--rate num表示以numHz稳定流发布消息
  • 查看发布数据的帧率

    ros2 topic hz topic name
    

2.4 参数相关

  • 查看节点的子命名空间和参数

    ros2 param list
    
  • 获取当前参数的值

    ros2 param get node_name param_name
    
  • 设置参数的值

    ros2 param set node_name param_name value
    
  • 存储节点所有参数值到本地的node_name.yaml文件

    ros2 param dump node_name
    
  • 存储节点的所有参数值到指定路径

    ros2 param dump node_name --output-dir /path
    
  • 导入本地参数文件

    ros2 run package_name executable_name --ros-args --params-file <file_name>
    

2.4 录制包、播放包相关

  • 查看bag信息
    ros2 bag info bag_name
    
  • 正常播包命令
    ros2 bag play bag_dir_name
    
  • 倍速播包命令
    ros2 bag play bag_dir_name -r 2
    
  • 循环播包命令
    ros2 bag play bag_dir_name -l
    
  • 播放单个topic
    ros2 bag play bag_dir_name --topics /topic_name
    

以上包路径bag_dir_name也可以换成具体的包数据库文件xxx.db3

  • 录制特定topic的包
    ros2 bag record topic_name
    
  • 录制多个topic的包
    ros2 bag record -o new_bag_name topic1_name topic2_name
    
  • 录制所有topic的包
    ros2 bag record -a
    

以上录制完成后会在本地多一个bag_dir_name,其中包含配置.yaml和数据.db3

2.5 服务相关

  • 查看服务列表

    ros2 service list		# 加-t可显示服务消息类型
    
  • 查看服务的数据类型

    ros2 service type service_name
    
  • 查找使用指定数据类型的服务

    ros2 service find type_name
    
  • 通过命令行调用服务

    ros2 service call <service_name> <service_type> <args>
    

    例如

    ros2 service call /spawn turtlesim/srv/Spawn “{x: 2, y: 2, theta: 0.2, name: ‘’}

2.6 动作相关

  • 列出域内可用的动作列表

    ros2 action list	# 加 -t 可显示动作消息类型
    
  • 查看指定action的信息

    ros2 action info action_name
    
  • 模拟客户端手动发起动作请求

    ros2 action send_goal <action_name> <type_name> <goal_data> <--feedback>
    

    --feedback指定是否显示反馈信息,例如

    ros2 action send_goal /crossing_acton duckietown_interface/action/Crossing “{speed: 0.2, direction: ‘right’}--feedback
    

2.7 生命周期相关

  • 查看有哪些lifecycle节点
    ros2 lifecycle nodes
    
  • 查看lifecycle节点所有可行的转换
    ros2 lifecycle list node_name -a
    
  • 获取节点状态
    ros2 lifecycle get node_name
    
  • 设置节点状态
    ros2 lifecycle set node_name configure
    

🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

农村分散式生活污水分质处理及循环利用技术指南

标准已完成意见征集&#xff1a; 本文件给出了农村分散式生活污水分质处理及循环利用的总则、污水收集、污水分质处理、资源化利用、利用模式、运维管理等的指导。 本文件适用于农村分散式生活污水分质处理及循环利用的设施新建、扩建和改建工程的设计、施工与运维。 注:本文件…

AndroidStudio中一些实用插件

1.RainbowBrackets插件为圆括号、方括号和花括号内的代码添加了漂亮的彩虹色 2.CodeGlance类似于Sublime或Xcode&#xff0c;CodeGlance插件在编辑器中嵌入了代码迷你图。滚动条也有所增大。在CodeGlance预览文件的代码模式下&#xff0c;用户可以快速导航到目标处。 3.ADBWifi…

【数据分析面试】2.连续访问最长天数用户(SQL)

题目 给定一个包含事件日志的表格&#xff0c;找出连续访问平台时间最长的前五个用户。 注意&#xff1a;连续访问是指用户在连续的几天内每天至少访问一次平台。 示例&#xff1a; 输入&#xff1a; events 表 ColumnTypeuser_idINTEGERcreated_atDATETIMEurlVARCHAR 输…

第115讲:Mycat核心配置文件各项参数的作用以及概念

文章目录 1.Mycat配置文件相关概念2.Schema配置文件3.Rule配置文件4.Server配置文件 1.Mycat配置文件相关概念 在Mycat中核心的配置文件有schema.xml和rule.xml以及server.xml三个&#xff0c;其中schema.xml是用来配置数据库、表、读写分离、分片节点、分片规则等信息&#x…

transformers的tokenizer总结

1.BPE&#xff08;byte-pair encoding) 根据字母搭配出现的频率组成词根。 初始vocabulary&#xff1a;["b", "g", "h", "n", "p", "s", "u"] 假设训练数据中有10个hug,5个pug,12个pun&#xff0c;4…

教育数字化调研团走进锐捷,共议职业教育数字化转型新思路

为贯彻落实国家教育数字化战略行动部署和2024年全国教育工作会议精神,加快推进职业教育数字化转型与发展,梳理职业教育数字化转型的现状、问题及发展趋势,并总结展示职业教育数字化转型的好经验、好做法,培育职业教育数字化创新成果,推动数字技术与职业教育深度融合、提高数字化…

学习JavaEE的日子 Day32 线程池 上

Day32 线程池 1.引入 一个线程完成一项任务所需时间为&#xff1a; 创建线程时间 - Time1线程中执行任务的时间 - Time2销毁线程时间 - Time3 2.为什么需要线程池(重要) 线程池技术正是关注如何缩短或调整Time1和Time3的时间&#xff0c;从而提高程序的性能。项目中可以把Time…

PostgreSQL关系型数据库介绍与部署

使用背景 在过去的几年中&#xff0c;PostgreSQL的使用量逐渐增加&#xff0c;而Oracle和MySQL的使用量则有所下降。这主要是由于以下几个原因&#xff1a;开源和免费、功能丰富、可扩展性强、安全性高、跨平台支持好、社区活跃、成熟稳定。这些因素使得PostgreSQL成为了许多开…

2014年认证杯SPSSPRO杯数学建模A题(第二阶段)轮胎的花纹全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 A题 轮胎的花纹 原题再现&#xff1a; 轮胎被广泛使用在多种陆地交通工具上。根据性能的需要&#xff0c;轮胎表面常会加工出不同形状的花纹。在设计轮胎时&#xff0c;往往要针对其使用环境&#xff0c;设计出相应的花纹形状。   第二阶段问…

深度学习语义分割篇——DeepLabV1原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

UMEDITOR – 支持WORD上传的富文本编辑器

1.下载代码 https://gitee.com/xproer/zyoffice-umeditor1x 2.引入组件 3.配置接口 效果

使用yolov9来实现人体姿态识别估计(定位图像或视频中人体的关键部位)教程+代码

yolov9人体姿态识别&#xff1a; 相较于之前的YOLO版本&#xff0c;YOLOv9可能会进一步提升处理速度和精度&#xff0c;特别是在姿态估计场景中&#xff0c;通过改进网络结构、利用更高效的特征提取器以及优化损失函数等手段来提升对复杂人体姿态变化的捕捉能力。由于YOLOv9的…

出口落叶就能获取暴利,他却要断了这条财路!学会人生算法重启装置应用!——早读(逆天打工人爬取热门微信文章解读)

重启装置的应用&#xff0c;你学会了吗&#xff1f; 引言Python 代码第一篇 人民日报 出口落叶就能获取暴利&#xff0c;他却要断了这条财路&#xff01;第二篇 人民日报 来啦 早班车新闻要闻社会政策 结尾 昨日之覆辙 非明日之方向 泰戈尔曾言 你不能拽着自己的头发离开地面 因…

电商企业如何用数据打造破局利器:电商API数据采集实时接口助力企业618双十一各大活动

在电商行业中&#xff0c;618大促无疑是一场引爆商机的盛宴。 随着市场环境的变更&#xff0c;如何在这样高强度的活动期间脱颖而出&#xff0c;成为每个品牌都需要面对的重要问题。 大促期间&#xff0c;实时、准确的数据是核心竞争力。因为在大促中&#xff0c;核心渠道、核…

HBase的Python API(happybase)操作

一、Windows下安装Python库&#xff1a;happybase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase&#xff0c;需要开启HBase的Thrift服务。所以&#xff0c;在Linux服务器上&#xff0c;执行如…

PCL 彩色点云RGB转灰度并显示

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 不同要素之间的灰度差异较为明显。点云灰度值与RGB属性的关系为:

Mysql数据库:高级SQL语言详解

目录 前言 一、按关键字排序查询 1、单字段排序 1.1 按某一字段升序排序 1.2 按某一字段降序排序 1.3 结合where进行条件进行排序 2、多字段排序 2.1 按多字段升序排序 2.2 按多字段降序排序 2.3 案例操作 3、区间判断及查询不重复记录 3.1 区间判断 3.1.1 AND/OR…

【数据结构】链表习题之反转链表和删除链表中等于给定值 val 的所有节点

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;道阻且长&#xff0c;行则将至 前言 今天的博客是关于链表的题目&#xff0c;力扣上的题目之反转链表和删除链表中等于给定值 val 的所有节点 一.反转…

PMP考试难不难,通过率怎样?

PMP考试自从新考纲调整后有几次考试难度是非常高的&#xff0c;那段时间我也看网上好多机构通过率都不咋地&#xff0c;当时也是因为官方的出题难度稍高&#xff0c;还组织了免费的重考&#xff0c;也是后来逐渐开始归于平常了吧&#xff0c;直到现在都是我认为比较简单的选择题…

Go通道机制与应用详解

目录 一、概述二、Go通道基础通道&#xff08;Channel&#xff09;简介创建和初始化通道通道与协程&#xff08;Goroutine&#xff09;的关联nil通道的特性 三、通道类型与操作通道类型1. 无缓冲通道 (Unbuffered Channels)2. 有缓冲通道 (Buffered Channels) 通道操作1. 发送操…