![](https://img-blog.csdnimg.cn/20191003101015291.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
ROS
文章平均质量分 91
机器人操作系统 ROS 相关,包括但不限与基础教程、进阶教程、问题处理、扩展知识等。
万俟淋曦
CSDN专家博主,阿里云专家博主,中国人工智能学会会员。分享机器人领域技术,包括SLAM,ROS,CV,DL等,助力机器人领域研究者成长进步,为我国机器人研发与制造领域添砖加瓦。
展开
-
ROS 系列学习教程(总目录)
ROSLearning一、ROS概览1.1 ROS简介To be continued…1.2 ROS安装Ubuntu 安装 ROS 详细教程(以最后一个ROS1版本Noetic为例)1.3 ROS Hello WorldROS创建工作空间添加包并编译ROS Hello World1.4 ROS架构ROS架构:文件系统 - 计算图二、ROS通讯机制2.1 话题通讯(Topic)ROS话题(Topic)通信:通信模型、Hello World与拓展ROS话题(Topic)通信:自定义原创 2024-01-04 22:27:21 · 1874 阅读 · 2 评论 -
[ROS 系列学习教程] 建模与仿真 - 使用 ros_control 控制差速轮式机器人
如果两个轮子以相同的方向和速度驱动,机器人将沿直线行驶。如果两个轮子以相同的速度朝相反的方向转动,如所示图所示,机器人将绕轴的中心点旋转。否则,根据旋转速度和方向,旋转中心可能落在由两个轮胎接触点定义的线上的任何位置。由于机器人的方向取决于两个驱动轮的旋转速度和方向,因此应精确感测和控制这些量。差速转向机器人与汽车中使用的差速 齿轮类似,两个车轮可以有不同的转速,但与差速齿轮系统不同,差速转向系统将为两个车轮提供动力。主要通过订阅速度命令作为模块的输入,然后解析运动学模型控制电机,达到控制机器人的目的。原创 2024-06-29 17:23:26 · 1148 阅读 · 0 评论 -
ROS1配置husky仿真环境遇到的一些问题+方法论
ROS1配置husky仿真环境遇到的一些问题+方法论原创 2024-06-10 20:11:53 · 1264 阅读 · 2 评论 -
[ROS 系列学习教程] 建模与仿真 - ros_control 介绍
也是一个 ROS 功能包,提供了一组预定义的控制器,这些控制器已经为各种常见的机器人控制任务进行了优化和实现,可以用于控制不同类型的机器人,如移动机器人、机械臂和其他多关节系统。是一个 ROS 功能包,是一个通用的机器人控制框架,用于实现机器人硬件接口、控制器管理和控制器接口。在控制器启动时,spawner 将继续运行,当终止 spawner(如:ctrl-c)时,它将自动停止并卸载它最初启动的所有控制器。它知道所有涉及的控制器,然后知道在从一个组切换到另一个组时需要停止和启动的控制器。原创 2024-06-09 23:12:00 · 884 阅读 · 0 评论 -
[ROS 系列学习教程] 建模与仿真 - 使用 Arbotix 控制机器人
Arbotix 是一款控制电机、舵机的硬件控制板,并提供相应的 ros 功能包,是一款基于 ROS的机器人控制系统,它旨在为小型机器人提供硬件控制和传感器接口,以便于机器人的运动和感知。它不仅可以驱动真实的 arbotix 控制板,还提供一个差速控制器,通过接收速度控制指令更新机器人的 joint 状态,从而帮助我们实现机器人在仿真环境中的运动。源码包含如下几部分:其中,:控制器,现已合并到中。:处理与 ArbotiX-ROS 绑定通信的固件源代码。:ArbotiX 的消息和服务定义。原创 2024-06-08 23:32:43 · 1287 阅读 · 0 评论 -
[ROS 系列学习教程] 建模与仿真 - 使用 Xacro 优化 urdf
ROS 系列学习教程(总目录)本文目录一、使用属性表示常量二、使用公式三、使用宏定义四、include 其他文件五、优化实践对于前文介绍的 urdf 模型,我们可以使用 xacro 来优化,使其更易于维护。优化点:多次用到的尺寸用常量定义计算使用公式表示,增加可读性重复结构用宏定义可复用的结构模块用单独文件编写,使用时在其他文件 include一、使用属性表示常量对于一些多次用到的常量,可以使用属性表示,以实现更好的可读性与可维护性。<!-- 属性列表 --><原创 2024-06-01 20:47:25 · 1027 阅读 · 0 评论 -
[ROS 系列学习教程] 建模与仿真 - Xacro 语法
可以发现 urdf 不支持模块化编程,无法实现代码复用,也不支持数学计算, 代码可读性及复用性非常差,效率极低。为了解决这一问题,ROS提供了 Xacro ,它是 XML Macros 的缩写,即 XML 宏,是可编程的 XML,支持使用变量、函数、数学公式计算、条件/循环流程控制等。原创 2024-05-31 22:32:52 · 962 阅读 · 0 评论 -
[ROS 系列学习教程] 建模与仿真 - URDF 建模实践
ROS 系列学习教程(总目录)本文目录一、机器人结构组成二、新建功能包三、编写launch文件四、创建底盘五、添加轮子六、添加其他部件七、解决部分实体位于地面以下的问题前文介绍了URDF建模与URDF语法,接下来介绍怎么使用URDF从零构建一个机器人模型并在rviz中显示。一、机器人结构组成最终效果如下图:机器人由如下部分组成:底盘 * 1主动轮 * 2从动轮(脚轮)* 2激光雷达 * 1RGB相机 * 1二、新建功能包为面向零基础的同学,使教学清晰,新建一个功能包用于学习该原创 2024-05-15 19:36:16 · 765 阅读 · 0 评论 -
[ROS 系列学习教程] 建模与仿真 - URDF 语法介绍
URDF文件中使用XML格式描述的机器人模型,下面介绍URDF的XML标签。joint 描述关节的运动学和动力学属性,并指定了关节的安全极限。link 元素用于描述具有惯性、视觉特征和碰撞属性的刚体。机器人描述文件中的根元素必须是。,所有其他元素必须封装在其中。原创 2024-04-16 08:05:41 · 831 阅读 · 0 评论 -
[ROS 系列学习教程] 建模与仿真 - URDF 建模介绍
动力学仿真:Gazebo支持多种高性能的物理引擎,如ODE、Bullet、SimBody和DART,能够进行精确的动力学计算和仿真。三维可视化环境:它提供了一个逼真的三维环境,包括光线、纹理和影子,使得仿真场景更加接近现实。传感器仿真:Gazebo支持模拟多种传感器,如激光雷达、相机等,并能模拟传感器噪声,这对于开发和测试机器人感知系统非常重要。可扩展插件:用户可以通过开发自定义插件来扩展Gazebo的功能,满足特定的仿真需求。原创 2024-04-14 21:03:53 · 2028 阅读 · 0 评论 -
[ROS 系列学习教程] rqt可视化工具箱 - Service与Action工具
一栏中会显示对应的请求数据,可以按需修改。选择service后,在下面的。用于向服务端请求服务。中显示服务端的回复数据。的类型及一些具体信息。,点击加号会同时显示。原创 2024-03-23 18:17:12 · 587 阅读 · 0 评论 -
[ROS 系列学习教程] rqt可视化工具箱 - Topic工具
带宽(Bandwidth)、频率(Hz)、变量值。可以通过可视化界面发布topic。启动,或直接在终端输入命令。列右侧的箭头可现实详细的。用于监测topic信息。**启动方法:**在。(只能选择)、发布频率。的类型及一些具体信息。**启动方法:**在。**启动方法:**在。列中的方框,即可发布。原创 2024-03-23 17:23:27 · 913 阅读 · 0 评论 -
[ROS 系列学习教程] rqt可视化工具箱 - 日志工具
每个日志记录器通常与特定的ROS包或库相关联,并允许开发者控制不同级别的日志消息的输出。中将所有现有的 GUI 工具作为子窗口运行,也可以以独立方法运行,但。,分别可以通过指定条件(右侧的绿色加号)排除和高亮符合的日志。依次选择要设置的节点、日志记录器后,直接点选日志等级即可设置。的一个软件框架,以插件的形式实现各种GUI工具。(区分大小写)和指定位置的日志,并高亮了日志等级为。的消息,他会不停的收集信息并提供日志过滤功能。另外,也可以通过条件过滤日志,即下方的。可以通过可视化界面设置指定的日志级别。原创 2024-03-23 12:11:27 · 1453 阅读 · 0 评论 -
[ROS 系列学习教程] rosbag Python API
打开bag文件时是否跳过文件的索引,这可以节省一些内存和加载时间,特别是在处理非常大的bag文件时。说明:在实际使用中,如果你只是想查看或播放bag文件中的所有消息,而不需要基于时间戳进行精确查询,那么你可以将。添加新数据:如果你在 bag 文件关闭后向其中添加了新数据,但没有重新构建索引,那么这些新数据将不会被包含在旧的索引中。方法可以强制将这些缓存的数据写入到磁盘中,以确保所有挂起的数据都被写入到 bag 文件中。函数的返回类型是 float,表示以秒为单位的时间戳,其中的小数部分,表示秒的分数。原创 2024-03-17 12:18:21 · 2051 阅读 · 2 评论 -
[ROS 系列学习教程] rosbag C++ API
rosbag 的 C++ API 主要有两个类,用于写bag文件的。可以看到成功写入了4帧数据。类,和用于读bag文件的。编译运行,读取上文生成的。头文件:view.h。原创 2024-03-10 23:04:04 · 1125 阅读 · 4 评论 -
[ROS 系列学习教程] 工作空间覆盖与多机通讯
与ROS2相比,其实ROS1是伪分布式的,它需要有一个 ROS Master 作为中心节点,所以对于多台计算机,需要指定一台作为主机来运行 ROS Master,其余计算机作为从机运行其他节点。首先要保证多台计算机处于同一网络中,最好分别设置固定IP,如果为虚拟机,需要将网络适配器改为桥接模式。ROS开发过程中,可能同时开发多个项目,或开发项目的工作空间和已有的工作空间重名。为了让多台计算机互相能够认识对方,需要告诉主机有哪些从机,告诉从机主机是谁。的配置顺序刚好相反,即后配置的优先级更高。原创 2024-03-09 11:36:27 · 1004 阅读 · 0 评论 -
[ROS 系列学习教程] rosbag 命令行介绍
有时我们需要更新topic的msg,但对于已经录制的bag文件,它使用的是旧的msg,此时的bag文件会与系统的新msg发生冲突,ROS为了解决这一问题,设计了。使用 SIZE MB 的内部缓冲区(默认值:256,0 = 无限)。用于修复损坏的包文件(或 ROS 版本 0.11 之前记录的包文件)。另外,每次压缩文件之前,会备份每个包文件(扩展名为 .orig.bag),如果备份文件已存在(并且未指定。每次解压缩文件之前,会备份每个包文件(扩展名为 .orig.bag),如果备份文件已存在(并且未指定。原创 2024-02-25 10:33:51 · 1799 阅读 · 0 评论 -
[ROS 系列学习教程] launch文件
launch文件用于管理ros节点,它使用 XML 语法,可以同时启动多个节点,也可以对节点做一些配置。launch文件启动时,会判断是否启动了 roscore,如果启动了,则不再启动,否则,会自动调用 roscore。它主要用于声明远程计算机的 SSH 和 ROS 环境变量设置,但也可以使用它来声明有关本地计算机的信息。,则当前上下文中设置的所有参数,都将添加到为处理包含的文件而创建的子上下文中。该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch,默认为 false。原创 2024-02-25 09:54:29 · 1148 阅读 · 0 评论 -
Robot Operating System 2: Design, Architecture, and Uses In The Wild
人们已经提出了许多软件平台,有时称为中间件,引入了模块化和适应性强的功能,使构建机器人系统变得更加容易。随着时间的推移,一些中间件已经发展成为包含实用程序、算法和示例应用程序的丰富生态系统。机器人操作系统 (ROS 1) 对日趋成熟的机器人行业的重要性几乎无人能敌。ROS 1 是由机器人孵化器 Willow Garage 推广的[1]。我们尽了一切努力来创建高质量和高性能的系统,但安全性、网络拓扑和系统正常运行时间并未得到优先考虑。无论如何,ROS 1 已经在几乎所有智能机器领域产生了影响力。原创 2024-01-06 09:23:46 · 2007 阅读 · 1 评论 -
[ROS 系列学习教程] ROS的计算图源命名
ROS中的节点、参数、话题和服务统称为计算图源,其命名方式采用灵活的分层结构,便于在复杂的系统中集成和复用。一个有效的命名应该具备以下特点:1)首字符必须是字母([a-z|A-Z])、波浪线(~)或者左斜杠(/)。2)后续字符可以是字母或数字([0-9|a-z|A-Z])、下划线(_)或者左斜杠(/)。原创 2024-01-03 21:28:48 · 873 阅读 · 0 评论 -
[ROS 系列学习教程] TF坐标变换 - TF树
每广播一个坐标关系,ROS都会把他加入到一个列表中维护起来,这个列表就是TF树。旋转偏移量为:(1.57, 0.0, 0.0) 角度单位为弧度。使用以下命令可以把TF树保存为pdf文档(如果没有安装。的坐标关系没有发布,所以有两棵TF树,现在我们发布。位置偏移量为:(0.5, 0.8, 0)可以发现,我们发布了两组坐标关系。的坐标关系来看看效果。原创 2024-01-01 23:07:02 · 2367 阅读 · 1 评论 -
[ROS 系列学习教程] ROS TF坐标变换 - 动态坐标变换
所谓动态坐标变换,是指两个坐标系之间的相对位置是变化的。比如机械臂末端执行器与 base_link 之间,移动机器人base_link与world之间。可以理解动态坐标关系是随时间变化的静态坐标关系(即静态是动态对时间的微分)。订阅动态坐标转换关系,并利用该关系将小乌龟坐标系下的坐标转换到。目录,在这里存储脚本(如python脚本),我们创建。可以看到转换后的坐标,以及所属父坐标系。以及转换后的坐标都在同步动态变化。发布它相对世界坐标系的坐标。按钮,在弹出的窗口中选择。目录的同级,创建一个。原创 2024-01-01 23:02:29 · 2486 阅读 · 2 评论 -
[ROS 系列学习教程] TF坐标变换 - 静态坐标变换
如前文所属,ROS通过广播的形式告知各模块的位姿关系,接下来详述这一机制的代码实现。模块间的位置关系有两种类型,一种是相对固定的,称为静态坐标变换,一种是相对不固定,变化的,称为动态坐标变换。原创 2024-01-01 22:46:54 · 1918 阅读 · 0 评论 -
[ROS 系列学习教程] TF坐标变换 - 位姿描述与消息类型
在机器人系统中,有许多运动机构和传感器,为了描述他们之间的相对位姿关系,分别为他们定义了各自的坐标系,通过坐标系转换,就可以知道每个时刻各个组件的位姿。ROS中通过TF包封装了常用的坐标系转换工具,目前ROS使用的是TF2,早在ROS Hydro以前,ROS使用的是TF。TF2相对TF,更加易用,效率更高,功能更加丰富。ROS中通过类似topic的形式发布(广播)与订阅(监听)各组件间的位姿关系,接下来我们介绍这一机制。原创 2024-01-01 22:41:35 · 1740 阅读 · 0 评论 -
[ROS 系列学习教程] ROS参数服务器(Param):通信模型、Hello World与拓展
参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据。使用场景一般存储一些机器人的固有参数,如产品定义、全局配置等。主要思想就是一个共享数据域,供不同节点使用。原创 2023-11-19 22:59:31 · 1552 阅读 · 0 评论 -
[ROS 系列学习教程] ROS服务(Service)通信:通信模型、Hello World与拓展
服务通讯是基于模式的,是一种应答机制。用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。原创 2023-11-17 22:29:24 · 1711 阅读 · 1 评论 -
[ROS 系列学习教程] ROS话题(Topic)通信:自定义msg - 例程与讲解
在 ROS 通信协议中,数据是以约定好的结构传输的,即数据类型,比如Topic使用的msg,Service使用的srv,ROS 中的 std_msgs 封装了一些原生的数据类型,比如:Bool、Char、Float32、Int64、String等,但这些类型结构简单,常常不能满足我们的需要,这时我们可以使用自定义的消息类型。比如我们创建一个自定义消息,定义一个机器人的ID,位置(x, y)。原创 2023-11-17 22:24:41 · 3131 阅读 · 1 评论 -
[ROS 系列学习教程] ROS话题(Topic)通信:通信模型、Hello World与拓展
话题通信适用于不断更新数据、少逻辑处理的传输相关的应用场景。原创 2023-11-11 14:54:06 · 1909 阅读 · 0 评论 -
[ROS 系列学习教程] 关于ROS的网络通讯方式TCP/UDP
*TCP是面向连接的、可靠的流协议,提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。UDP协议就相当于是写信给对方,寄出去信件之后不能知道对方是否收到信件,信件内容是否完整,也不能得到及时反馈,而TCP协议就像是打电话,你需要知道对方的号码才能打电话,交流的内容可以实时反馈,确保信息的完整性。TCP传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件,浏览网页等等。TCP是健壮的,可靠的,并保证以相同的顺序传递数据包。原创 2023-11-04 21:26:18 · 3775 阅读 · 1 评论 -
[ROS 系列学习教程] ROS架构:文件系统 - 计算图
计算图是ROS处理数据的一种点对点的网络形式。程序运行时,所有进程以及他们所进行的数据处理,将会通过一种点对点的网络形式表现出来。计算图中的重要概念:节点(Node)、消息(message)、话题(topic)、服务(service)。节点(Node)节点就是一些直行运算任务的进程。ROS利用规模可增长的方式是代码模块化:一个系统就是典型的由很多节点组成的。在这里,节点也可以被称之为“软件模块”。原创 2023-11-02 23:08:03 · 810 阅读 · 0 评论 -
[ROS 系列学习教程] ROS Hello World
创建工作空间目录(即工程根目录,注意此时还不是ROS工作空间,只是一个目录)初始化工作空间(即把当前目录初始化为一个ROS工作空间)创建功能包(ROS基本单元,可以理解为一个功能模块,每个工程至少有一个功能包)编辑源文件(写代码实现需求)编辑编译配置文件(ROS1使用CMake编译系统,这里编辑CMakeList.txt文件)编译工程(使用CMake编译ROS工程,生成可执行文件,即ros节点,下文均称作节点)不只是Hello World,所有ROS工程都是这样的流程。原创 2023-11-02 22:57:33 · 818 阅读 · 0 评论 -
[ROS 系列学习教程] ROS Service 相关API接口与命令行介绍
ros::ServiceServer类2.2 常用命令行工具rosservice2.2.1 rosservice call使用提供的参数调用服务可以在服务名后直接跟参数列表,也可以使用字典的格式(键入服务名后,按tab自动补全,默认是这种格式)。等待服务发布才调用如果服务没有发布,直接调用,会返回错误,使用 选项后,会一直等待服务发布才调用。按照特定的消息类型查找已发布的 。列出当前所有活跃的service列出指定名空间下当前所有活跃的service前面是服务名,后面是节点名。原创 2022-06-05 14:56:37 · 1536 阅读 · 0 评论 -
[ROS 系列学习教程] ROS Topic 相关API接口与命令行介绍
目录一、Topic1.1 常用函数接口ros::Publisher类ros::Subscriber类1.2 常用命令行工具1.2.1 rostopic bw1.2.2 rostopic delay1.2.3 rostopic echorostopic echo --offsetrostopic echo --filterrostopic echo -crostopic echo -brostopic echo -prostopic echo -wrostopic echo -n1.2.4 rostopic原创 2022-05-02 22:52:50 · 3758 阅读 · 1 评论 -
[ROS 系列学习教程] ROS与操作系统版本对应关系
Ubuntu和ROS版本对应关系及官方支持结束时间,加粗的为还在支持的版本。UbuntuROSEnd of Life14.04 LTSindigo lglooApril, 201916.04 LTSKinetic KameApril, 202118.04 LTSMelodic MoreniaMay, 202320.04 LTSNoetic Ninjemys (Recommended)May, 2025...............原创 2021-08-21 22:56:23 · 39457 阅读 · 16 评论 -
[ROS 系列学习教程] ERROR: cannot download default sources list from: 20-default.list. Website may be down.
零、问题描述安装 ROS 时,执行 sudo rosdep init 报如下错误:ERROR: cannot download default sources list from:https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.listWebsite may be down.一、解决办法1. 访问 https://www.ipaddress.com/, 查询 raw.原创 2020-11-03 19:03:47 · 5734 阅读 · 6 评论 -
[ROS 系列学习教程] ROS利用ros-kinetic-serial包与下位机串口通信
一、使用ros-kinetic-serial包,首先安装这个packagesudo apt install ros-kinetic-serial #可以将kinetic替换为你的ROS版本二、连接设备并查看串口名关于linux串口的操作看这里 Ubuntu关于串口的操作(查看串口信息、串口助手、串口权限)三、在package中包编写代码1. 在工作空间中创建你自己的package创...原创 2019-12-03 15:50:17 · 5292 阅读 · 3 评论 -
[ROS系列学习教程]roscore报错: ‘ascii’ codec can’t decode byte 0xe6 in position 13: ordinal not in range(128)
零、问题描述使用ROS是,执行roscore报一下错误:‘ascii’ codec can’t decode byte 0xe6 in position 13: ordinal not in range(128)The traceback for the exception was written to the log file一、解决方法ROS工作空间的目录中不予许有中文,一般国内使用...原创 2019-12-03 14:36:28 · 3995 阅读 · 3 评论 -
[ROS 系列学习教程] ROS创建工作空间添加包并编译
一、创建工作空间1. 创建工作空间目录并初始化首先找一个存放工作空间的地方,我放在了桌面,然后在桌面打开terminal,开始:# 1. 递归创建工作空间目录$ mkdir -p catkin_ws/src# 2. 进入src目录$ cd catkin_ws/src# 3. 初始化工作空间$ catkin_init_workspace2. 编译工作空间# 1. 回到catki...原创 2019-11-24 23:21:09 · 4180 阅读 · 1 评论 -
[ROS 系列学习教程] Ubuntu 安装 ROS 详细教程(以最后一个ROS1版本Noetic为例)
最近需要用ROS控制一个小车底盘,然后发现不会了。。。所以写一篇博客记录一下,以便以后查阅。1. 设置Ubuntu的软件和更新在搜索框输入software,选择软件和更新一项,勾选 main、universe、restricted 和 multiverse,然后选择中国的服务器,然后关闭就行了。2. 添加源如果网速快,可以直接用官方源,打开terminal输入一下命令:sudo s......原创 2019-11-24 22:27:26 · 4904 阅读 · 1 评论 -
Could not find a package configuration file provided by “slam_karto” with any of the following names
零、问题描述使用ROS时,需要编译别人的功能包,但编译时会出现各种错误,如下的缺少功能包的问题:CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):Could not find a package configuration file provided by “slam...原创 2019-03-29 16:49:27 · 2876 阅读 · 1 评论