《ROS机器人开发实践》学习笔记1

学习笔记9/6/2024 cardiff 

致自己

学无止境,不管是幻想还是梦想,走下去--就像先辈们那样。

嘿,没有被嘲笑过的梦想又有什么意思呢。

天才和疯子之间一线之隔,我不能成天才还不能成疯子么。

疯狂,灵感的来源,疯起来,不要封起来。

路都是人走出来的,那么我为什么不能是第一个尝试开路的人(更何况已经有前辈们先我一步在负重前行了)。你并不孤独。

引文:‘分享胡适先生的一句名言,愿你我共勉:怕什么真理无穷,进 一寸有一寸的欢喜。’

梦的开始——初时ROS

ROS的起源

ROS,Robot Operating System,一款优秀的机器人软件框架,为软件开发工作体提供便利。其灵活性体现于集成大量的工具、库、协议。【个人理解:可以类比为软件工程中可用的IDE】。

ROS最初应用于斯坦福大学人工智能实验室与机器人技术公司 Willow Garage合作的个人机器人项目(Personal Robots Program)。

ROS的设计目标

ROS的设计目标是提高机器人研发中的软件复用率,所以它被设计 成为一种分布式结构,使得框架中的每个功能模块可以被单独设计、 编译,并且在运行时以松散耦合的方式结合在一起。【个人理解:类似于可编写多个function,单独设计并不断引用(不过实际好像还有本质区别)

‘ROS的出现就是为了鼓励 更多的开发者、实验室或者研究机构共同协作来开发机器人软件(见图 1-3)。例如一个拥有室内地图建模领域专家的实验室可能会开发并发 布一个先进的地图建模系统;一个拥有导航方面专家的组织可以使用建 模完成的地图进行机器人导航;另一个专注于机器人视觉的组织可能开 发出了一种物体识别的有效方法。ROS为这些组织或机构提供了一种相 互合作的高效方式,可以在已有成果的基础上继续自己工作的构建。’【个人理解:开源的便利性,(当然也同时需要注意个人数据安全和保密措施)

ROS的特点

点对点设计

‘在ROS中,每一个进程都以一个节点的形式运行,可以分布于多个 不同的主机。节点间的通信消息通过一个带有发布和订阅功能的RPC传 输系统,从发布节点传送到接收节点。这种点对点的设计可以分散定 位、导航等功能带来的实时计算压力,适应多机器人的协同工作。’【个人理解:类似API?暂留疑问

多语言支持

‘ROS使用简洁、中立的定义语言描述模块之间的消息接 口,在编译过程中再产生所使用语言的目标文件,为消息交互提供支 持,同时也允许消息接口的嵌套使用。目前已经支持Python、C++、 Java、Octave和LISP等多种不同的语言,也可以同时使用这些语言完成 不同模块的编程。’

架构精简、集成度高

‘ROS框架具有的模块化特点 使得每个功能节点可以进行单独编译,并且使用统一的消息接口让模块 的移植、复用更加便捷。同时,ROS开源社区中移植、集成了大量已有 开源项目中的代码,例如Open Source Computer Vision Library(OpenCV 库)、Point Cloud Library(PCL库)等,开发者可以使用丰富的资源实 现机器人应用的快速开发。’

组件化工具包丰富

个人理解:有点像python或者java之类语言的libraries/库,已经帮忙打包好了,也可以自己打包

免费且开源

个人理解:类github

问GPT的回复:】

在ROS(Robot Operating System)中,高复用性和传统的函数复用有一些不同的含义和实现方式。让我们详细分析一下:

1. 函数复用

函数复用指的是在程序中多次调用同一个函数来执行相同的操作。这个概念在点对点设计和面向对象设计中都是常见的。例如,一个计算两点间距离的函数可以在多个地方被调用,而无需重复编写代码。

2. 面向对象的复用

面向对象设计中的复用更多地体现在类的继承和多态性上。通过定义基类和派生类,子类可以继承父类的属性和方法,从而实现代码的复用和扩展。此外,多态性允许不同的类以统一的接口实现不同的功能,这也提高了代码的复用性。

3. ROS中的复用

ROS的高复用性主要体现在以下几个方面:

a. 节点(Nodes)

ROS中的节点是独立的可执行文件,每个节点完成特定的任务。通过节点的复用,你可以在不同的机器人或不同的应用中使用相同的节点。例如,一个负责读取激光雷达数据的节点可以在多个项目中复用,而无需重新编写读取数据的代码。

b. 消息(Messages)和服务(Services)

ROS使用消息传递机制在节点之间进行通信。标准化的消息类型和服务接口使得不同的节点可以无缝地协同工作。例如,一个控制机器人的节点可以订阅一个传感器数据的消息,而无需关心数据是如何生成的。这种标准化接口实现了高层次的复用。

c. 包(Packages)

ROS中的包是功能的集合,包含节点、库、配置文件等。通过使用现有的包,你可以在自己的项目中复用其他人开发的功能。例如,使用导航包来实现机器人导航,而无需从头开始编写导航算法。

d. 动态重配置

ROS支持动态参数重配置,允许在运行时改变节点的行为。通过这种机制,你可以在不同的应用场景中复用同一个节点,只需调整参数即可。

4. 对比分析

函数复用

  • 简单复用:通过多次调用同一个函数来复用代码。
  • 局限性:函数的复用范围通常局限于单个程序或模块,复用性不如面向对象和ROS中的机制高。

面向对象的复用

  • 继承和多态:通过继承和多态性实现类的复用和扩展。
  • 代码复用:类和对象的复用性高,可以在不同项目中使用相同的类或对象。

ROS的复用

  • 节点复用:通过节点的模块化设计,实现跨项目和跨平台的复用。
  • 消息和服务:标准化接口使得不同节点可以协同工作,实现高层次的复用。
  • 包复用:通过使用现有的包,避免重复开发,提升开发效率。
  • 动态重配置:运行时参数调整,提高了节点的灵活性和复用性。
总结

ROS的高复用性不仅体现在函数和类的复用上,还包括节点、消息、服务和包等多个层面的复用机制。这些机制使得ROS在机器人开发中具有很高的灵活性和扩展性。相比之下,传统的函数复用虽然简单直接,但在大型和复杂系统中的复用性和灵活性较低。因此,学习和理解ROS的复用机制,将有助于你更好地设计和实现高效、可维护的机器人系统。

安装ROS

‘ROS的安装方法主要有两种:软件源安装和源码编译安装。软件源 (Repository)为系统提供了一个庞大的应用程序仓库,只要通过简单 的命令即可从仓库中找到需要的软件并完成下载安装。相反,源码编译 的方法相对复杂,需要手动解决繁杂的软件依赖关系,更适合那些对系 统比较熟悉而且希望在未支持的平台上安装ROS的开发者。’【个人理解:我是懒狗+新手,先简易后精通

之前用gitbash建立Ubuntu系统的虚拟机安装,但是很难实现可视化操作。B站了解后发现大多数是用的VMware或者其他创建虚拟机。GPT给出其他建议是分盘创建Linux系统。【暂留疑问】【好吧,查了下,是自己肤浅了,gitbash只是一个命令行工具,主要用于执行Git命令和一些基本的Unix命令。因此,图形界面的配置取决于你安装的Ubuntu版本和虚拟化软件的设置,而不是Git Bash本身。】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值