ROS学习-ROS简介

news/2024/4/28 2:31:31/文章来源:https://blog.csdn.net/zzy_is_rubbish/article/details/130136368

文章目录

  • 1.ROS
    • 1.1 ROS概念
    • 1.2 ROS特征
    • 1.3 ROS特点
    • 1.4 ROS版本
    • 1.5 ROS程序
  • 其他名词介绍
      • 1. 元操作系统
      • 2. IDL 接口定义语言
  • 一些网站

1.ROS

1.1 ROS概念

ROS(Robot Operating System,机器人操作系统)

ROS 是一个适用于机器人的开源的元操作系统,提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等诸多功能。相比于普通的OS,有着可用于异构硬件的特性。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。在某些方面 ROS 相当于一种 “机器人框架(Robot frameworks)。此外,它还以库的形式提供了机器人应用程序所需的多数不同类型的硬件之间的数据传输/接收、调度和错误处理等功能。这个概念也被称为中间件(Middleware)或软件框架(Software framework)

1.2 ROS特征

ROS 的主要目标是为机器人研究和开发提供代码复用的支持

  • 分布式进程:它以可执行进程的最小单位(节点,Node)的形式进行编程,每个进程独立运行,并有机的收发数据
  • 功能包单位管理:以功能包的形式管理着多个具有相同目的的进程,所以开发和使用起来很容易,并且很容易共享、修改和重新发布
  • 公共存储库:每个功能包都将其功能包公开给开发人员首选的公共存储库(eg. GitHub)。并标识许可证
  • API类型:使用ROS开发程序时,ROS被设计为可以简单地通过调用API将其加载到其使用的代码中

1.3 ROS特点

  1. 点对点设计:

    ROS通过点对点设计以及服务和节点管理器等机制可以分散由于计算机视觉和语音识别等功能带来的实时计算压力,这种设计能适应服务机器人遇到的挑战。

  2. 不依赖编程语言:

    ROS支持多种高级编程语言,C++、Python和Lisp语言已经在ROS中实现编译,并得到应用。ROS采用了一种语言中立的接口定义语言(language-neutral interface definition language,IDL )来实现各模块之间的消息传送。

  3. 精简与集成:

    ROS建立的系统具有模块化的特点,各模块中的代码可以单独编译,而且编译使用的CMake工具使它很容易的就实现精简的理念。ROS基本将复杂的代码封装在库里,只是创建了一些小的应用程序为ROS显示库的功能,这就允许了对简单的代码超越原型进行移植和重新使用。作为一种新加入的有优势,单元测试当代码在库中分散后也变得非常的容易,一个单独的测试程序可以测试库中很多的特点。

    ROS不修改用户的主函数,所以代码可以被其他的机器人软件使用。其优点是ROS很容易和其他的机器人软件平台集成。例如,在计算机视觉方面,ROS已经与OpenCV实现集成。在驱动、导航和模拟器方面,ROS已经与Player系统实现集成。在规划算法方面,ROS也已与OpenAVE系统实现集成。

  4. 便于测试:

    为机器人开发软件比其他软件开发更具挑战性,主要是因为调试准备时间长,且调试过程复杂。况且,因为硬件维修、经费有限等因素,不一定随时有机器人可供使用。ROS提供两种策略来解决上述问题。

    • 精心设计的ROS系统框架将底层硬件控制模块和顶层数据处理与决策模块分离,从而可以使用模拟器替代底层硬件模块,独立测试顶层部分,提高测试效率。

    • ROS另外提供了一种简单的方法可以在调试过程中记录传感器数据及其他类型的消息数据,并在试验后按时间戳回放。通过这种方式,每次运行机器人可以获得更多的测试机会。例如,可以记录传感器的数据,并通过多次回放测试不同的数据处理算法

  5. 开源

  6. 强大的库与社区
    在这里插入图片描述

1.4 ROS版本

为了兼容新版的ubuntu依赖库而不断的更新系统

选择ROS版本一般考虑以下两点:

  • 项目要求
  • 硬件驱动

ROS版本与Ubuntu版本对应关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r92q05Aj-1681379372649)(C:\Users\朱振宇\AppData\Roaming\Typora\typora-user-images\image-20230411145147694.png)]

1.5 ROS程序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q8FU8Rk6-1681379372649)(C:\Users\朱振宇\AppData\Roaming\Typora\typora-user-images\image-20230411144739917.png)]

上图所示是一个ROS程序的基本架构,每个模块是一个Node,每个功能是一个.launch ,将模块进行搭建可以构成一个机器人的控制程序。

其他名词介绍

1. 元操作系统

元操作系统(Meta-Operating System):元操作系统不是一个明确定义的术语,而是一个利用应用程序和分布式计算资源之间的虚拟化层来运用分布式计算资源来执行调度、加载、监视、错误处理等任务的系统。

img

2. IDL 接口定义语言

接口定义语言(IDL)不是一种编程语言,而是一种描述由对象实现的接口的描述语言。IDL文件类似于C++头文件。

一些网站

ROS官网:ROS http://wiki.ros.org/ROS

ROS介绍:https://www.oschina.net/p/ros?hmsr=aladdin1e1

ROS介绍:https://blog.csdn.net/zytgg123456/article/details/110846751

ROS介绍:https://blog.csdn.net/qq_25267657/category_8406377.html

IDL介绍:https://www.codeproject.com/Articles/19605/Basics-of-an-IDL-file

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

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

相关文章

linux驱动开发 - 04_Linux 设备树学习 - DTS语法

文章目录Linux 设备树学习 - DTS语法1 什么是设备树?2 DTS、DTB和DTC3 DTS 语法3.1 dtsi 头文件3.2 设备节点3.3 标准属性1、compatible 属性2、model 属性3、status 属性4、#address-cells 和#size-cells 属性5、reg 属性6、ranges 属性7、name 属性8、device_type…

人工智能专题-知识表示

文章目录人工智能专题-知识表示大纲2.1 知识表示的概念2.1.1 知识表示观点2.1.2 知识表示的要求2.2 一阶谓词逻辑表示法2.2.1 一阶谓词概念2.2.2 谓词逻辑表示方法2.3 产生式表示法2.4 语义网络表示法2.5 框架表示法人工智能专题-知识表示 大纲 大纲:掌握知识表示方…

思科路由器发现重大漏洞,解决方法是……

晚上好,我是老杨。 思科知名度高,待遇也好,很多网工心生向往,也有很多人考过思科认证的相关证书,对思科的印象还是不错吧? 而且,作为美国著名的网络设备厂商,思科是全球路由器巨头…

【面试】如何设计SaaS产品的数据权限?

文章目录前言数据权限是什么?设计原则整体方案RBAC模型怎么控制数据权限?1. 数据范围权限控制2. 业务对象操作权限控制3. 业务对象字段权限控制总结前言 一套系统的权限可以分为两类,数据权限和功能权限,今天我们从以下几个点&am…

【RabbitMQ】初识消息中间件MQ

目录 一、什么是MQ 二、MQ的优缺点 1、MQ的优点 1.应用解耦 2.削峰填谷 3.异步提速 2、MQ的缺点 1.可用性低 2.系统复杂度高 3.数据一致性问题 三、MQ使用场景 四、常见的MQ 一、什么是MQ MQ(Message Queue):消息队列&#xff0c…

代码随想录_二叉树_leetcode654 617

leetcode654 最大二叉树 654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 …

【FPGA实验4】举重比赛机制

举重比赛有三名裁判,当运动员将杠铃举起后,须有两名或两名以上裁判认可,方可判定试举成功,若用A、B、C分别代表三名裁判的意见输入,同意为1,否定为0;F为裁判结果输出,试举成功时F1,试…

iPhone如何不用iTunes将视频传输到电脑上?

随着智能手机的普及,iPhone已经成为了人们生活中必不可少的一部分。而随着iPhone摄像功能的逐渐完善,越来越多的用户开始将iPhone作为拍摄视频的工具。 但是,将iPhone中的视频传输到电脑并进行后续编辑处理或者备份储存,对于许多…

社科院与杜兰大学中外合作办学金融管理硕士项目——比起过往,前路更值得期待

当结束一天工作陷入沉思时,你有没有特别遗憾的事情呢,人生有太多的不确定性,比起过往,未知的人生更值得我们期待。与其懊恼没完成的遗憾,不如珍惜当下,努力创造未来。人生没有太晚的开始,在职读…

人工智能发展到GPT4经历了什么,从专家系统到机器学习再到深度学习,从大模型到现在的GPT4

大家好,我是微学AI,今天给大家讲一下人工智能的发展,从专家系统到机器学习再到深度学习,从大模型到现在的GPT4,讲这个的目的是让每个人都懂得人工智能,每个人都懂得人工智能的发展,未来人工智能…

openpnp - 顶部相机辅助光的选择

文章目录openpnp - 顶部相机辅助光的选择概述折腾的过程简易灯板市售的环形灯(不带漫射板)市售的环形灯(不带漫射板) LED单色光调光控制器.市售的环形灯(带漫射板)市售的环形灯(带漫射板) 自己拆解(降低LED灯路数)ENDopenpnp - 顶部相机辅助光的选择 概述 终于将顶部相机辅…

数值区间的模糊匹配,二分查找的应用

先看图: 需求很明确,要根据左边的值,显示右边的值。 比如,现在拿到的值是 17.12,那么应该显示成 15;拿到 17.599 ,那么应该显示成 20. 先找规律: 为了便于说明,暂且将左边的值设为 x, 右边的值设为 y. 第一行和最后一行可以写死成 0 与 1500;余下的每行,x 的区间是…

【华为机试真题详解JAVA实现】—学英语

目录 一、题目描述 二、解题代码 一、题目描述 Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文: 具体规则如下: 1.在英语读法中三位数字看成一整体,后面再加一个计数单位。从最右边往左数,三位一单位,例如12,345 等 2.每三位数后记得带上计数单位 分别是…

四、数组、切片,映射

一、一维数组 //声明一个包含5个元素的整型数组 var array [5]int //具体数值填充数组 array : [5]int{1, 2, 3, 4, 5} //容量由初始化值的数量决定 array : [...]int{1, 2, 3, 4, 5) //只初始化索引为1和2的元素 array : [5]int{1: 10, 2: 20} //修改索引为2的元素的值 array…

Spring学习(五):一篇讲清楚动态代理(jdk和cglib)的使用、原理和源码

目录 一、jdk动态代理的基本使用 二、cglib动态代理的基本使用 2.1 方法一:method.invoke() 方法反射调用 2.2 方法二(spring使用的这个方法): methodProxy.invoke() 2.3 方法三:methodProxy.invokeSuper() 三、…

ABP vNext电商项目落地实战(一)

一、落地条件: 1. .NET5版本 2. DDD 3. ABP vNext 4.ABP CLI (ABP的命令行工具,包括ABP的各种模板) 5.SQL Server 写在前面:我觉得这个框架的文件分层很凌乱,在企业的实际业务场景中,一般…

RHCSA练习作业(二)

目录 题目一 题目二 题目三 第四题 第五题 题目一 文件查看:查看/opt/passwd文件的第六行(使用head和tail指令) 代码如下: head -6 /opt/passwd | tail -1 题目二 在/etc及其子目录中,查找host开头的文件&#x…

虚拟机Ubuntu 18.04安装dpdk18.11

1 虚拟机用了2个核,2G内存,3个网卡 2 去http://core.dpdk.org/download/下载了18.11 3 安装apt-get install libnuma-dev 4 运行ifconfig down ***停掉2个网卡,方便后面添加到dpdk 5 解压后,进入usertools,运行dpd…

用AI帮我写一篇关于FPGA的文章,并推荐最热门的FPGA开源项目

FPGA定义 FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,可以在硬件电路中实现各种不同的逻辑功能。与ASIC(Application Specific Integrated Circuit,特定应用集成电路)相比,FPGA…

SQL 条件函数 日期函数 文本函数 窗口函数

玩了几天,劳逸结合,继续复习刷题sql 一、条件函数 1.题目:现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量(age为null 也记为 25岁以下) user_profile 期望结果&…