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(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.mzph.cn/news/776122.shtml

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

相关文章

DP4301-M无线模块一款SUB-1G无线收发模块

DP4301-M无线模块是一款低成本高效率工作于1GHz以内的收发模块&#xff0c;支持中国智能电无线 集抄标准470MHz~ 510MHz&#xff0c;兼容433MHz ISM/SRD频段均可使用。 此模块且前已经超大量应用于国标智能无线抄表及物联网自组网等双向数据传输系统方案&#xff0c;模 块具备的…

Mybatis-获取参数值的两种方式

1. ${ } 和 #{ } MyBatis获取参数值的两种方式&#xff1a;${ } 和 #{ } 对于初学者来说&#xff0c;理解MyBatis中获取参数值的两种方式——#{}和${}&#xff0c;关键在于明白它们如何影响SQL语句的构建以及为何在安全性、灵活性上有显著差异。下面我将用简单易懂的语言来解…

康耐视visionpro-CogAcqFifoTool工具详细说明

CogAcqFifoTool操作说明&#xff1a; ① 打开工具栏&#xff0c;双击或点击鼠标拖拽 添加CogAcqFifoTool ②.从图片采集设备/图像采集卡列表里选择对应的相机&#xff0c;视频格式选择图像格式。 Mono表示黑白图像&#xff0c;RGB表示彩色相机。点击初始化取相初始化相机。 ③…

【元器件-电阻篇】0Ω电阻在电路中有什么作用

电路设计与调试过程中,我们很多时候要用到0Ω电阻(如下图),那么0Ω电阻到底在这过程中充当了什么样的角色呢? 0R电阻在电路中有什么作用? #创作灵感#:脑海存留的如下几点疑惑需要解开。 1、电路初次设计使用串接电阻为什么是0R电阻; 2、单板调试时为什么有时候会用到0R…

阿里云倚天服务器是什么?倚天服务器c8y、g8y和r8y详细介绍

阿里云倚天云服务器CPU采用倚天710处理器&#xff0c;租用倚天服务器c8y、g8y和r8y可以享受优惠价格&#xff0c;阿里云服务器网aliyunfuwuqi.com整理倚天云服务器详细介绍、倚天710处理器性能测评、CIPU架构优势、倚天服务器使用场景及生态支持&#xff1a; 阿里云倚天云服务…

Python中的杨辉三角

杨辉三角&#xff0c;也被称为帕斯卡三角&#xff0c;是一个非常有趣的数学结构&#xff0c;它在组合数学中扮演着重要的角色。在这篇博客中&#xff0c;我们将探讨如何在Python中生成杨辉三角&#xff0c;并讨论不同方法的优缺点。 杨辉三角简介 杨辉三角是一个由数字构成的…

OceanBase中NOT EXISTS是否需要被改写

作者简介 张瑞远&#xff0c;曾经从事银行、证券数仓设计、开发、优化类工作&#xff0c;现主要从事电信级IT系统及数据库的规划设计、架构设计、运维实施、运维服务、故障处理、性能优化等工作。 持有Orale OCM,MySQL OCP及国产代表数据库认证。 获得的专业技能与认证包括 Oce…

保障校园网络安全用堡垒机的几个原因分析

校园&#xff0c;人人都熟悉的地方&#xff0c;梦想知识开始的地方。在互联网数字化快速发展的今天&#xff0c;网络安全的学习环境是非常必要的。所以采购保障校园网络安全工具是必要的。那为什么一定要用堡垒机呢&#xff1f;这里我们一起来简单分析一下原因。 保障校园网络…

Tuxera for Mac2024软件产品密钥及下载安装教程

Tuxera for Mac在安全性和稳定性方面表现出色&#xff0c;为用户提供了可靠的数据保障和无忧的使用体验。 首先&#xff0c;从安全性角度来看&#xff0c;Tuxera for Mac采用了先进的技术来保护用户的数据。它支持快速全面的数据保护&#xff0c;通过智能缓存技术确保文件传输…

Godot 学习笔记(5):彻底的项目工程化,解决GodotProjectDir is null+工程化范例

文章目录 前言GodotProjectDir is null解决方法解决警告问题根本解决代码问题测试引用其实其它库的输出路径无所谓。 工程化范例环境命名规范Nuget项目结构架构代码ISceneModelIOC服务 测试GD_Extension 通用扩展TestUtils GD_ProgramTestServiceMainSceneModel Godot对应的脚本…

STM32存储左右互搏 SPI总线FATS文件读写SD/MicroSD/TF卡

STM32存储左右互搏 SPI总线FATS文件读写SD/MicroSD/TF卡 SD/MicroSD/TF卡是基于FLASH的一种常见非易失存储单元&#xff0c;由接口协议电路和FLASH构成。市面上由不同尺寸和不同容量的卡&#xff0c;手机领域用的TF卡实际就是MicroSD卡&#xff0c;尺寸比SD卡小&#xff0c;而…

Leo赠书活动-21期 《一篇讲明白 Hadoop 生态的三大部件》

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

【算法刷题】链表笔试题解析(1)

一、链表分割 题目描述&#xff1a; 链接&#xff1a;链表分割 题目分析&#xff1a; 这题直接处理并不好做&#xff0c;我们可以构建前后两个链表&#xff0c;将小于x值的结点放在链表a内&#xff0c;将其它结点放在链表b内&#xff0c;这样将原链表遍历完后&#xff0c;原链…

Day23 代码随想录(1刷) 二叉树

669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有被移除&#xff0c;原有的父代…

PHP图床程序优化版:图片外链服务、图床API服务、图片CDN加速与破解防盗链

图片免费上传 支持本地储存、FTP储存、第三方云储存&#xff08;阿里云 OSS、腾讯云 COS、七牛云等&#xff09;。 图片外链加速 一键转换第三方网站的图片外链地址为图床可分享的图片地址&#xff08;支持CDN&#xff09;。 图片解析服务 直接将第三方外链图片地址显示为…

oracle docker安装

修改下载的Image的REPOSITORY和TAG属性 修改下载的Image的REPOSITORY和TAG属性&#xff1a;docker tag <IMAGE ID> <REPOSITORY NAME> docker tag 3fa112fd3642 aliyun/oracle_11g 参考网址 使用docker images时&#xff0c;可能会出现REPOSITORY和TAG均为none的镜…

【教程】iOS 手机抓包工具介绍及教程

&#x1f4f1; 最近又发现APP Store一款宝藏软件&#xff0c;克魔助手抓包工具&#xff0c;app刚上架&#xff0c;功能不断迭代中&#xff0c;目前18软妹币实惠价可享受终身版&#xff01;现在是下手的最好时机。 引言 移动端开发中&#xff0c;抓包工具已成为必备的工具之一…

shell脚本发布nginx vue2 项目示例

nginx、git、node.js安装略过。 使git pull或者git push不需要输入密码操作方法 非docker安装nginx&#xff01;&#xff01;&#xff01; 姊妹篇&#xff08;docker安装nginx&#xff09;&#xff1a;shell脚本发布docker-nginx vue2 项目示例 pro_build.sh 注意&#xff1…

Linux基础IO(操作系统层面理解文件)

目录 一、认识 open 函数 1.1 理解文件 1.2 open 函数 1.3 函数选项和宏 二、 open 函数的返回值 三、 fd 的本质 3.1 各部分内容及关系 3.2 如何确定进程对应文件 四、Linux 一切皆文件&#xff1f; 一、认识 open 函数 在C语言中学习文件操作时&#xff0c;我们学…

基于SpringBoot和Vue的课程作业管理系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的课程作业管理系统的设计与实现。 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&am…