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

news/2024/5/11 2:31:17

目录

  • 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(TARGETSnode_helloworld_classDESTINATION 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深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

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

http://www.mrgr.cn/p/43718856

相关文章

工业互联网下的增强现实

工业互联网下的增强现实 1、 概述 增强现实&#xff08;Augmented Reality&#xff0c;简称AR&#xff09;&#xff0c;增强现实技术也被称为扩增现实&#xff0c;AR增强现实技术是促使真实世界信息和虚拟世界信息内容之间综合在一起的较新的技术内容&#xff0c;其将原本在现…

[转帖]比黄金更贵的显卡,疯狂H100

https://zhuanlan.zhihu.com/p/654361974 华尔街和硅谷联袂奉上了一件震撼业界的大事:让一家创业公司拿到23亿美元的债务融资,抵押物则是当前全球最硬的通货——H100显卡。 这个大事件的主角叫做CoreWeave,主营业务是AI私有云服务,简单说就是通过搭建拥有大量GPU算力的数据…

Godot.NET C# 工程化开发(1):通用Nuget 导入+ 模板文件导出,包含随机数生成,日志管理,数据库连接等功能

文章目录 前言Github项目地址&#xff0c;包含模板文件后期思考补充项目设置编写失误环境visual studio 配置详细的配置看我这篇文章 Nuget 推荐NewtonSoft 成功Bogus 成功Github文档地址随机生成构造器生成构造器接口(推荐) 文件夹设置Nlog 成功&#xff01;Nlog.configNlogHe…

[转帖]PCIe7.0宣布即将2025推出

https://zhuanlan.zhihu.com/p/532935941 jiu导言 在2022年的PCI-SIG的开发者大会上,PCI-SIG总裁庆祝了PCI-SIG成立30周年并宣布PCIe技术的下一代技术展望,并且计划在2025年向成员发布PCIe7.0标准。而在未来3年中即将推出的PCIe7.0再次提供速度提升(相比较PCIe6.0翻倍,X16双…

SystemServer 启动流程

SystemServer 启动流程 一、介绍SystemServer 是 Android 进入 Launcher 前的最后准备,顾名思义,它提供了众多由 Java 语言编写的服务 在 Zygote 自启动过程中,参数 bool startSystemServer 为真的话,那么在 ZygoteInit.java/main() 就会调用函数 forkSystemServer() 生成 …

Python爬虫学习完整版

一、什么是爬虫 网络爬虫&#xff0c;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性&#xff0c;根据用户需求定向抓取相关网页并分析也成为如今主流的爬取策略。 1 爬虫可以做什么 你可以爬取网络上的的图片&#…

[转帖]Arm更新Neoverse产品路线图:N3/V3内核曝光,能效及AI性能大涨

https://new.qq.com/rain/a/20240222A0495O00 +关注2月22日,半导体IP大厂Arm宣布推出新一代 Arm Neoverse 技术。其中包括,通过性能效率更优异的 N 系列新 IP 扩展 Arm Neoverse 计算子系统 (CSS) 产品路线图。与 Neoverse CSS N2 相比,Neoverse CSS N3 的每瓦性能可提高 20…

js 回调 callback

<html> <head> <title>按钮点击事件示例</title> <script> function a(callback) { console.log("执行函数a!"); console.log("调用回调函数"); callback(); // 调用回调函数 }function b(){ console.log("回…

【AI漏洞】人工而后智能

注&#xff1a;公众号暂时不再使用了 本文主要内容&#xff1a; 1、主题&#xff1a;AI漏洞 2、过程&#xff1a;测试步骤 3、笔者&#xff1a;寄语 &#xff08;重点&#xff1a;本文只做技术研究&#xff0c;请遵守相关法律法规&#xff0c;发现自身单位有漏洞请及时修复&…

openssl AF_ALG引擎使用

cmd AF_ALG是Linux提供的一种虚拟接口&#xff0c;用于访问内核中的加密算法。在Linux中&#xff0c;可以使用AF_ALG接口配合加密算法框架&#xff08;Crypto API&#xff09;来进行加密操作。 以下是一个使用AF_ALG和openssl进行加密操作的例子&#xff1a; # 加密 openssl…

前端学习之用css和html做一个仿淘宝的导航栏

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>仿淘宝界面案例</title><style>/* 最外层盒子 */.container{width: 270px;height: 385px;border: 1px solid rgb(255, 208, 0);bord…

基于云计算的前端资源管理系统的设计与实现

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 随着互联网的快速发展&#xff0c;前端资源管理成为了一个重要的课题。本文旨在设计并实…

阿里云账号注册流程_2024年最新阿里云账户注册和实名认证流程

阿里云账号怎么注册&#xff1f;阿里云账号支持手机号注册、阿里云APP注册、淘宝、支付宝和钉钉多种注册方式&#xff0c;账号注册后需要通过实名认证才可以购买或使用云产品&#xff0c;使用淘宝、支付宝或钉钉注册方式可以免去实名认证步骤&#xff0c;阿里云百科aliyunbaike…

计算机网络(二)物理层

物理层 一、通信基础1.奈氏准则、香农定理2.编码与调制3.电路交换、报文交换、分组交换 二、 传输介质、设备1.导向性传输介质&#xff1a;1.1双绞线1.2 同轴电缆1.3光纤 2.非导向性传输介质&#xff1a; 一、通信基础 信道带宽&#xff1a;信道能通过的最高频率和最低频率之差…

MobileVIT原理详解篇

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

台灯护眼灯哪个牌子好?明基、书客、爱德华医生旗舰款护眼灯推荐

今日&#xff0c;我为大家深入评测了数款旗舰护眼台灯&#xff0c;目的在于帮助大家避开选购误区&#xff0c;为我们的双眼营造一个既健康又安全的照明环境。每一款台灯都经过严格的实测数据对比&#xff0c;从而揭示出它们各自的优劣。无论是从照明效果、舒适性还是使用寿命等…

记一次 .NET某防伪验证系统 崩溃分析

一:背景 1. 讲故事 昨晚给训练营里面的一位朋友分析了一个程序崩溃的故障,因为看小伙子昨天在群里问了一天也没搞定,干脆自己亲自上阵吧,抓取的dump也是我极力推荐的用 procdump 注册 AEDebug 的方式,省去了很多沟通成本。 二:WinDbg分析 1. 为什么会崩溃 windbg有一个非…

MappedByteBuffer VS FileChannel:从内核层面对比两者的性能差异

本文基于 Linux 内核 5.4 版本进行讨论自上篇文章《从 Linux 内核角度探秘 JDK MappedByteBuffer》 发布之后,很多读者朋友私信我说,文章的信息量太大了,其中很多章节介绍的内容都是大家非常想要了解,并且是频繁被搜索的内容,所以根据读者朋友的建议,笔者决定将一些重要的…

SpringCloud(三)统一网关 -- GateWay

gateway官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/网关的作用: 1、对用户请求做身份认证、权限校验 2、将用户请求路由到微服务,并实现负载均衡 3、对用户请求做限流搭建网关服务 基本使用只配置 1、2 步就可以 …

【机器学习】包裹式特征选择之序列前向选择法

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…