ROS1 ROS2学习

news2024/11/25 12:51:12

ROS1 ROS2学习

  • 安装 ROS
    • ROS1
    • ROS2
  • 命令行界面
  • ROS2 功能包相关指令
  • ROS 命令行工具
    • ROS1 CLI工具
    • ROS2 CLI工具
  • ROS 通信核心概念
    • 节点 - Node
      • 节点相关的CLI
    • 话题 - Topic
      • 编写发布者程序流程:
      • 编写订阅者程序流程:
      • 话题相关的CLI
    • 服务 - Service
      • 编写客户端程序流程
      • 编写服务端程序流程
      • 服务相关的CLI
    • 参数 - Parameters
      • 参数相关的CLI
    • 动作 - Action
      • 动作相关的CLI
    • 通信接口 - Interface
      • 修改CMakeLists.txt
      • rosidl_default_generators
  • CMake
  • ROS2编译工具colcon

学习记录,方便查阅

安装 ROS

ROS1

赵虚左ROS理论与实践
ROS1教程
视频教程

ROS2

鱼香ROS
ROS2教程
视频教程

命令行界面

GUI(Graphical User Interface)就是平常我们说的图形用户界面,大家用的Windows是就是可视化的,我们可以通过鼠标点击按钮等图形化交互完成任务。
CLI(Command-Line Interface)就是命令行界面了,我们所用的终端,黑框框就是命令行界面,没有图形化。

ROS2 功能包相关指令

别人总结的功能包指令

用法: ros2 pkg [-h] 

Call `ros2 pkg <command> -h` 可以获得更多使用细节

各种与包有关的子命令

可选的参数:
  -h, --help            显示帮助并退出

Commands:
  create       创建一个新的ROS2功能包
  executables  列出包下的可执行文件
  list         输出有效的包的列表
  prefix       输出一个包的前缀路径
  xml          输出某个包的清单XML

  使用 `ros2 pkg <command> -h` 可以获得更多使用细节

ROS 命令行工具

别人总结的关于ROS2的命令行工具 CLI tools

ROS1 CLI工具

ROS(Robot Operating System)是一个灵活的框架,用于构建机器人软件。它提供了一种分布式计算的方式,使得机器人各个部分之间可以相互通信和协作。

ROS提供了一个命令行界面(CLI),用于管理和操作ROS系统。下面是一些常用的ROS CLI工具:

  • roscore:启动ROS的核心服务,包括参数服务器、消息传递系统等。

  • roslaunch:用于启动ROS包中的节点和参数配置文件,并可以同时启动多个节点。

  • rosrun:用于运行单个ROS节点。

  • rostopic:用于查看和发布ROS消息。

  • rosservice:用于调用和提供ROS服务。

  • rosbag:用于记录和回放ROS消息。

  • rqt_console:用于查看ROS系统的日志信息。

  • rqt_graph:用于查看ROS系统节点和主题之间的关系图。

以上只是一些常见的ROS CLI工具,ROS还提供了许多其他工具和命令,可以通过ROS的官方文档和ROS Wiki获取更详细的信息。

ROS2 CLI工具

ROS2 CLI(Command Line Interface)工具是ROS2的一些命令行工具的集合,用于在终端中执行ROS2相关操作.以下是一些常用的ROS2 CLI工具:

  • ros2 run: 运行ROS2节点,可以指定节点名称、包名、节点类型、参数等.

  • ros2 launch: 启动ROS2 launch文件,可以启动多个节点和参数.

  • ros2 node: 查看ROS2节点的信息,包括节点名称,发布和订阅的话题等.

  • ros2 topic: 查看ROS2话题的信息,包括话题名称,消息类型,发布和订阅的节点等.

  • ros2 service: 查看ROS2服务的信息,包括服务名称,服务类型,提供和调用服务的节点等.

  • ros2 param: 管理ROS2参数服务器,可以设置,获取和删除参数等.

  • ros2 bag: 记录和回放ROS2话题的数据,可以将数据保存到文件中,并在需要时回放数据.

  • ros2 msg/ros2 srv/ros2 action: 查看ROS2消息,服务和动作的信息,包括消息类型,消息字段,服务类型,服务请求和响应等.

这些ROS2 CLI工具可以通过在终端中输入命令来使用,例如,使用ros2 run运行ROS2节点:

ros2 run package_name node_name

使用ros2 launch启动ROS2 launch文件:

ros2 launch package_name launch_file_name.py

使用ros2 param设置ROS2参数:

ros2 param set param_name param_value

使用ros2 bag记录ROS2话题的数据:

ros2 bag record topic_name

等等.这些工具可以帮助用户在ROS2中进行各种操作,并提高ROS2的使用效率。

ROS 通信核心概念

节点 - Node

ROS中的每个节点都应负责单一的模块化用途,例如控制轮毂电机或从激光测距仪发布传感器数据。 每个节点都可以通过主题、服务、动作或参数从其他节点发送和接收数据。
一个完整的机器人系统由许多协同工作的节点组成。 在 ROS2 中,单个可执行文件(C++程序、Python 程序等)可以包含一个或多个节点。
请添加图片描述

节点相关的CLI

别人总结的关于ROS2的命令行工具 CLI tools

运行节点(常用)
ros2 run <package_name> <executable_name>

查看节点列表(常用):
ros2 node list

查看节点信息(常用):
ros2 node info <node_name>

重映射节点名称
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

话题 - Topic

发布订阅模型
适用于节点间单向的频繁的数据传输
请添加图片描述

编写发布者程序流程:

  • 编程接口初始化
  • 创建节点并初始化
  • 创建发布者对象
  • 创建并填充话题消息
  • 发布话题消息
  • 销毁节点并关闭接口

编写订阅者程序流程:

  • 编程接口初始化
  • 创建节点并初始化
  • 创建订阅者对象
  • 回调函数处理话题数据
  • 销毁节点并关闭接口

话题相关的CLI

别人总结的关于ROS2的命令行工具 CLI tools

服务 - Service

服务端客户端(请求响应)模型
适用于节点间双向的数据传递
同时服务还是有一些注意事项:

  1. 同一个服务(名称相同)有且只能有一个节点来提供
  2. 同一个服务可以被多个客户端调用
    请添加图片描述

编写客户端程序流程

  • 编程接口初始化
  • 创建节点并初始化
  • 创建客户端对象
  • 创建并发送请求数据
  • 等待服务端应答数据
  • 销毁节点并关闭接口

编写服务端程序流程

  • 编程接口初始化
  • 创建节点并初始化
  • 创建服务端对象
  • 声明服务端名称和处理回调函数的名称
  • 通过回调函数进行服务
  • 向客户端反馈应答结果
  • 销毁节点并关闭接口

服务相关的CLI

别人总结的关于ROS2的命令行工具 CLI tools

查看服务列表
ros2 service list

手动调用服务

ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts "{a: 5,b: 10}"

如果不写参数值调用会怎么样
ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts

查看服务接口类型
ros2 service type /add_two_ints

查找使用某一接口的服务
这个命令看起来和上面刚好相反
ros2 service find example_interfaces/srv/AddTwoInts

参数 - Parameters

参数是节点的设置,用于配置节点,原理基于服务
参数是节点的配置值,用于动态调整节点的设置。 节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。

参数相关的CLI

别人总结的关于ROS2的命令行工具 CLI tools

动作 - Action

动作Action的三大组成部分目标、反馈和结果。
动作适用于需要实时反馈的场景,原理基于话题和服务。

  1. 目标:即Action客户端告诉服务端要做什么,服务端针对该目标要有响应。解决了不能确认服务端接收并处理目标问题
  2. 反馈:即Action服务端告诉客户端此时做的进度如何(类似与工作汇报)。解决执行过程中没有反馈问题
  3. 结果:即Action服务端最终告诉客户端其执行结果,结果最后返回,用于表示任务最终执行情况。

参数是由服务构建出来了,而Action是由话题和服务共同构建出来的:

第一种:Action = 两个服务+一个话题

两个服务一个话题
目标传递服务反馈话题(服务发布,客户端订阅)
结果传递服务

第二种:一个Action = 三个服务+两个话题

三个服务两个话题
目标传递服务反馈话题(服务发布,客户端订阅)
结果传递服务状态话题(服务端发布,客户端订阅)
取消执行服务

请添加图片描述

动作相关的CLI

别人总结的关于ROS2的命令行工具 CLI tools

通信接口 - Interface

ROS的通信系统,它的主要目的就是传输数据,让大家高效的建立连接,并且准确包装和解析传输的数据内容,话题、服务等机制,它们传输的数据,都要符合通信接口的标准定义。

  1. 定义服务通信的接口

  2. 话题消息的内容

  3. 完成定义后,还需要在功能包的CMakeLists.txt中配置编译选项,让编译器在编译过程中,根据接口定义,自动生成不同语言的代码。

修改CMakeLists.txt

rosidl_default_generators

rosidl_default_generators是ROS 2中一个命名空间,包含了用于生成ROS 2消息和服务的默认生成器。
在ROS 2中,rosidl是用于定义和生成消息和服务接口的工具。
rosidl_default_generators是ROS2中用于生成代码的工具。该工具通过解析ROS2的IDL文件,自动生成ROS2的消息、服务、动作等相关代码。rosidl_default_generators是rosidl框架中的一个重要组成部分,它提供了默认的生成器,用于将ROS 2接口定义文件(.msg和.srv)转换为相应的源代码。rosidl_default_generators包含了多个生成器,可以根据需要选择不同的生成器生成不同类型的代码.其中常用的生成器有:

在ROS2中,可以通过在CMakeLists.txt文件中调用rosidl_generate_interfaces函数,并指定生成器类型来生成IDL文件对应的代码,例如:

rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/Example.msg"
  "srv/Example.srv"
  DEPENDENCIES builtin_interfaces
)

其中 ${PROJECT_NAME} 是ROS2的包名, “msg/Example.msg” 和 “srv/Example.srv” 是IDL文件的路径, DEPENDENCIES builtin_interfaces 指定了该IDL文件依赖的其他包.

CMake

cmake, ament_cmake和ament_python都是ROS2中常用的构建工具.

ament_python,适用于python程序
cmake,适用于C++
ament_cmake,适用于C++程序,是cmake的增强版

  • CMake是一个跨平台的构建工具,它使用类似make的语法来管理项目的构建过程.ROS2使用CMake作为默认的构建工具,通过CMake可以生成Makefile文件,进行源代码的编译,链接和打包等操作.

  • ament_cmake是ROS2中特有的扩展CMake的构建工具,它使用CMake的语法,但添加了许多ROS2的特性,例如自动生成ROS2的包依赖关系、编译ROS2的IDL文件、生成ROS2的launch文件等.ament_cmake包含了许多ROS2的常用函数和宏,可以大大简化ROS2的构建过程.

  • ament_python是ROS2中用于构建Python代码的工具,它使用ament_cmake作为构建系统,提供了生成Python模块,Python可执行文件和Python包等功能.与ament_cmake相比,ament_python具有更好的Python编程体验,并且能够自动处理Python依赖关系

ROS2编译工具colcon

ROS2编译工具colcon ----- colcon想当于ros1中的catkin工具
colcon相关文档

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

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

相关文章

CVE-2013-4547

CVE-2013-4547 一、环境搭建二、漏洞原理三、漏洞复现 一、环境搭建 如下介绍kali搭建的教程 cd ~/vulhub/nginx/CVE-2013-4547 // 进入指定环境 docker-compose build // 进行环境编译 docker-compose up -d // 启动环境docker-compose ps使用这条命令查看当前正在运…

v-for复习

 在真实开发中&#xff0c;我们往往会从服务器拿到一组数据&#xff0c;并且需要对其进行渲染。  这个时候我们可以使用 v-for 来完成&#xff1b;  v-for 类似于 JavaScript 的 for 循环&#xff0c;可以用于遍历一组数据&#xff1b; 1.v-for 基本使用  v-for 的基本…

水雨情自动监测系统-水雨情监测设备

近年来&#xff0c;暴雨及极端天气越来越频发&#xff0c;造成了洪涝与积水灾害给各地排水相关部门带来了巨大的压力&#xff0c;也给公众的生命财产损失带来了巨大的风险。为降低洪涝造成的损失&#xff0c;我们不仅要加强排水基础建设&#xff0c;还要提升实时监测手段&#…

一、音频基础-音频分析的重要工具(语谱图)

文章目录 1. 傅里叶转换2. 语谱图3. 应用1. 傅里叶转换 通过前面的描述可以知道,声音的本质就是各种声波,那么任意某一个时刻,都不可能是只有一个频率的波,而且声波也不可能是我们理解的标准的正弦波: 而一般我们对声音进行处理时,需要分析出频率当中的有哪些频率,然…

EasyPlayer流媒体视频播放器宽屏模式的开发与实现

EasyPlayer流媒体视频播放器可支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff0c;能支持RTSP、RTMP、HLS、FLV、WebRTC等格式的视频流播放&#xff0c;并且已实现网页端实时录像、在iOS上实现低延时直播等功能。 EasyPlayer.js播放器目前可支持全屏播放&…

mybatis-plus Integer类型null值无法修改的问题

我们来看一条数据&#xff0c; 我现在要更新这个数据&#xff0c;除了id&#xff0c;全部设为null. 我们来看下数据库&#xff1a; 这个age很明显没有设置成null. 这是因为这个age是Integer类型的&#xff0c;而且我们使用的是mybatis的原生方法&#xff0c; 解决方案&#xf…

抖音seo源码/抖音seo优化矩阵系统代开发源代码搭建

抖音seo源码/抖音seo源码代开发/抖音seo技术搭建系统应用代码编程&#xff1a; 抖音seo源码&#xff0c;抖音seo矩阵系统底层框架上支持了从ai视频混剪&#xff0c;视频批量原创产出&#xff0c;云端直播数字人视频制作&#xff0c;账号矩阵&#xff0c;视频一键分发&#xff…

【学会动态规划】不同路径 II(6)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

v-model绑定的数据与接收到的数据类型不一致引发的bug

在使用v-model的过程中 当页面渲染需要的数据类型与data中定义的数据类型不一致时&#xff0c;页面是不会进行响应式对应渲染的、 如:1:绑定的是string的时候&#xff0c;在定义时是number类型 也会导致页面不更新 2:列表下拉框的选中的数据若定义的是number的话&#xff0c;传…

静电接地桩的使用和维护

静电接地桩&#xff0c;也称为静电防护接地桩或静电消散接地桩&#xff0c;是一种用于防止静电积聚和降低电荷积聚的设备。它主要通过将静电荷导引到地下&#xff0c;实现静电的释放和中和。 静电接地桩通常由导电材料制成&#xff0c;如铜、铝等金属材料。它们通常以垂直方式…

目标追踪的方向分析

方向分析 目标运动方向分析的一种最常用方法是光流法&#xff0c;光流法通过相邻两帧图像中光流近似目标的运动。光流法比较适于估计较短时间内的目标运动趋势&#xff08;如相邻几帧&#xff09;&#xff0c;且光流法对图像噪声非常敏感&#xff0c;如下图&#xff0c;为…

矩阵AB和BA的特征值相同

手写的&#xff0c;如下图&#xff1a; 即可证明&#xff0c;矩阵AB的特征值和BA的特征值相同。 关于矩阵转置和逆矩阵混合运算&#xff0c;有如下规律&#xff1a;

Ubuntu关闭自动休眠

一、查看当前休眠模式 使用systemctl status sleep.target 命令查看当前休眠模式&#xff0c;结果如下图&#xff0c;sleep状态为enabled&#xff0c;表示自动休眠模式开启。 二、关闭自动休眠模式 使用sudo systemctl mask sleep.target suspend.target 关闭休眠模式 三…

力扣算法数学类—最大交换

目录 最大交换 题解&#xff1a; 代码&#xff1a; 最大交换 670. 最大交换 - 力扣&#xff08;LeetCode&#xff09; 给定一个非负整数&#xff0c;你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。 …

没看完这篇文章,别说你会用WBS

大家好&#xff0c;我是老原。 为什么很多人明明有了很多工具和方法&#xff0c;还是做不好工作&#xff1f; 有没有想过&#xff0c;什么样的人才是“会工作“ 的人&#xff1f; 罗振宇在启发俱乐部里&#xff0c;对“会工作”做了一个解释。 “会工作的人&#xff0c;就是…

一种自平衡解决数据倾斜的分表方法

1、背景 这篇主要描述了B端令牌系统应用数据分表解决业务数据量增大&#xff0c;且存在的数据倾斜问题&#xff0c;主要面向的场景是一对多数据倾斜问题 1&#xff09;B令牌的业务背景 先简述一下B令牌的业务背景&#xff0c;B令牌系统是用于营销场景中&#xff0c;将许多用…

写给后端开发的『vue3』请求后端接口

本文分享一下在vue3前端项目中请求后端接口获取数据。比较简单&#xff0c;内容如下&#xff1a; 1、使用axios请求后端接口 首先npm install axios&#xff0c;添加axios依赖&#xff0c;就靠它来请求后端接口了&#xff0c;基本等同于使用jquery发ajax。 # src/main.js i…

制作Ubuntu20.04系统盘教程

下载ios系统镜像&#xff1a;http://releases.ubuntu.com/20.04/ 下载启动盘制作工具&#xff1a;http://rufus.ie/downloads/ 安装后&#xff0c;在如下软件界面进行U盘系统的写入&#xff1a;

strcmp函数和strncmp函数【C语言】

strcmp函数和strncmp函数 strcmp函数一、strcmp函数的简介二、strcmp函数的功能三、strcmp函数的使用四、strcmp函数的模拟 strncmp函数一、strncmp的简介二、strncmp函数的功能三、strncmp函数的使用 strcmp函数 一、strcmp函数的简介 strcmp函数在库函数中的定义&#xff1…

STM32 ADC基础知识讲解

文章目录 前言一、ADC的基本介绍二、STM32 ADC讲解1.ADC分辨率2.ADC通道讲解3.ADC转换模式单次转换模式连续转换模式 4.扫描模式5.数据对齐方式左对齐右对齐 总结 前言 在正式的学习如何编写ADC代码时我们先来学习一下ADC的基础知识部分&#xff0c;只有掌握好了这些基础知识才…