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.hqwc.cn/news/573783.html

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

相关文章

【绘图案例-自定义进度条 Objective-C语言】

一、好,我们接着来说这个自定义进度条 1.这个Slider啊,简单的这个value属性,介绍完了,以后,监听也可以监听的到了,接下来,我们来做这个自定义进度条啊, 那么,首先啊,我是这么想的,在这个slider的最小值、和、最大值、我给它改成0、到、1、 因为如果这样的话,到时候…

展示大屏-24小时天气预报

一、项目说明 展示大屏显示未来一周天气和24小时天气详情。 二、技术工具 1.语言&框架&#xff1a;java、springboot 2.UI界面&#xff1a;jQuery、HTML、CSS、 VUE 3.开发工具&#xff1a;IntelliJ IDEA、Eclipse 三、实现步骤 后端步骤 1.调取免费或收费的API接口。 …

2024最赚钱的副业!一月轻松上万!实操分享快来学习!

​​每个人都玩抖音吧&#xff0c;我相信大家的手机上必有的两个软件&#xff0c;除了微信&#xff0c;就是抖音 但微信只有上班或者亲戚朋友来信息时才会打开看&#xff0c;而抖音是我们蹲厕所都要打开刷一刷的东西 那找兼职或副业的人有没有想过在抖音上赚钱 抖音最赚钱的…

【前端学习——js篇】11.元素可见区域

具体见&#xff1a;https://github.com/febobo/web-interview 11.元素可见区域 ①offsetTop、scrollTop offsetTop&#xff0c;元素的上外边框至包含元素的上内边框之间的像素距离&#xff0c;其他offset属性如下图所示&#xff1a; 下面再来了解下clientWidth、clientHeight…

Linux系统编程--信号

1、信号&#xff08;一&#xff09; 1.1、什么是中断 1.2、中断分类 1.3、信号 1.4、信号与中断 1.5、信号名称 1.6、进程对信号的三种响应 1.7、signal函数&#xff1a;注册信号 signal(SIGINT, handler);返回值是SIGINT所对应的处理程序 再调用一下signal(SIGINT, handler2…

前端实现浏览器自定义滚动条

前言&#xff1a; 最近有个项目&#xff0c;产品觉得浏览器默认滚动条太丑了。想美化一下&#xff0c;比如自定义颜色&#xff0c;加上圆角&#xff0c;宽高都要更改一下。我查了资料和文档总结了一下 写法&#xff0c;特此记录以便之后使用。 浏览器滚动条api 总结&#xff…

【计算机网络】启程

&#x1f4dd;本文介绍 本文为计算机网路系列的开始篇&#xff0c;会介绍一下使用的书籍和自己做的思维导图。 &#x1f44b;作者简介&#xff1a;一个正在积极探索的本科生 &#x1f4f1;联系方式&#xff1a;943641266(QQ) &#x1f6aa;Github地址&#xff1a;https://githu…

「18」如何让你直播间增加高级质感,效果滤镜是你不二选择?

「18」效果滤镜给你的布景增加质感&#xff0c;更具视觉效果 首先&#xff0c;安装&#xff08;模糊滤镜的‘streamfx’&#xff09;安装包。安装成功后&#xff0c;StreamFX 会出现在 OBS 的菜单栏上。在OBS软件里滤镜可分为效果滤镜和音视频滤镜。 一、音视频滤镜 在选择「…

【技巧】PyTorch限制GPU显存的可使用上限

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 从 PyTorch 1.4 版本开始&#xff0c;引入了一个新的功能 torch.cuda.set_per_process_memory_fraction(fraction, device)&#xff0c;这个功能允许用户为特定的 GPU 设备设置进程可使用的显存上限比例。 测试代…

刚刚,百度和苹果宣布联名

百度 Apple 就在刚刚&#xff0c;财联社报道&#xff0c;百度将为苹果今年发布的 iPhone16、Mac 系统和 iOS18 提供 AI 功能。 苹果曾与阿里以及另外一家国产大模型公司进行过洽谈&#xff0c;最后确定由百度提供这项服务&#xff0c;苹果预计采取 API 接口的方式计费。 苹果将…

管理阿里云服务器ECS -- 网站选型和搭建

小云&#xff1a;我已经学会了如何登录云服务器ECS了&#xff0c;但是要如何搭建网站呢&#xff1f; 老王&#xff1a;目前有很多的个人网站系统软件&#xff0c;其中 WordPress 是使用非常广泛的一款&#xff0c;而且也可以把 WordPress 当作一个内容管理系统&#xff08;CMS…

机器学习中的LightGBM模型及其优缺点(包含Python代码样例)

目录 一、简介 二、优缺点 三、样例代码 四、总结 一、简介 LightGBM&#xff08;Light Gradient Boosting Machine&#xff09;是一种基于梯度提升&#xff08;Gradient Boosting&#xff09;算法的机器学习模型。它是由微软团队于2017年开发的&#xff0c;旨在解决大规模…