云南网站制作一条龙,莒县建设局官方网站,如何统计网站访问量,自己做网站要花钱吗文章目录 前言机器人简介机器人应用与前景机器人形态机器人的构成 ROS基础ROS的作用和特点ROS的运行机制ROS常用命令 前言 #x1f4ab;你好#xff0c;我是辰chen#xff0c;本文旨在准备考研复试或就业 #x1f4ab;本文内容是我为复试准备的第二个项目 #x1f4ab;欢迎… 文章目录 前言机器人简介机器人应用与前景机器人形态机器人的构成 ROS基础ROS的作用和特点ROS的运行机制ROS常用命令 前言 你好我是辰chen本文旨在准备考研复试或就业 本文内容是我为复试准备的第二个项目 欢迎大家的关注我的博客主要关注于考研408以及AIoT的内容 预置知识基本Python语法基本linux命令行使用 以下的几个专栏是本人比较满意的专栏(大部分专栏仍在持续更新)欢迎大家的关注 ACM-ICPC算法汇总【基础篇】 ACM-ICPC算法汇总【提高篇】 AIoT(人工智能物联网) 考研 CSP认证考试历年题解 机器人简介
机器人应用与前景
生活中的应用 工业应用 ROS元老机器人 – PR2 NASA 将机器人部署到空间站 智驾成为汽车核心卖点之一 机器人形态
轮式机器人 腿式机器人 轮腿机器人 无人机 机械臂
机器人的构成
• 传感器机器人的感官决定了能获取到哪些外部信息。类比人的视觉、触觉、听觉等。 • 算法和逻辑内部的数据处理。比如用深度学习算法识别物体、传感器融合定位、业务逻辑等。 • 执行器机器人向外的输出决定了能完成哪些任务。类比人的手、脚、语言、动作等。 • 机器人是复杂系统包含一系列协同工作的软件硬件。各个传感器、算法、业务逻辑、执行器之间有复杂的依赖关系。 ROS基础
ROS的作用和特点 机器人开发的难题
组件众多依赖关系复杂。如何兼顾灵活性、鲁棒性和性能组件可能由不同语言编写如何协同运行某些功能如建图、导航等很多机器人都需要有如何方便的复用如何调试、记录机器人运行时的大量数据
ROS的作用-提高软件复用
点对点的设计多语言支持丰富的工具包
点对点的设计
• 分布式的节点单元 • RPC TCP/UDP 通信系统 • 支持多机器协同分布式系统 • 各个节点独立编译、启动
远程过程调用英语Remote Procedure CallRPC是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间通常为一个开放网络的一台计算机的子程序而程序员就像调用本地程序一样无需额外地为这个交互作用编程无需关注细节。 点对点的设计是ROS中最重要的一个概念其中关键在于节点。一个系统可能由多个节点构成我们可以理解成每一个程序都是一个节点或者说每一个主函数都是一个节点节点之间是相互独立的节点和节点之间不一定运行在同一个物理机器上它可以是一个分布式的系统对于分布式系统而言通信就是重中之重。如上图所示有三大块代表着不同的设备用户电脑服务器机器人其中每一个椭圆都代表着一个节点他们是可以跑在不同的电脑上的。
比如我给出一个导航任务简单说明其部分运作流程在我们的用户电脑上运行一个节点这个节点用来获取用户的输入比如输入一个坐标这就是这个节点的作用当我们获得了这个输入之后我们可以把该坐标传递给下一个节点也就是进行节点间的通信如上图所示下一个节点为路径规划算法它拿到了坐标之后还不够还需要地图地图服务器也就另一个节点这两个节点就不是运行在用户电脑上了而是运行在服务器上它们之间就是网络通信所以即便不在一个机器上我们也可以通过网络来进行协同的工作也就是运行在一个分布式系统中。
简而言之可以理解成为各自都有一个主函数各自是独立运行的它们都会去遵循同一个通讯协议所以说它们之间能够传递信息。这就是ROS的点对点设计。
多语言支持:
• 支持 PythonCJava等语言 • 提供语言无关的数据接口定义 所谓语言无关如上图所示它是一个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 ClientClient 发送请求然后 Server 再返回请求是一个同步的通信模式。
ROS机制-Topic
• 指定名称和数据类型 • 创建流程
Talker、Listener 向 Master 注册发布/订阅哪个TopicMaster 向 Listener 发送 Talker 信息Listener 向 Talker 建立网络连接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 类型中指定了调用数据类型和返回数据类型 • 调用流程
Talker 向 Master 注册 ServiceListener 向 Master 请求 ServiceMaster 向 Listener 发送 Talker 信息Listener 向 Talker 请求 Service传递调用参数Talker 返回数据 首先也是要指定指定名称和 Service 类型注意 Service 类型因为它是有来有回的一次调用就是一个过程不像 Topic只要建立了连接每一次talker有新的数据都会发送给 ListenerTopic 假如 talker 是一个摄像头帧率是三十帧每秒那么一旦有了一个 Listener就会以每秒 30次的速率向 Listener 发送信息Service 只是一次调用过程
一个调用的数据类型就类似于函数的一个参数与此还会有一个返回数据类型即返回值这两个一起组成了一个 Service 类型
调用流程与 Topic 类似首先是注册Talker 也就是 Service ServerListener 也就是 Service Client它们在创建的时候都需要向 Master 注册Master 就会记住谁定义了哪个 Service谁要请求哪个 Service当有请求的时候Master 会向 Listener 发送 Talker 的信息Listener 就知道了 Talker 的信息就可以直接和 Talker 建立通信来完成一次请求。
可以把 Service 类比为函数调用一次调用就是传入一次参数返回一次数据。Service 主要作用并不是传递数据而是触发/调用某些逻辑之类的作用
话题 Topic服务 Service同步性异步同步通信模型发布/订阅服务器/客户端底层协议ROSTCP/ROSUDPROSTCP/ROSUDP反馈机制无有缓冲区有无实时性弱强节点关系多对多一对多(一个 Service Server)适用场景数据传输逻辑处理
ROS机制-参数
Talker 向 Master 设置参数Master 存储参数Listener 向 Master 查询参数Master 返回参数 ROS机制-文件系统
•xxx_ws工作空间根目录项目的基本单位 •xxx_ws/src各种代码存放位置我们只需要修改src中的文件 • xxx_ws/build 和 xxx_ws/devel编译生成的文件夹存放目标文件、依赖项等开发时一般不用管 • src中每个功能包
package.xml功能包的元数据名称、版本、作者、依赖项等CMakeLists.txt编译配置文件其他可选文件夹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负责人QQ674799975