机器人入门(一)

news2024/11/30 10:52:51

机器人入门(一)

    • 一、ROS是什么,能用来干什么?
    • 二、哪些机器人用到了ROS?
    • 三、ROS和操作系统是绑定的吗?
    • 四、ROS 1 和ROS 2的关系是什么?
      • 4.1架构
        • 中间件改变
        • API改变
        • 数据格式改变
      • 4.2特性
      • 4.3工具/生态
    • References

本篇仅作为学习总结,内容不会大而全,详细内容请见书本: ROS Robotics By Example (Second Edition) —— Carol Fairchild Dr.Thomas L.Harman

一、ROS是什么,能用来干什么?

ROS是Robot Operating System(机器人操作系统)的缩写,此操作系统是开源的。既然末尾带了OS,那自然是干操作系统的事情,它可以为你提供控制各种机器人的能力,但无需知道各种机器人的细节。

书中原文是这么描述的:“One of its main purposes is to provide communication between the user, the computer’s operating system, and equipment external to the computer.”

我个人认为上面的结构是对的,因为设备要经过ROS抽象,才能让各部件通用化,并统一将数据交给与计算机硬件打交道的操作系统进行处理。当然,user也可以直接接触Computer’s OS。
在这里插入图片描述

二、哪些机器人用到了ROS?

书中提供了这个网址:http://wiki.ros.org/Robots,点进去一看,确实包罗万象,搜一搜著名的波士顿动力机器人,Atlas,没搜到,搜搜书本上的机器人:Baxter,没搜到,于是我对着网页找了下Baxter,找到了名字叫Mobility Base的机器人,图片和书中一致,只是缺了手,所以叫Mobility Base,继续,TurtleBot2、TurtleBot3和Crazyfile也搜到了,还不错。

继续浏览的时候,我在education标签分类下,看到了Jet,于是,我好奇Jet和JetAuto之间的关系:

Jet:Jet is a smart, autonomous, low-cost robot kit based on the NVIDIA Jetson embedded development platform. 看来Jet是基于英伟达的Jetson嵌入式开发平台。

JetAuto:JetAuto是面向ROS教育场景开发的入门型ROS轮式机器人,它搭载了NVIDA Jetson Nano。

看来NVIDA的 Jetson 是款抢手货,那Jetson究竟是个什么,来到 Jetson 的wiki百科页面,阅读后得知,Jetson有几个版本分支,而Jetson Nano是其中的一种,全称是Jetson Nano Developer Kit,Nano(计量单位,纳。纳米:nanometer)是形容这东西小巧灵活 ,此产品面向的群体有制造商、初学者和开发人员,对许多流行的外设和部件都可以做到开箱即用。更多关于Jetson Nano的内容可以直接去NVIDIA官网查看,板子是好板子,就看怎么使了。

网站里给robot分了这么几类:ground(车)、manipulator(机械臂)、Aerial(飞行器)、marine(船)、component(零部件),所有东西还是在想象范围之内的:地上走的、天上飞的、水里游的,一般的robot在地球上工作,无外乎这三个地方(即便高大上如火星车也使用ROS),然后就是加些机械臂啊,摄像头啊,传感器啊,能走能跑,握得稳,看得清,听得见这就差不多齐活,至于表现的像个真人一样,那是后话。

三、ROS和操作系统是绑定的吗?

ROS和Ubuntu操作系统是有对应关系的,软件开发中这有点搞人心态,甚至升级个版本就didn’t work,后来又一想,这个问题是由于人类之间的组织互不隶属,虽然互联网让彼此之间互通有无,良好的开发文档给开发人员清晰的理解,业界通用的设计规范使工程师之间有共同语言,但究竟是谁说服谁,this is a question。工作后发现,哪怕组织是隶属的,写出垃圾代码的企业也是一抓一大把。

ROS 1与Linux之间的对应关系可以在REP 3(ROS Enhancement Proposal,ROS进阶提案)里找到[2],这里只列举部分。

ROS 1LinuxEOL(End of Life) date
ROS Noetic NinjemysUbuntu Focal Fossa (20.04,代表2020年4月份发行)2025年5月
ROS Melodic MoreniaUbuntu Artful (17.10)
Ubuntu Bionic (18.04)
2023年6月27日
ROS Lunar LoggerheadUbuntu Xenial (16.04)
Ubuntu Yakkety (16.10)
Ubuntu Zesty (17.04)
2019年5月
ROS Kinetic KameUbuntu Wily (15.10)
Ubuntu Xenial (16.04)
2021年4月
ROS Jade TurtleUbuntu Trusty (14.04)
Ubuntu Utopic (14.10)
Ubuntu Vivid (15.04)
2017年5月
ROS Indigo lglooUbuntu Saucy (13.10)
Ubuntu Trusty (14.04 LTS)
2019年4月
ROS Hydro MedusaUbuntu Precise (12.04 LTS)
Ubuntu Quantal (12.10)
Ubuntu Raring (13.04)
2015年5月
ROS Groovy GalapagosUbuntu Oneiric (11.10)
Ubuntu Precise (12.04 LTS)
Ubuntu Quantal (12.10)
2014年7月

只要相应版本的Ubuntu停止支持,该版本对应的ROS也将停止支持工作,还有些其它规矩。

Release rules

  • ROS release timing is based on need and available resources
  • All future ROS 1 releases are LTS, supported for five years(看发行时间确实如此,没猜错的话,这个时间也是根据Ubuntu的维护时间来的,但文章没明确说)
  • ROS releases will drop support for EOL Ubuntu distributions, even if the ROS release is still supported.

Side effects of the release policy:

  • Every ROS release will be supported on exactly one Ubuntu LTS.
  • LTS releases will not share a common Ubuntu release with any previous releases.
  • ROS releases will not add support for new Ubuntu distributions after their release date.

These simplified rules and side effects are subject to change with changes to the underlying Ubuntu release policy.

此文档也说了它推荐的一些Fedora发行版(Fedora是软呢帽的意思,Red Hat的logo即它,颇具浪漫主义气质),Fedora各版本的下载地址与ROS 2各个发行版清单的访问地址在文末的References给出。

四、ROS 1 和ROS 2的关系是什么?

此问题下的内容主要来自于文章ROS 1 vs ROS 2 What are the Biggest Differences? [5],二者的不同体现在三方面:架构、特性、工具/生态。

4.1架构

中间件改变

ROS 1使用了ROS主从架构和XML-RPC(Remote Procedure call)中间件。这个中间件是一种远程过程调用方法,使用XML格式并通过socket,在程序之间传递数据[8]

API改变

ROS 1的两个libraries是互相独立的,支持C++的roscpp,以及支持Python的rospy,并且二者功能还不等价。

而ROS 2则干脆许多了,library有一个用C写的rcl(ROS client library),Github上也有其官方用C++编的rclcpp,其余的libraries都是构建在此基础上,因此这也是ROS 2可以提供更多语言支持的关键。

数据格式改变

ROS 2的rosbags就序列化方面,比ROS 1更具便捷性,剩余内容请看原文。

4.2特性

ROS 2支持多线程执行,实时处理功能,剩余内容请看原文。

4.3工具/生态

ROS 2取消了Catkin,代之用Ament作为系统构建工具;ROS 2有一个辅助工作空间,在不影响现有的工作空间情况下,有助于在不影响现有配置的情况下进行新包测试。

另外在系统生态方面,ROS 2不兼容ROS 1。ROS 1主要是为Ubuntu构建的,而ROS 2可以运行在MacOS,Windows,Ubuntu和其它OS上。

最后,文章作者建议逐步从ROS 1迁移至ROS 2,因为ROS 1将在2025年停止支持。

References

[1] Jetson Nano - NVIDIA官网

[2] REP 3 - Target Platforms

[3] Fedora各版本的下载地址

[4] ROS 2各个发行版的清单

[5] ROS 1 vs ROS 2 What are the Biggest Differences?

[6] Changes between ROS 1 and ROS 2

[7] Ros 2 how is it better than Ros 1?

[8] XML-RPC COMMUNICATION

[9] Fedora - wiki

[10] ROS官网

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

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

相关文章

JavaScript中如何确定this的值?如何指定this的值?

🎀JavaScript中的this 在绝大多数情况下,函数的调用方法决定了this的值(运行时绑定)。this不能在执行期间被赋值,并且在每次函数呗调用时this的值也可能会不同。 🍿如何确定this的值: 在非严格…

计算机竞赛 深度学习机器视觉车道线识别与检测 -自动驾驶

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 🔥 优质竞赛项目系列,今天要分…

209. 长度最小的子数组(滑动窗口)

一、题目 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int left 0, right 0;int sum nums[right];int MinLength INT_MAX;while (left <nums.siz…

【React】React组件生命周期以及触发顺序(部分与vue做比较)

最近在学习React&#xff0c;发现其中的生命周期跟Vue有一些共同点&#xff0c;但也有比较明显的区别&#xff0c;并且执行顺序也值得讨论一下&#xff0c;于是总结了一些资料在这里&#xff0c;作为学习记录。 v17.0.1后生命周期图片 初始化阶段 由ReactDOM.render()触发 —…

openGauss学习笔记-86 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署配置

文章目录 openGauss学习笔记-86 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署配置86.1 总体原则86.2 重做日志&#xff08;MOT&#xff09;86.3 检查点&#xff08;MOT&#xff09;86.4 恢复&#xff08;MOT&#xff09;86.5 统计&#xff08;MOT&#xff09;86…

【C++】unordered_set、unordered_map的介绍及使用

unordered_set、unordered_map的介绍及使用 一、unordered系列关联式容器二、unordered_map and unordered_multimap1、unordered_map的介绍2、unordered_map的使用&#xff08;1&#xff09;定义&#xff08;2&#xff09;接口使用 3、unordered_multimap 二、unordered_set a…

集合在多线程下安全问题

如果在多线程下&#xff0c;同时操作同一个数据源&#xff0c;就会出现数据安全问题&#xff1a; A线程取出值为10&#xff0c;准备加5. 同时B线程也取出来10&#xff0c;减了5 C取出的时候有可能时15&#xff0c;也有可能时5。产生了数据安全问题。 方法有很多例如&#xff1a…

消息队列-RabbitMQ(二)

接上文《消息队列-RabbitMQ&#xff08;一&#xff09;》 Configuration public class RabbitMqConfig {// 消息的消费方json数据的反序列化Beanpublic RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory){Simple…

redis解压+windows安装+无法启动:1067

Redis下载安装图文教程&#xff08;Windows版_超详细&#xff09; 标题若遇到安装后无法启动&#xff1a;1067 排查方法如下&#xff1a; 1.查询是否有服务占用端口 查看6379的端口也没有被占用&#xff08;netstat -ano | findstr :6379&#xff09; 若有&#xff0c;kill掉…

盛最多水的容器 接雨水【基础算法精讲 02】

盛雨水最多的容器 链接 : 11 盛最多水的容器 思路 : 双指针 &#xff1a; 1.对于两条确定的边界&#xff0c;l和r,取中间的线m与r组成容器&#xff0c;如果m的高度>l的高度&#xff0c;那么整个容器的长度会减小&#xff0c;如果低于l的高度&#xff0c;那么不仅高度可…

54、数组--模拟

LCR 146. 螺旋遍历二维数组 给定一个二维数组 array&#xff0c;请返回「螺旋遍历」该数组的结果。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到提取完所有…

SpringBoot整合数据库连接

JDBC 1、数据库驱动 JDBC&#xff08;Java DataBase Connectivity&#xff09;&#xff0c;即Java数据库连接。简而言之&#xff0c;就是通过Java语言来操作数据库。 JDBC是sun公司提供一套用于数据库操作的接口. java程序员只需要面向这套接口编程即可。不同的数据库厂商&…

C++八股

1、简述一下C中的多态 在面向对象中&#xff0c;多态是指通过基类的指针或引用&#xff0c;在运行时动态调用实际绑定对象函数的行为&#xff0c;与之相对应的编译时绑定函数称为静态绑定。 静态多态 静态多态是编译器在编译期间完成的&#xff0c;编译器会根据实参类型来选择…

国庆10.1

用select实现服务器并发 ser #include <myhead.h> #define ERR_MSG(msg) do{\fprintf(stderr, "__%d__", __LINE__);\perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.1.205" //本机…

ARMv7-A 那些事 - 5.CP15协处理器

By: Ailson Jack Date: 2023.10.01 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/157.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

14:STM32-----看门狗

目录 一:看门狗 1:WDG 2:独立看门狗 (IWDG) A:IWDG框图 B:IWDG_KR键寄存器 C:IWDG超时时间 3:窗口看门狗 (WWDG) A:WWDG框图 B:WWDG工作特性 C:WWDG超时时间 4:独立看门狗和窗口看门狗的区别 5:数据手册 二:案例 A:独立看门狗 1:连接图 2:步骤 3:函数介绍 3:代…

网络爬虫——urllib(2)

前言&#x1f36d; ❤️❤️❤️网络爬虫专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Python网络爬虫_热爱编程的林兮的博客-CSDN博客 前篇讲解了urllib的基本使用、一个类型六个方法与下载相关内容&#xff0…

《深入浅出OCR》第二章:OCR技术发展与分类

✨专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。 👨‍💻面向对象: 本篇前言知识主要介绍深度学习知识,全面总结知知识…

Python3数据科学包系列(一):数据分析实战

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 认识下数据科学中数据处理基础包: (1)NumPy 俗话说: 要学会跑需先…

C++核心编程--多态篇

4.7、多态 4.7.1、多态的基本概念 多态是C面向对象三大特征之一 多态分为两类 静态多态&#xff1a;函数重载和运算符重载属于静态多态&#xff0c;复用函数名动态多态&#xff1a;派生类和虚函数实现运行时多态 静态多态和动态多态区别&#xff1a; 静态多态的函数地址早…