仿真机器人-深度学习CV和激光雷达感知(项目2)day03【机器人简介与ROS基础】

文章目录

  • 前言
  • 机器人简介
    • 机器人应用与前景
    • 机器人形态
    • 机器人的构成
  • ROS基础
    • ROS的作用和特点
    • ROS的运行机制
    • ROS常用命令

前言

💫你好,我是辰chen,本文旨在准备考研复试或就业
💫本文内容是我为复试准备的第二个项目
💫欢迎大家的关注,我的博客主要关注于考研408以及AIoT的内容
🌟 预置知识:基本Python语法,基本linux命令行使用

以下的几个专栏是本人比较满意的专栏(大部分专栏仍在持续更新),欢迎大家的关注:

💥ACM-ICPC算法汇总【基础篇】
💥ACM-ICPC算法汇总【提高篇】
💥AIoT(人工智能+物联网)
💥考研
💥CSP认证考试历年题解

机器人简介

机器人应用与前景

生活中的应用:

在这里插入图片描述
工业应用:

在这里插入图片描述
ROS元老机器人 – PR2:

在这里插入图片描述

NASA 将机器人部署到空间站:

在这里插入图片描述

智驾成为汽车核心卖点之一:

在这里插入图片描述

在这里插入图片描述

机器人形态

轮式机器人:

在这里插入图片描述
腿式机器人:
在这里插入图片描述
轮腿机器人:
在这里插入图片描述
无人机:
在这里插入图片描述
机械臂:
在这里插入图片描述

机器人的构成

• 传感器:机器人的感官,决定了能获取到哪些外部信息。类比人的视觉、触觉、听觉等。
• 算法和逻辑:内部的数据处理。比如用深度学习算法识别物体、传感器融合定位、业务逻辑等。
• 执行器:机器人向外的输出,决定了能完成哪些任务。类比人的手、脚、语言、动作等。

在这里插入图片描述
• 机器人是复杂系统,包含一系列协同工作的软件硬件。各个传感器、算法、业务逻辑、执行器之间,有复杂的依赖关系。

在这里插入图片描述

ROS基础

ROS的作用和特点


机器人开发的难题

  1. 组件众多,依赖关系复杂。如何兼顾灵活性、鲁棒性和性能?
  2. 组件可能由不同语言编写,如何协同运行?
  3. 某些功能(如建图、导航等)很多机器人都需要有,如何方便的复用?
  4. 如何调试、记录机器人运行时的大量数据?

ROS的作用-提高软件复用

  1. 点对点的设计
  2. 多语言支持
  3. 丰富的工具包

点对点的设计:

• 分布式的节点单元
• RPC + TCP/UDP 通信系统
• 支持多机器协同(分布式系统)
• 各个节点独立编译、启动

远程过程调用(英语:Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。

在这里插入图片描述

点对点的设计是ROS中最重要的一个概念,其中关键在于节点。一个系统可能由多个节点构成,我们可以理解成每一个程序都是一个节点,或者说每一个主函数都是一个节点,节点之间是相互独立的,节点和节点之间,不一定运行在同一个物理机器上,它可以是一个分布式的系统,对于分布式系统而言,通信就是重中之重。如上图所示,有三大块,代表着不同的设备:用户电脑,服务器,机器人;其中每一个椭圆都代表着一个节点,他们是可以跑在不同的电脑上的。

比如我给出一个导航任务,简单说明其部分运作流程:在我们的用户电脑上运行一个节点,这个节点用来获取用户的输入,比如输入一个坐标,这就是这个节点的作用,当我们获得了这个输入之后,我们可以把该坐标传递给下一个节点,也就是进行节点间的通信,如上图所示,下一个节点为路径规划算法,它拿到了坐标之后还不够,还需要地图,地图服务器也就另一个节点,这两个节点就不是运行在用户电脑上了,而是运行在服务器上,它们之间就是网络通信,所以即便不在一个机器上,我们也可以通过网络来进行协同的工作,也就是运行在一个分布式系统中。

简而言之,可以理解成为各自都有一个主函数,各自是独立运行的,它们都会去遵循同一个通讯协议,所以说它们之间能够传递信息。这就是ROS的点对点设计。

多语言支持:

• 支持 Python,C++,Java等语言
• 提供语言无关的数据接口定义

在这里插入图片描述
所谓语言无关,如上图所示,它是一个Image(图像)的数据格式,我们知道,在cpp中,如果要存储一个图像,可以用数组或者vector来存,但这些东西在Python中是没有的,所谓语言无关的数据定义接口,就是更为抽象的一层,就是用它来标识我这个图像里面有何种信息。

比如上图中有图像的高度、图像的宽度…并且也说明了信息是哪种数据类型,如 uint32, string, uint8...,但这些数据类型并不是具体的某一种语言里面的数据类型,而是ROS提供的一种语言无关的数据类型,在之后编译中会根据不同的语言转换成为对应语言的相应数据类型,ROS帮我们实现了其中的数据转换

丰富的工具包:

• 3D数据可视化:Rviz
• 物理环境仿真:Gazebo
• Qt可视化工具箱:rqt_*

在这里插入图片描述
以上工具包我们很快就会用到,先简单略过

ROS的运行机制

ROS机制-计算图

• 节点:软件模块,可以订阅/发布 Topic,调用/创建 Service
ROS Master:控制中心,整个系统有且只有一个。负责链接各个节点、管理参数等
• Topic:异步通信,传输消息
• Service:同步通信,类似函数调用

我们说过,最重要的就是点对点通信,这是如何实现的呢?下作介绍:

先来补充一个概念:计算图,上面提到的图:
在这里插入图片描述
也可以看做成一个计算图。


下面我们拿下图举例:
在这里插入图片描述
该图中的每一个椭圆都是ROS rqt_*的工具箱自动生成的,一些节点之间的通信关系可以自动的生成这样的图来给我们查看,每个椭圆都是一个节点,一个箭头就代表着他们之间有一个消息的通信。

已经讲过,每一个椭圆都代表着一个节点,每一个节点都可以订阅或者发布一个 Topic,也可以调用或者创建一个 Service,下面分别介绍 Topic 与 Service:

Topic 和 Service 都是节点之间的通讯方式

• Topic:
是一种传输信息的异步通信
在这里插入图片描述
Publisher就是Topic的发布者,如上图所示,Topic的名字(example),它会有一个数据类型(String),这里就是语言无关的数据类型,它会有一些 Subscriber 也就是接收者(可以有多个接收者),这些接收者只需要订阅了名字为 example 的这个 Topic,它就与 Publisher 建立连接了,此后 Publisher 每次发送消息,Subscriber 都会收到,即其实是一个单向的连接,该连接是异步的,也就是 Publisher 发出去就发出去了,至于 Subscriber 收到与否,处理速度的快慢,有没有及时收到,都不会给 Publisher 进行反馈,类似一种广播。

• Service:
类似函数调用,是一种同步通信
在这里插入图片描述
和我们请求服务器一样,它有一个 Service Server,有一个 Service Client,Client 发送请求,然后 Server 再返回请求,是一个同步的通信模式。

ROS机制-Topic

• 指定名称和数据类型
• 创建流程

  1. Talker、Listener 向 Master 注册(发布/订阅哪个Topic)
  2. Master 向 Listener 发送 Talker 信息
  3. Listener 向 Talker 建立网络连接
  4. Talker 向 Listener 发布数据

• 一个 Topic 可以有多个发布者,也可以有多个订阅者。如多个节点都可以向“警告” Topic 发布信息;定位节点和路径规划节点同时订阅“地图”Topic
• 同一个 Topic 的所有发布和订阅,都要用同一种数据类型
在这里插入图片描述

继续介绍一下建立一次 Topic 的通信流程:

首先,我们要指定这个 Topic 的名称和数据类型,这两个是必须要定义的,假设有一个 Talker 一个 Listener,其实就是上述中的 Publisher 和 Subscriber,它们会向 ROS Master 进行注册,也就是上述的全局唯一的控制节点,Talker 会告诉 Master,现在想要接收一个 Topic 并且告诉这个 Topic 叫什么以及数据类型是什么,Master 会记住这些信息,当它收到 Listener 向它发布的请求,即想要获得哪个 Topic 的时候,如果 Topic 已经存在,如已有一各 Talker 发布了,Master 会把 Talker 的信息发送给 Listener,此时 Listener 就知道了 Talker 的信息,如知道了 Talker 的 IP 地址,端口号是什么,Listener 就可以主动地去联系 Talker,告诉我要订阅你发布的 Topic,同时 Talker 也会记下来 Listener,这样下一次 Talker 发布数据的时候就会直接把数据传递给 Listener。对于同一个 Topic,所有的发布和订阅都必须用同一种数据类型,不然的话就会报错:Master 会告诉你,这个 Topic 不是这个类型的,并拒绝你的请求。

每个 Topic 可以有多个发布者 Talker(Publisher),也可以有多个订阅者 Listener(Subscriber),多个订阅者是比较常见的,举一个多个发布者的例子:系统中可能有一个 Topic 叫警告,触发警告可能有多种:温度过高,速度过快…,有的节点是用来测量温度的,有的节点是用来测量速度的,那么这些节点都可以向警告这个 Topic 发布信息。
多个订阅者的例子:比如 地图Topic,它可以同时被定位和路径规划的节点所订阅。

ROS机制-Service

• 指定名称和 Service 类型,Service 类型中指定了调用数据类型和返回数据类型
• 调用流程

  1. Talker 向 Master 注册 Service
  2. Listener 向 Master 请求 Service
  3. Master 向 Listener 发送 Talker 信息
  4. Listener 向 Talker 请求 Service,传递调用参数
  5. Talker 返回数据

在这里插入图片描述
首先也是要指定,指定名称和 Service 类型,注意 Service 类型,因为它是有来有回的,一次调用就是一个过程,不像 Topic,只要建立了连接,每一次talker有新的数据,都会发送给 Listener(Topic :假如 talker 是一个摄像头,帧率是三十帧每秒,那么一旦有了一个 Listener,就会以每秒 30次的速率向 Listener 发送信息;Service :只是一次调用过程)

一个调用的数据类型就类似于函数的一个参数,与此还会有一个返回数据类型即返回值,这两个一起组成了一个 Service 类型

调用流程与 Topic 类似,首先是注册,Talker 也就是 Service Server,Listener 也就是 Service Client,它们在创建的时候都需要向 Master 注册,Master 就会记住,谁定义了哪个 Service,谁要请求哪个 Service,当有请求的时候,Master 会向 Listener 发送 Talker 的信息,Listener 就知道了 Talker 的信息,就可以直接和 Talker 建立通信,来完成一次请求。

可以把 Service 类比为函数调用,一次调用就是传入一次参数,返回一次数据。Service 主要作用并不是传递数据,而是触发/调用某些逻辑之类的作用

话题 Topic服务 Service
同步性异步同步
通信模型发布/订阅服务器/客户端
底层协议ROSTCP/ROSUDPROSTCP/ROSUDP
反馈机制
缓冲区
实时性
节点关系多对多一对多(一个 Service Server)
适用场景数据传输逻辑处理

ROS机制-参数

  1. Talker 向 Master 设置参数
  2. Master 存储参数
  3. Listener 向 Master 查询参数
  4. Master 返回参数

在这里插入图片描述

ROS机制-文件系统

•xxx_ws:工作空间根目录,项目的基本单位
•xxx_ws/src:各种代码存放位置,我们只需要修改src中的文件
• xxx_ws/build 和 xxx_ws/devel:编译生成的文件夹,存放目标文件、依赖项等,开发时一般不用管
• src中每个功能包:

  1. package.xml:功能包的元数据(名称、版本、作者、依赖项等)
  2. CMakeLists.txt:编译配置文件
  3. 其他可选文件夹(src, msg, srv, launch等)

在这里插入图片描述

ROS常用命令

命令作用
catkin_create_pkg创建功能包
rospack获取功能包的信息
catkin_make编译工作空间的功能包
rosdep自动安装功能包依赖的其他包
roscd功能包目录跳转
roscp拷贝功能包中的文件
rosed编译功能包中的文件
rosrun运行功能包中的可执行文件
roslaunch运行启动文件

加 -h 参数查看帮助,如 rosrun -h


上述所有内容出处如下,博主在此基础上仅为添加个人理解:
本项目为北大团队出品【项目三:深度学习&仿真机器人 - 丘丘老师】原创(部分代码为开源代码)。课程团队:B站ID【M学长的考研top帮】UID【3546580235848566】复试项目班QQ大群:885884619,负责人QQ:674799975

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

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

相关文章

【vue3】GSAP在vue中的使用

一、获取GSAP npm install gsap 二、开始GSAP 导入GSAP,如果需要导入gsap的插件可以参考这里。 import gasp from gsap; 这里用的是选项式,在methods属性中创建一个方法用来写gsap的动画。 gasp_animation(){let tl gasp.timeline({defaults:{ ease:&…

【zlm】针对单个设备的码率的设置

目录 代码修改 实验数据一 实验数据二 同时拉一路视频后 修改记录 使用方法 代码修改 要被子类引用 ,所以放在protected 不能放private 下面的结论,可以在下面的实验数据里引用。“同时拉一路视频后” 实验数据一 https://10.60.3.45:10443/index…

php学习

php基础语法 一 php程序 1.php标记 开始标记<?php 和结束标记 ?>中间写 PHP 代码 当解析一个文件时&#xff0c;PHP 会寻找起始和结束标记&#xff0c;也就是告诉php 开始和停止解析二者之间的代码。此种解析方式使得PHP 可以被嵌入到各种不同的文档中去&#xff…

使用PSIM软件生成DSP28335流水灯程序

最近在学习DSP28335芯片&#xff0c;然后在使用PSIM仿真软件时发现这个仿真软件也支持28335芯片&#xff0c;于是就想学习下如何在PSIM软件中使用DSP28335芯片。在PSIM自带的官方示例中有使用DSP28335芯片的相关例子。 工程下载链接 https://download.csdn.net/download/qq_20…

图解CART分类树评估器的参数

图解CART分类树评估器的参数

联邦学习:密码学 + 机器学习 + 分布式 实现隐私计算,破解医学界数据孤岛的长期难题

联邦学习&#xff1a;密码学 机器学习 分布式 提出背景&#xff1a;数据不出本地&#xff0c;又能合力干大事联邦学习的问题 分布式机器学习&#xff1a;解决大数据量处理的问题横向联邦学习&#xff1a;解决跨多个数据源学习的问题纵向联邦学习&#xff1a;解决数据分散在多…

(一)SpringBoot3---尚硅谷总结

目录 示例Demo&#xff1a; 1、我们先来创建一个空工程&#xff1a; 2、我们通过Maven来创建一个Module&#xff1a; 3、让此Maven项目继承父项目: 4、导入web开发的场景启动器 5、创建Springboot项目的主入口程序&#xff1a; 6、举例测试&#xff1a; 7、Springboot还能…

020-信息打点-红蓝队自动化项目资产侦察企查产权武器库部署网络空间

020-信息打点-红蓝队自动化项目&资产侦察&企查产权&武器库部署&网络空间 #知识点&#xff1a; 1、工具项目-红蓝队&自动化部署 2、工具项目-自动化侦查收集提取 3、工具项目-综合&网络空间&信息 演示案例&#xff1a; ➢自动化-武器库部署-F8x ➢自…

leetcode—图 岛屿数量

岛屿数量 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网…

RabbitMQ入门篇【图文并茂,超级详细】

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 前言 1.什么是MQ 2.理解MQ 3.生活…

记一个奇怪的万能密码

前言 打的站点打多了&#xff0c;什么奇怪的问题都会发生 打点 开局一个登录框 用户枚举到账号爆破 测了一下&#xff0c;没发现admin的弱口令&#xff0c;但是发现存在用户枚举漏洞&#xff0c;因此准备跑一下账号 输入密码为123456 进行账号爆破 成功爆破出账号 是的…

【ARM 嵌入式 编译系列 7.3 -- GCC 链接脚本中 DISCARD 与 .ARM.exidx】

请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 文章目录 背景.ARM.exidx方法一:使用链接器脚本方法二:使用链接器选项注意事项背景 在移植 RT-Thread 到 cortex-m33(RA4M2)上的时候,在编译的时候遇到下面问题: Building target: ra4m2.elf arm

PyTorch视觉工具箱:图像变换与上采样技术详解(1)

目录 Pytorch中Vision functions详解 pixel_shuffle 用途 用法 使用技巧 注意事项 参数 数学理论公式 示例代码及输出 pixel_unshuffle 用途 用法 使用技巧 注意事项 参数 数学理论公式 示例代码及输出 pad 用途 用法 使用技巧 注意事项 参数 示例代码…

智能机器人与旋量代数(9)

Chapt 3. 螺旋运动与旋量代数 3.1 螺旋运动 螺旋运动是关于一条空间直线的一个旋转运动&#xff0c;并伴随沿此直线的一个平移。是一种刚体绕空间轴 s s s旋转 θ \theta θ角&#xff0c;再沿该轴平移距离 d d d的复合运动&#xff0c;类似螺母沿螺纹做进给运动的情形。 一…

2024年【焊工(初级)】考试内容及焊工(初级)新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 焊工&#xff08;初级&#xff09;考试内容参考答案及焊工&#xff08;初级&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及焊工&#xff08;初级&#xff09;操作证已考过的学员汇总&#xff0c;相对有…

docker 使用 vcs/2018 Verdi等 eda 软件

好不容易在ubuntu 安装好了eda软件&#xff0c;转眼就发现了自己的无知。 有博主几年前就搞定了docker上的EDA工具。而且更全&#xff0c;更简单。只恨自己太无知啊。 Synopsys EDA Tools docker image - EDA资源使用讨论 - EETOP 创芯网论坛 (原名&#xff1a;电子顶级开发网…

python解决从有序数组中寻找中位数

如果给定两个长度分别是m和n的有序数组array1和array2&#xff0c;需要对这两个有序数组找出其中的中位数&#xff0c;需要保证时间复杂度是O(long(min(m,n))&#xff0c;空间复杂度是O(1)。如下例子&#xff1a; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#…

【教程】混淆Dart 代码

什么是代码混淆&#xff1f; 代码混淆是一种将应用程序二进制文件转换为功能上等价&#xff0c;但人类难于阅读和理解的行为。在编译 Dart 代码时&#xff0c;混淆会隐藏函数和类的名称&#xff0c;并用其他符号替代每个符号&#xff0c;从而使攻击者难以进行逆向工程。 Flut…

ChatGPT和文心一言哪个更好用?

目录 一、ChatGPT和文心一言大模型的对比分析 1.1 二者训练的数据情况分析 1.2 训练大模型数据规模和参数对比 1.3 二者3.5版本大模型对比总结 二、ChatGPT和文心一言功能对比分析 2.1 二者产品提供的功能情况分析 2.2 测试一下各种功能的特性 2.2.1 文本创作能力 2.2…

电脑提示“No Boot Device”怎么办?

在Windows 11/10/8/7启动时遇到错误如“No Boot Device Found”和“未找到引导设备硬盘3F0”时&#xff0c;会导致电脑无法正常开机。那么&#xff0c;No Boot Device错误该怎么修复呢&#xff1f;下面我们就来了解一下。 修复 1. 检查启动顺序并将BIOS的设置重置为默认值 为…