<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ROS基础知识]]></title><description><![CDATA[<h3>ROS 简介</h3>
<ol>
<li>
<p dir="auto">什么是ROS<br />
ROS 是 Robot Operation System 的简称。是专门为机器人控制开发的系统。和一般的操作系统相比增加了软件包管理，信息通信框架等。同时这个系统对硬件进行了抽象使得各个组件之间的耦合更低，程序开发也更加方便快捷。</p>
</li>
<li>
<p dir="auto">ROS 能在哪些平台上使用<br />
ROS官方版本基于Ubuntu进行开发。所以无论是arm架构还是x86架构都可以使用。即使你所使用的平台无法安装Ubuntu或者Debian，只要能够安装Linux系统就可以从源码编译安装ROS。OSX也可以安装ROS，不过是测试版本，安装使用过程中可能会遇到问题，并不推荐大家使用。Windows的ROS已经实现，但并未完全开发完成。</p>
</li>
<li>
<p dir="auto">ROS的版本区别<br />
ROS每年5月发布一个版本。其中单数年份发布为短期版本，支持时间为2年。双数年份发布的版本为长期支持版，支持时间为5年。最新的长期支持版是Kinetic Kame。现在一般网上的教程是基于Hydro或者 Indigo。这些教程和Jade和Kinetic版本是通用的。<br />
不同版本之间并不完全通用。比如你的机器人的系统是Indigo的，但是你的本地操作系统是Jade的那么系统间通信就有可能会出现消息格式不匹配的情况。所以不同系统间的版本尽量保持一致。</p>
</li>
<li>
<p dir="auto">ROS的学习路线<br />
ROS开发中主要使用的语言是C++和Python，你需要对这两种语言都比较熟悉。同时ROS基于Ubuntu操作系统，这也要求你对Ubuntu比较熟悉。<br />
首先你可以先读完这篇文章，对于ROS的架构和基本概念有一个初步的认识。然后看官方wiki中的<a href="http://wiki.ros.org/ROS/Tutorials" target="_blank" rel="noopener noreferrer">Tutorial </a>。<br />
同时<a href="https://pan.baidu.com/s/1ge6ffZt" target="_blank" rel="noopener noreferrer">Learning ROS for Robotics Programming Second Edition</a>也是一个不错的选择。<br />
你也可以按照这个<a href="http://community.bwbot.org/topic/226/ros%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE">ROS思维导图</a>的方式来学习。<br />
在对ROS比较熟悉之后，如果你想了解更多关于ROS设计方面的东西可以看看<a href="https://github.com/ros-infrastructure/rep" target="_blank" rel="noopener noreferrer">REP</a><br />
如果想要了解关于ROS2方面的信息可以看<a href="http://design.ros2.org/" target="_blank" rel="noopener noreferrer">这里</a><br />
在实际使用中会遇到很多问题，欢迎在我们的ROS交流群中提问(538456117)<br />
当然想要更深入的了解ROS，阅读源代码也是一个不错的选择<br />
<a href="https://github.com/ros/ros" target="_blank" rel="noopener noreferrer">ROS源代码</a><br />
<a href="https://github.com/ros2/ros2" target="_blank" rel="noopener noreferrer">ROS2源代码</a></p>
</li>
<li>
<p dir="auto">ROS的未来<br />
ROS虽然大大方便了机器人开发，在业内有很广泛的应用，但是实际使用中还是有挺多问题。比如稳定性，网络带宽和多机器的情况下的自动连接等等。这些功能都会在ROS2中实现。随着ROS的不断发展，相信其在机器人行业会有越来越好的发展前景。</p>
</li>
</ol>
<h3>ROS的架构</h3>
<p dir="auto">ROS与其说是操作系统其实更像一个通信框架。ROS的基本单元是节点（Node）。节点之间可以通过订阅和发布Topic进行通信。节点的基本信息会存储在Master里面。下面以一个例子具体说明。假如我们现在有一个激光雷达，然后我们想要通过图形界面显示雷达的数据。那么整个结构就如下图所示</p>
<p dir="auto"><img src="/assets/uploads/files/1506330971764-qq%E6%88%AA%E5%9B%BE20170925154958.png" alt="0_1506330911799_QQ截图20170925154958.png" class=" img-responsive img-markdown" /></p>
<p dir="auto">激光雷达有一个节点叫做hokuyo，图形界面有一个节点叫做viewer。激光雷达节点从传感器读出数据之后，首先告诉Master自己在发布一个叫做scan的topic。然后在本地监听2345端口，等待其他节点连接。图形界面节点viewer启动之后，首先告诉Master自己在订阅一个叫做scan的topic。这时候Master就会告诉viewer节点谁在发布scan。Viewer获得到hokuyo的地址和端口信息后和hokuyo节点建立TCP连接。这样激光雷达的数据就从hokuyo节点发送至viewer节点了。<br />
通过这种架构可以实现节点的分布式处理功能。即不同的节点不要求一定在同一个机器人上。比如上例中的激光雷达节点和viewer节点就可以在不同的机器人上。也可以进一步实现多台机器人的调度。</p>
<h3>ROS的基本概念</h3>
<p dir="auto">从上例我们可以看出ROS中有以下几个比较重要的基本概念</p>
<ol>
<li>Master<br />
Master就是存放各种节点和topic信息的地方。节点之间通过Master了解到对方的信息。同时在Master的帮助下节点之间建立网络连接。</li>
<li>Node<br />
基本的ROS计算单元。</li>
<li>Topic<br />
节点之间的通信通道</li>
<li>Parameter Server<br />
参数服务器。在使用过程中可能不同的节点间要共享一些参数。这些参数就可以放在参数服务器里面。其作用就类似于不同节点公用的全局变量。在上面的例子中没有用到参数服务器。</li>
</ol>
<h3>ROS的安装</h3>
<p dir="auto">下面以Kinetic版本为例说明ROS的安装方法。</p>
<ol>
<li>安装Ubuntu 16.04</li>
<li>添加ROS源</li>
</ol>
<pre><code>sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" &gt; /etc/apt/sources.list.d/ros-latest.list'
</code></pre>
<ol start="3">
<li>添加源的key</li>
</ol>
<pre><code>sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
</code></pre>
<ol start="4">
<li>安装</li>
</ol>
<pre><code>sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
</code></pre>
<ol start="5">
<li>初始化rosdep</li>
</ol>
<pre><code>sudo rosdep init
rosdep update
</code></pre>
<h3>ROS的环境变量</h3>
<p dir="auto">ROS运行时依赖一些环境变量，所以我们要把其添加到自己的终端配置文件中。</p>
<pre><code>echo "source /opt/ros/kinetic/setup.bash" &gt;&gt; ~/.bashrc
source ~/.bashrc
</code></pre>
<p dir="auto">这样就会在<code>bash</code>中添加<code>source /opt/ros/kinetic/setup.bash</code>这样一行语句。每次打开一个终端都会执行上面的脚本。这个脚本会设置ROS相关的一些环境变量。</p>
<h3>下一步</h3>
<p dir="auto"><a href="http://wiki.ros.org/ROS/Tutorials" target="_blank" rel="noopener noreferrer">ROS tutorial</a></p>
]]></description><link>http://community.bwbot.org/topic/223/ros基础知识</link><generator>RSS for Node</generator><lastBuildDate>Tue, 10 Mar 2026 09:15:28 GMT</lastBuildDate><atom:link href="http://community.bwbot.org/topic/223.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Sep 2017 09:32:47 GMT</pubDate><ttl>60</ttl></channel></rss>