-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
183 lines (162 loc) · 22 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>XiongXiao's Blog</title><link href="http://xiongxiaoxx.github.io/" rel="alternate"></link><link href="http://xiongxiaoxx.github.io//atom.xml" rel="self"></link><id>http://xiongxiaoxx.github.io/</id><updated>2014-05-08T11:00:00+08:00</updated><entry><title>[HTML] Head First HTML & CSS 学习笔记(1)</title><link href="http://xiongxiaoxx.github.io/blog/2014/05/08/learn_html_1/" rel="alternate"></link><updated>2014-05-08T11:00:00+08:00</updated><author><name>Xiong Xiao</name></author><id>tag:xiongxiaoxx.github.io,2014-05-08:blog/2014/05/08/learn_html_1/</id><summary type="html"><h2>开始了解HTML</h2>
<blockquote>
<p>你和Web之间的唯一障碍就是学习使用其中的语言</p>
</blockquote>
<p><code>HyperText Markup Language(超文本标记语言)</code>,简写为HTML。让我们先从宏观的角度看看HTML以及Web的工作原理
<img alt="1" src="/images/html-1-1.png" /></p>
<h3>1.Web服务器的工作</h3>
<p>Web服务器主要是处理浏览器的各种请求,包括浏览网页,图片,播放声音,观看电影等。
<img alt="2" src="/images/html-1-2.png" /></p>
<h3>2.Web浏览器的工作</h3>
<p>上网的过程中点击某个链接来浏览网页,你的点击会导致浏览器向Web服务器请求一个HTML网页,然后浏览器接收该网页,并在浏览器窗口中显示
<img alt="3" src="/images/html-1-3.png" /></p>
<h3>3.HTML例</h3>
<p>下面来看一个简单的例子,HTML源码如下:
<img alt="4" src="/images/html-1-4.png" /></p>
<h3>4.浏览器创建了什么</h3>
<p>当浏览器“阅读”HTML时,它会解析文本中所有的 <em>标签</em>,标签使用尖括号括起来的字母或者单词,例如<code>&lt;head&gt;</code>,<code>&lt;p&gt;</code>,<code>&lt;h1&gt;</code> 等等。标签告诉了浏览器文本的结构和意义。我们能通过HTML中的标签告诉浏览器哪些文本是<strong>标题</strong>,哪些文本是<strong>段乱</strong>,哪些需要<strong>强调</strong>,哪里需要放置<strong>图片</strong>。让我们来看看浏览器是怎么解析刚刚例子中的标签的
<img alt="5" src="/images/html-1-5.png" /></p></summary><category term="HTML"></category><category term="CSS"></category></entry><entry><title>[ROS]ROS PC间通讯</title><link href="http://xiongxiaoxx.github.io/blog/2014/04/15/ros_multiplemachines/" rel="alternate"></link><updated>2014-04-15T17:00:00+08:00</updated><author><name>Xiong Xiao</name></author><id>tag:xiongxiaoxx.github.io,2014-04-15:blog/2014/04/15/ros_multiplemachines/</id><summary type="html"><p>Kinect输出的数据包括640*480的rgb颜色数据以及depth深度数据,计划采用的实验平台是Xilinx提供的<a href="http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;Prod=ZYBO">Zybo</a>平台,由于Kinect的数据量大,加上3D建模的算法较为复杂,想要在Zybo平台上实现所有的功能恐怕是心有余而力不足,所以就需要在Zybo上做一些相对简单的处理,再将数据发送至PC端实现一些较为复杂的算法和图形显示功能。</p>
<p>由于Zybo上的ROS暂时还未实现,暂且先用两台PC做实验。</p>
<p>在多台机器上部署ROS并不复杂,记住以下几点</p>
<ul>
<li>只能有一个主控制器<code>ROS master</code>,选择一台机器运行</li>
<li>所有的机器必须配置为使用相同的主控制器,通过设置环境变量<code>ROS_MASTER_URI</code>实现</li>
<li>所有的机器端口之间都必须有完整的双向连接</li>
<li>每台机器都必须要有一个自己的名字,其他的机器通过名字解析
具体设置可以参考<a href="http://wiki.ros.org/ROS/NetworkSetup">ROS/NetworkSetup</a></li>
</ul>
<h2>实验步骤</h2>
<p>这里的<code>MASTER_IP</code>和<code>SLAVE_IP</code>分别代表两台机器的IP地址,请自行更改</p>
<p>1.在主机运行</p>
<div class="highlight"><pre><span class="nv">$ </span><span class="nb">export </span><span class="nv">ROS_MASTER_URI</span><span class="o">=</span>http://MASTER_IP:11311
<span class="nv">$ </span><span class="nb">export </span><span class="nv">ROS_IP</span><span class="o">=</span>MASTER_IP
<span class="nv">$ </span>roscore
<span class="nv">$ </span>rosrun rospy_tutorials listener.py
</pre></div>
<p>2.在从机运行</p>
<div class="highlight"><pre><span class="nv">$ </span><span class="nb">export </span><span class="nv">ROS_MASTER_URI</span><span class="o">=</span>http://MASTER_IP:11311
<span class="nv">$ </span><span class="nb">export </span><span class="nv">ROS_IP</span><span class="o">=</span>SLAVE_IP
<span class="nv">$ </span>rosrun rospy_tutorials talker.py
</pre></div>
<p>注意:在<code>bash</code>中使用export只对当前终端有效,如果新开终端,需要重新设置,所以建议将<code>export ROS_MASTER_URI</code> 和 <code>export ROS_IP</code>直接写入~/.bash文件</p></summary><category term="ROS"></category><category term="MultipleMachines"></category></entry><entry><title>[ROS]Kinect 3D 环境建模的尝试与改造</title><link href="http://xiongxiaoxx.github.io/blog/2014/04/01/kinect_3d/" rel="alternate"></link><updated>2014-04-01T17:00:00+08:00</updated><author><name>Xiong Xiao</name></author><id>tag:xiongxiaoxx.github.io,2014-04-01:blog/2014/04/01/kinect_3d/</id><summary type="html"><p>今年团队参加了<a href="http://www.openhw.org/">openHW</a> 2014开源硬件与嵌入式大赛。计划用四旋翼飞行器搭载kinect实现室内环境的三维建模。期望的最终实现下过如下图:
<img alt="3d_output" src="/images/3d_output.png" /></p>
<p>去年我们团队同样参加了这个比赛,题目是<a href="http://www.openhw.org/project/index_view_2311.html">混合实时移动机器人平台</a>,实现小型轮式移动机器人室内环境的2D地图构建和导航,采用ROS(Robot Operation System)分布式架构。演示视频在<a href="http://v.youku.com/v_show/id_XNTc3MzkxODcy.html">这里</a>。</p>
<p>虽说已经有了去年的基础,但从2D升级到3D还是面临着很多挑战。具体体现在以下几个方面:</p>
<ul>
<li>数据量的大幅增加,网络传输的带宽限制</li>
<li>环境信息的特征识别、地图拼接的算法等都更加复杂</li>
<li>飞行器的飞行状态的不稳定性</li>
</ul></summary><category term="kinect"></category><category term="ROS"></category><category term="3D"></category></entry><entry><title>[Pelican] 使用Pelican搭建静态博客</title><link href="http://xiongxiaoxx.github.io/blog/2014/03/25/page1/" rel="alternate"></link><updated>2014-03-25T22:20:00+08:00</updated><author><name>Xiong Xiao</name></author><id>tag:xiongxiaoxx.github.io,2014-03-25:blog/2014/03/25/page1/</id><summary type="html"><h2>为什么写博客</h2>
<p>一方面是对自己平时工作和学习中收获的自我总结和积累,另一方面,借用知乎的一句话说就是“<strong>与世界分享你的知识</strong>”。</p>
<h2>为什么选择<a href="http://docs.getpelican.com/en/3.3.0/">Plican</a></h2>
<p>写博客有两种选择:</p>
<p>一种是博客社区,中文的比如<a href="http://blog.csdn.net/">CSDN</a>,<a href="https://www.cnblogs.com/">博客园</a>等,我之前在CSDN上的博客在<a href="http://blog.csdn.net/xiongxiaoxx">这里</a>。社区中不乏很多好的文章,而且搜索起来比较方便。</p>
<p>第二种是搭建个人的独立博客。一直以来搭建独立Blog的首选只有 <code>Wordpress</code> ,不但安装快捷简单,还有无数的插件和主题。我也学习过<code>Python</code> 和<code>Django</code>,尝试过用<code>Django</code>自己搭建一个博客,感兴趣的可以看看<a href="http://django-blog-zinnia.com/">django-blog-zinnia</a>,但最终因为相对繁杂的配置和管理放弃了。请原谅我的孤陋寡闻,我是直到三个月前才知道<a href="https://pages.github.com/">Github Pages</a> 和静态博客这个概念的。</p>
<h3>静态Blog生成工具的好处:</h3>
<ul>
<li>静态,对托管空间没有要求,只要支持Web服务即可,可以直接放在Github上</li>
<li>支持 <code>reStructuredText</code> 和 <code>Markdown</code> 语法,这种所想即所得的标记语言加上 <code>Emacs</code>的定制配置,写起来很顺手</li>
<li>管理,日志都是文本文件,可以用 <code>Git</code> 方便的管理、进行版本控制。</li>
<li>内嵌代码支持,使用 <code>pygments</code> 代码高亮</li>
<li>轻量级,美观,自定义性强,让你专注于内容等等其他优点就不多说了</li>
</ul>
<p>Github Pages 官方支持的是<code>Jekyll</code>。看到很多使用Pelican的教程中都有这样一句话“之所以没有使用的Jekyll, 是因为它是Ruby编写, 而我又对Ruby没有啥兴趣, 所以还是选择了使用了我熟悉的Python编写的Pelican”。我自己也是一个Python爱好者,Ruby接触的很少,所以Python自然也是我的首选。</p>
<h2>安装</h2>
<p>建议在<code>virtualenv</code>下使用,首先安装virtualenv:</p>
<div class="highlight"><pre><span class="nv">$ </span>sudo pip install virtualenv
</pre></div>
<h3>建立 virtualenv 环境</h3>
<div class="highlight"><pre><span class="nv">$ </span>virtualenv pelican
<span class="nv">$ </span><span class="nb">cd </span>pelican
<span class="nv">$ </span><span class="nb">source </span>bin/activate
</pre></div>
<h3>从 <code>Github</code> 克隆最新代码安装 <code>Pelican</code></h3>
<div class="highlight"><pre><span class="nv">$ </span>git clone git://github.com/getpelican/pelican.git
<span class="nv">$ </span><span class="nb">cd </span>pelican
<span class="nv">$ </span>python setup.py install
</pre></div>
<p>到此<code>Pelican</code>就安装好了。</p>
<h2>新建Blog</h2>
<p>创建文件夹并新建Blog</p>
<div class="highlight"><pre><span class="nv">$ </span>mkdir myblog
<span class="nv">$ </span><span class="nb">cd </span>myblog
<span class="nv">$ </span>pelican-quickstart
</pre></div>
<p>回答一系列的问题之后会自动在当前目录生成以下文件</p>
<div class="highlight"><pre>.
|-- content <span class="c"># 所有的文章和图片都放在此目录</span>
|-- develop_server.sh <span class="c"># 用于开启测试服务器</span>
|-- Makefile <span class="c"># 方便管理博客的Makefile</span>
|-- output <span class="c"># 静态文件生成目录</span>
|-- pelicanconf.py <span class="c"># 配置文件</span>
|-- publishconf.py <span class="c"># 发布用的配置文件</span>
</pre></div>
<h2>新建文章</h2>
<p>在 content 目录下新建文件夹,文章便会自动归类到该文件夹名的分类中。</p>
<p>如果要建立页面(比如about页面),在 content 中新建文件夹 pages ,将文件放在该文件夹中即可。</p>
<p>以下用 Markdown 为例:</p>
<div class="highlight"><pre>Title: <span class="o">[</span>Pelican<span class="o">]</span> 使用Pelican搭建静态博客
Date: 2014-03-25 22:20
Category: Python
Tags: pelican, python
Slug: build-blog-with-pelican <span class="c">#指定生成页面的名称, 比如这个页面的最后生成的名称为build-blog-with-pelican.html</span>
Author: Xiong Xiao
Blog具体内容...
</pre></div>
<h2>生成Blog</h2>
<p>生成Blog非常简单,之需要运行</p>
<div class="highlight"><pre><span class="nv">$ </span>make html
</pre></div>
<p>即可在 output 目录下生成全站的页面。只需把 output 下的所有文件上传至Web服务器就可以访问了。</p></summary><category term="pelican"></category><category term="python"></category></entry><entry><title>[ROS]fuerte版本的下解决rgbdslam包不兼容的问题</title><link href="http://xiongxiaoxx.github.io/blog/2014/03/22/rgbd_slam/" rel="alternate"></link><updated>2014-03-22T20:00:00+08:00</updated><author><name>Xiong Xiao</name></author><id>tag:xiongxiaoxx.github.io,2014-03-22:blog/2014/03/22/rgbd_slam/</id><summary type="html"><p>最近学习ROS的过程中入手了kinect,一些驱动部分已经装好,对人体的骨架识别在一番折腾之后也没有问题了,唯独在对环境进行地图建模的地方一直卡住很久,由于手上没有现成的机器人,本人也是ROS新手,所以只能按照官方的教程一步一步来,具体可以参考<a href="http://www.ros.org/wiki/rgbdslam">rgbdslam Wiki</a>。下载完rgbdslam_freiburg包,也通过</p>
<div class="highlight"><pre>rosdep update
rosdep install rgbdslam_freiburg
</pre></div>
<p>安装了libg2o,但在最终编译的时候出现错误,导致编译不能通过。上ROS ANWSERS 找解决办法,发现有很多和我类似的情况,最后我找到了<a href="http://answers.ros.org/question/50585/rgbdslam-error-in-fuerte-and-electric/">这个</a></p>
<p>其中的回答大意就是删除libg2o包,下载旧版本的g2o包,然后更改rgbdslam_freiburg包编译过程中用到的依赖。</p>
<p>我的步骤如下</p>
<ol>
<li>
<p>到<a href="http://openslam.org/g2o.html">http://openslam.org/g2o.html</a> 通过svn获取源码,阅读trunk文件夹中的README.TXT安装一些依赖之后再编译。</p>
</li>
<li>
<p>在<a href="http://ros.org/wiki/g2o">http://ros.org/wiki/g2o</a>通过svn下载包,然后编译,在编译过程中会提示网址的svn证书不受信任,编译终止。通过在网上查资料,更改g2o文件夹下的MakeFile中的SVN配置即可:
<code>SVN_CMDLINE = svn --no-auth-cache --trust-server-cert --non-interactive --config-dir</code></p>
</li>
<li>
<p>更改之后重新编译,耗时较长,大概400s,请耐心等待。</p>
</li>
<li>
<p>g2o包编译成功之后,按照别人给的回答修改rgbdslam_freiburg包编译过程中用到的依赖,再次编译rgbdslam_freiburg包,成功!</p>
</li>
</ol></summary><category term="kinect"></category><category term="ROS"></category><category term="3D"></category><category term="rgbdslam"></category></entry><entry><title>[ROS]即时定位与地图构建(SLAM)的相关研究</title><link href="http://xiongxiaoxx.github.io/blog/2014/03/20/slam/" rel="alternate"></link><updated>2014-03-20T20:00:00+08:00</updated><author><name>Xiong Xiao</name></author><id>tag:xiongxiaoxx.github.io,2014-03-20:blog/2014/03/20/slam/</id><summary type="html"><p>即时定位与地图构建(SimultaneousLocalization AndMapping)指的是机器人在自身位置不确定的条件下,在完全未知环境中创建地图,同时利用地图进行自主定位和导航。</p>
<p>SLAM问题可以描述为:机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和传感器数据进行自身定位,同时建造增量式地图。</p>
<ul>
<li>定位(localization):机器人必须知道自己在环境中位置。</li>
<li>建图(mapping):机器人必须记录环境中特征的位置(如果知道自己的位置)</li>
<li>SLAM:机器人在定位的同时建立环境地图。其基本原理是运过概率统计的方法,通过多特征匹配来达到定位和减少定位误差的。</li>
</ul>
<p><img alt="图 SLAM的基本过程" src="/images/slam_base.jpg" /></p>
<p>移动机器人自定位与环境建模问题是紧密相关的。环境模型的准确性依赖于定位精度,而定位的实现又离不开环境模型。在未知环境中,机器人没有什么参照物,只能依靠自己并不十分准确的传感器来获取外界信息,如同一个盲人在一个陌生环境中摸索的情况。这种情况下,定位是比较困难的。有地图的定位和有定位的地图创建都是容易解决的,但无地图的定位和未解决定位的地图创建如同"鸡--蛋"问题,无从下手。已有的研究中对这类问题的解决方法可分为两类:一类利用自身携带的多种内部传感器(包括里程仪、罗盘、加速度计等),通过多种传感信息的融合减少定位的误差,使用的融合算法多为基于卡尔曼滤波的方法。这类方法由于没有参考外部信息,在长时间的漫游后误差的积累会比较大。另一类方法在依靠内部传感器估计自身运动的同时,使用外部传感器(如激光测距仪、视觉等)感知环境,对获得的信息进行分析提取环境特征并保存,在下一步通过对环境特征的比较对自身位置进行校正。但这种方法依赖于能够取得环境特征</p>
<h3>SLAM的三个基本问题</h3>
<p>Leonard和 Durrant-Whyte将移动机器人完成任务定义为三个问题“Wheream I?”、“Wheream I going?”和“Howdo I getthere”,就是定位、目标识别和路径规划,为了能实现导航,移动机器人需要靠本体感受传感器和环境感知传感器来实现对本体位姿估计和外部环境位姿的定位。依据环境空间的描述方法,Desouza等将视觉导航的方法化为三类:
(1)已知地图的导航(Map-BasedNavigation):表示地图的方法几何特征(GeometricPrimitives)、拓扑特征(TopologicalFeatures)或占据栅格(OccupancyGrids)移动机器人依据这些已知的环境地图进行导航。
(2)地图建立的导航(Map-Building-BasedNavigation):在没有已知环境地图的情况下,移动机器人通过自身的导航运动和传感器的不断感知更新来进行导航。
(3)未知环境的导航(MaplessNavigation):相对于上面两种方法,在实时的动态环境中无法建立明确的地图表达形式,更多的是通过传感器获得的观测信息用来识别或者跟踪环境中的物体来导航。
但是由于感知信息的不确定性,移动机器人很难实现定位的准确,因而,在未知环境中的定位成为最关键的问题
定位(Wheream I?)是实现自主能力的最基本问题,是为了确定机器人在运行环境中相对于世界坐标系的位置及其本身的位姿。
移动机器人的定位与其它领域研究课题的关系如图所示:</p>
<p><img alt="图 SLAM与各领域关系图" src="/images/slam_relation.jpg" /></p>
<p>现有的移动机器人自主定位方法主要是局部定位和全局定位。局部是通过测量相对于机器人初始位姿的距离和方向来确定当前的位姿,但随着时间的累计造成定位的误差较大,无法精确定位。全局定位则通过测机器人的绝对位置来定位,定位的精度较高,并且可以用来修正局部定位的定位误差。
现在移动机器人定位的方法大致可分为三类:</p>
<ol>
<li>
<p>相对定位(RelativePositionMeasurements):主要依靠内部本体感受传感器如里程计(Odometry)、陀螺仪(Gyroscopes)等,通过给定初始位姿,来测量相对于机器人初始位姿的距离和方向来确定当前机器人的位姿,也叫做航迹推测(DeadReckoning, DR)。</p>
</li>
<li>
<p>绝对定位(AbsolutePosition Measurements):主要采用主动或被动标识(Activeor Passive Beacons)、地图匹配(MapMatching)、全球定位系统(GlobalPositioning System,GPS)、或导航信标(LandmarkNavigation)进行定位。位置的计算方法包括有三角测量法(Triangulation)、三边测量法(Trilateration)和模型匹配算法(ModelMatching)等。</p>
</li>
<li>
<p>组合定位(CombinedPositionMethod):虽然相对定位这种方法能够根据运动学模型的自我推算移动机器人的位姿和轨迹而且具有自包含的有点。但是不可避免地会存在随时间的增加和距离的增加而增加的累积航迹误差。在绝对定位中,地图匹配技术处理数据速度较慢,而信标或标识牌的建设和维护成本太高,GPS又只能在室外使用。由于单一定位的方法的缺陷,移动机器人定位仍然是基于航迹的推算与绝对位姿和轨迹矫正相结合起来。</p>
</li>
</ol></summary><category term="ROS"></category><category term="slam"></category></entry></feed>