ROS是什么

我们都知道 ROS的一些基本性能:机器人操作系统(Robot OperatingSystem),一个开源的元级操作系统(后操作系统),一些包,软件工具的集合,一个分布式的可跨进程,跨机器进行通讯的体系架构,能够提供工具对系统进行实时性的数据分析,编程语言独立(c++, python, lisp, java等等),跨平台等等.

 提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。

 

可是需要注意的是:它即不是一个真正的操作系统,也不是一种编程语言,更不是一个编程开发环境。所以不要说我用ros开发了一个什么什么功能的软件…… Willow Garage 那些牛人们会哭的……

 

ROS系统根据代码的维护者和分布来标识的话,主要有两大部分,一部分是核心部分,也是主要部分,一般称为main。 主要是 Willow Garage 公司 和一些开发者来设计提供与维护。他们提供一些分布式计算的基本工具,以及整个ros系统核心部分的程序编写。这个一般我们下载安装后,就会在我们的电脑上。

另外一部份就是全球范围的代码。由不同国家的ros社区组织开发和维护。一种是各种库的代码,如opencv,pcl,tf等等;在库的上一层,是capability,从功能的角度提供的代码,如face recognition,beer identification,delivery,grasp等等,它们调用各种库来实现这些功能;最上层的代码是应用级的代码,叫做apps,可以让机器人完成某一种应用,如去拿啤酒,而这个过程则调用不同功能的代码进行组合,如啤酒的识别,抓取啤酒等等。这个一般需要我们将相应的package下载下来,然后可以学习和使用。

 

 

此图摘之Jonatha Bohren 的 ROS Crash-Course, Part I

Introduction to ROS distribution, buildsystem and infrastructure



不过,对于使用者来说,无论是谁提供和维护的代码,我们都可以下载到自己的电脑上,来进行下一步的工作。

然后我们从另外的角度来理解ROS。一般来说,ROS系统有三级概念:文件系统级、计算图级、社区级。

FilesystemLevel :*

文件系统级概念:我们在硬盘上面ROS 源代码的组织方式。会通过功能包(package) manifest, package stack等方式来进行组织。

  • Packages:ROS的基本组织,可以包含任意格式文件。一个Package 可以包含ROS执行时处理的文件(nodes),一个ROS的依赖库,一个数据集合,配置文件或一些有用的文件在一起。
  • Manifests:Manifests (manifest.xml) 提供关于Package元数据,包括它的许可信息和Package之间依赖关系,以及语言特性信息像编译标志(编译优化参数)。
  • Stacks: Stacks 是Packages的集合,它提供一个完整的功能,像“navigation stack” Stack与版本号关联,同时也是如何发行ROS软件方式的关键。
  • Manifest Stack Manifests: Stack manifests (stack.xml) 提供关于Stack元数据,包括它的许可信息和Stack之间依赖关系。
  • Message (msg) types: 信息描述, 位置在路径:my_package/msg/MyMessageType.msg, 定义数据类型在ROS的 messages ROS里面。
  • Service (srv) types: 服务描述,位置在路径:my_package/srv/MyServiceType.srv, 定义这个请求和相应的数据结构 在ROS services 里面。

计算图级:程序运行时,所有进程及它们所进行的数据处理,将会通过一种点对点的网络形式表现出来。将通过节点,节点管理器,topic, service等来进行表现。

Computation Graph Level就是用ROS的P2P(peer-to-peer网络传输协议)网络集中处理所有的数据。基本的ComputationGraph的概念包括Node, Master, Parameter Sever,messages, services, topics,和bags, 以上所有的这些都以不同的方式给Graph传输数据。

  • Nodes: Nodes 是一系列运行中的程序。ROS被设计成在一定颗粒度下的模块化系统。一个机器人控制系统通常包含许多Nodes。比如一个Node控制激光雷达,一个Node控制车轮马达,一个Node处理定位,一个Node执行路径规划,另外一个提供图形化界面等等。一个ROS节点是由Libraries ROS client library写成的, 例如roscpp 和 rospy.
  • Master: ROS Master 提供了登记列表和对其他计算Graph的查找。没有Master,节点将无法找到其他节点,交换消息或调用服务。
  • Server Parameter Server: 参数服务器使数据按照钥匙的方式存储。目前,参数服务器是主持的组成部分。
  • Messages:节点之间通过messages来传递消息。一个message是一个简单的数据结构,包含一些归类定义的区。支持标准的原始数据类型(整数、浮点数、布尔数,等)和原始数组类型。message可以包含任意的嵌套结构和数组(很类似于C语言的结构structs)
  • Topics: Messages以一种发布/订阅的方式传递。一个node可以在一个给定的topic中发布消息。Topic是一个name被用于描述消息内容。一个node针对某个topic关注与订阅特定类型的数据。可能同时有多个node发布或者订阅同一个topic的消息;也可能有一个topic同时发布或订阅多个topic。总体上,发布者和订阅者不了解彼此的存在。主要的概念在于将信息的发布者和需求者解耦、分离。逻辑上,topic可以看作是一个严格规范化的消息bus。每个bus有一个名字,每个node都可以连接到bus发送和接受符合标准类型的消息。
  • Services:发布/订阅模型是很灵活的通讯模式,但是多对多,单向传输对于分布式系统中经常需要的“请求/回应”式的交互来说并不合适。因此,“请求/回应” 是通过services来实现的。这种通讯的定义是一种成对的消息:一个用于请求,一个用于回应。假设一个节点提供了一个服务提供下一个name和客户使用服务发送请求消息并等待答复。ROS的客户库通常以一种远程调用的方式提供这样的交互。
  • Bags: Bags是一种格式,用于存储和播放ROS消息。对于储存数据来说Bags是一种很重要的机制。例如传感器数据很难收集但却是开发与测试中必须的。

社区级:ROS在网络上进行代码发布的一种表现形式。因为ROS为了最大限度地提高社区参与,是它能够快速的发展,设计者们不再是由少部分人来存放,更新和维护ROS代码,而采用联合仓库的模式来处理。每个研究所和组织会以Repositories 仓库为单位来发布他们的代码。这样就鼓励世界各地的开发者和用户,提供和维护自己的ROS仓库代码,而且他们对代码具有直接的所有权和控制权。

Repositories的数目,从2007年11月的1个到2008年11月的4个,到2009年11月的16个,2010年11月的52个,到2011年7月的79个,到现在institutions 的 repositories 达到90个,personal的达到14个,singleserving的达到15个。

•发行版 Distributions:ROS的发行版是一系列可安装的包的集合。 (相当于Linux发行版)。 可参加 http://blog.youkuaiyun.com/lynnandwei/article/details/6881235
•软件仓库Repositories:不同的机构可以以仓库为单位开发和发布自己的ROS软件组件。
•ROS的Wiki:ROS维基是记录有关ROS的信息(此信息大部分来自于此)的主要论坛。
•bug ticket system
•邮件列表:ROS用户邮件列表。
•博客


 

 *此处翻译转载于 http://zh.wikipedia.org/wiki/ROS

<think>好的,我现在要回答用户关于ROS运行环境及依赖条件的问题。首先,我需要回忆一下自己对ROS环境的了解,特别是ROS 1和ROS 2的区别,因为用户提到的引用中有ROS 2的内容。 首先,ROS的运行环境通常需要设置一些环境变量,比如ROS_DISTRO、ROS_VERSION、ROS_PACKAGE_PATH等。用户提到的引用[^1]中提到了使用`printenv | grep -i ROS`来检查环境是否正确,这说明环境变量配置是ROS运行的关键部分。因此,我需要详细说明这些环境变量的作用以及如何正确配置它们。 接下来,依赖管理是ROS的一个重要方面。ROS使用包管理工具如apt(Debian/Ubuntu)和rosdep来处理依赖。用户可能需要在创建或安装ROS包时安装系统依赖和ROS依赖,例如通过`rosdep install`命令。引用[^3]提到了CMakeLists.txt中的add_executable,这说明编译过程中的依赖配置也很重要,可能需要通过CMake来管理构建依赖。 然后,工作空间和构建系统也是ROS环境的核心部分。用户通常需要创建工作空间(如catkin_ws或colcon_ws),并使用catkin_make或colcon build等命令来编译代码。这里需要解释工作空间的结构,比如src、build、devel目录的作用,以及如何正确配置这些路径。 网络配置方面,ROS 1依赖于单主节点(roscore),而ROS 2使用DDS进行通信,因此正确的网络设置(如ROS_MASTER_URI和ROS_IP/ROS_HOSTNAME)对于节点间的通信至关重要。用户可能遇到的问题包括节点无法发现彼此,这可能与这些环境变量有关。 关于工具和调试,引用[^2]提到了rqt_graph,这是可视化节点关系的重要工具。除此之外,还有roslaunch、rviz、rosbag等工具,用户需要了解这些工具的使用方法和依赖条件。 最后,需要区分ROS 1和ROS 2的不同环境要求。例如,ROS 1使用roscore,而ROS 2不需要,但需要安装DDS实现如Fast DDS或Cyclone DDS。同时,两者的构建工具也不同,ROS 1常用catkin,ROS 2则使用colcon。 在组织回答时,应该分点说明,每个部分包括关键的环境变量、依赖管理、工作空间结构、网络配置等,并引用用户提供的参考文献来支持内容。同时,生成的相关问题需要覆盖环境配置、依赖管理、工具使用以及版本差异等方面,帮助用户进一步探索。</think>### ROS运行环境及依赖条件 #### 1. **基础环境配置** - **操作系统支持**:ROS 1主要支持Ubuntu(推荐LTS版本),ROS 2则扩展至Windows、macOS和多种Linux发行版[^1]。 - **环境变量**:运行前需通过`source`命令加载环境配置,例如: ```bash source /opt/ros/<distro>/setup.bash # ROS 1 source /opt/ros/<distro>/local_setup.bash # ROS 2 ``` 使用`printenv | grep -i ROS`可验证环境变量(如`ROS_DISTRO`、`ROS_PACKAGE_PATH`)是否生效[^1]。 #### 2. **依赖管理** - **系统依赖**:通过`apt`安装基础库(如`libboost`、`OpenCV`)。 - **ROS依赖**: - **ROS 1**:在`package.xml`中声明依赖(如`roscpp`、`std_msgs`),通过`rosdep install`安装。 - **ROS 2**:类似机制,但依赖项可能不同(如`rclcpp`替代`roscpp`)。 - **构建工具**: - ROS 1使用`catkin_make`或`catkin build`。 - ROS 2使用`colcon build`,需在`CMakeLists.txt`中配置编译目标。 #### 3. **工作空间结构** - **典型目录**: ``` workspace/ src/ # 源代码 build/ # 编译中间文件 devel/ # 生成的可执行文件与环境脚本(ROS 1) install/ # ROS 2的安装目录 ``` 编译后需`source devel/setup.bash`(ROS 1)或`source install/local_setup.bash`(ROS 2)激活环境。 #### 4. **网络与通信配置** - **ROS 1**:依赖`roscore`作为主节点,需设置: ```bash export ROS_MASTER_URI=http://<IP>:11311 export ROS_IP=<本机IP> ``` - **ROS 2**:基于DDS协议,需选择DDS实现(如`Fast DDS`)并配置`ROS_DOMAIN_ID`避免网络冲突。 #### 5. **调试工具** - **可视化工具**: - `rqt_graph`:动态显示节点拓扑。 - `rviz`(ROS 1)或`rviz2`(ROS 2):三维数据可视化。 - **命令行工具**: - `rosnode list`(ROS 1)/`ros2 node list`(ROS 2):查看活跃节点。 - `rostopic echo`(ROS 1)/`ros2 topic echo`(ROS 2):监控话题数据。 #### 6. **版本差异** - **ROS 1**:需手动启动`roscore`,通信基于TCPROS。 - **ROS 2**:去中心化,支持实时系统和嵌入式设备,通信依赖DDS的QoS策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值