XiongXiao's Blog

菜鸟要起飞

[ROS]ROS PC间通讯

Kinect输出的数据包括640*480的rgb颜色数据以及depth深度数据,计划采用的实验平台是Xilinx提供的Zybo平台,由于Kinect的数据量大,加上3D建模的算法较为复杂,想要在Zybo平台上实现所有的功能恐怕是心有余而力不足,所以就需要在Zybo上做一些相对简单的处理,再将数据发送至PC端实现一些较为复杂的算法和图形显示功能。

由于Zybo上的ROS暂时还未实现,暂且先用两台PC做实验。

在多台机器上部署ROS并不复杂,记住以下几点

  • 只能有一个主控制器ROS master,选择一台机器运行
  • 所有的机器必须配置为使用相同的主控制器,通过设置环境变量ROS_MASTER_URI实现
  • 所有的机器端口之间都必须有完整的双向连接
  • 每台机器都必须要有一个自己的名字,其他的机器通过名字解析 具体设置可以参考ROS/NetworkSetup

实验步骤

这里的MASTER_IPSLAVE_IP分别代表两台机器的IP地址,请自行更改

1.在主机运行

$ export ROS_MASTER_URI=http://MASTER_IP:11311
$ export ROS_IP=MASTER_IP
$ roscore
$ rosrun rospy_tutorials listener.py ...

[ROS]Kinect 3D 环境建模的尝试与改造

今年团队参加了openHW 2014开源硬件与嵌入式大赛。计划用四旋翼飞行器搭载kinect实现室内环境的三维建模。期望的最终实现下过如下图: 3d_output

去年我们团队同样参加了这个比赛,题目是混合实时移动机器人平台,实现小型轮式移动机器人室内环境的2D地图构建和导航,采用ROS(Robot Operation System)分布式架构。演示视频在这里

虽说已经有了去年的基础,但从2D升级到3D还是面临着很多挑战。具体体现在以下几个方面:

  • 数据量的大幅增加,网络传输的带宽限制
  • 环境信息的特征识别、地图拼接的算法等都更加复杂
  • 飞行器的飞行状态的不稳定性

[ROS]fuerte版本的下解决rgbdslam包不兼容的问题

最近学习ROS的过程中入手了kinect,一些驱动部分已经装好,对人体的骨架识别在一番折腾之后也没有问题了,唯独在对环境进行地图建模的地方一直卡住很久,由于手上没有现成的机器人,本人也是ROS新手,所以只能按照官方的教程一步一步来,具体可以参考rgbdslam Wiki。下载完rgbdslam_freiburg包,也通过

rosdep update
rosdep install rgbdslam_freiburg

安装了libg2o,但在最终编译的时候出现错误,导致编译不能通过。上ROS ANWSERS 找解决办法,发现有很多和我类似的情况,最后我找到了这个

其中的回答大意就是删除libg2o包,下载旧版本的g2o包,然后更改rgbdslam_freiburg包编译过程中用到的依赖。

我的步骤如下

  1. http://openslam.org/g2o.html 通过svn获取源码,阅读trunk文件夹中的README.TXT安装一些依赖之后再编译。

  2. http://ros.org/wiki/g2o通过svn下载包,然后编译,在编译过程中会提示网址的svn证书不受信任,编译终止。通过在网上查资料 ...

[ROS]即时定位与地图构建(SLAM)的相关研究

即时定位与地图构建(SimultaneousLocalization AndMapping)指的是机器人在自身位置不确定的条件下,在完全未知环境中创建地图,同时利用地图进行自主定位和导航。

SLAM问题可以描述为:机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和传感器数据进行自身定位,同时建造增量式地图。

  • 定位(localization):机器人必须知道自己在环境中位置。
  • 建图(mapping):机器人必须记录环境中特征的位置(如果知道自己的位置)
  • SLAM:机器人在定位的同时建立环境地图。其基本原理是运过概率统计的方法,通过多特征匹配来达到定位和减少定位误差的。

图 SLAM的基本过程

移动机器人自定位与环境建模问题是紧密相关的。环境模型的准确性依赖于定位精度,而定位的实现又离不开环境模型。在未知环境中,机器人没有什么参照物,只能依靠自己并不十分准确的传感器来获取外界信息,如同一个盲人在一个陌生环境中摸索的情况。这种情况下,定位是比较困难的。有地图的定位和有定位的地图创建都是容易解决的,但无地图的定位和未解决定位的地图创建如同"鸡--蛋"问题,无从下手。已有的研究中对这类问题的解决方法可分为两类:一类利用自身携带的多种内部传感器(包括里程仪、罗盘、加速度计等),通过多种传感信息的融合减少定位的误差,使用的融合算法多为基于卡尔曼滤波的方法。这类方法由于没有参考外部信息,在长时间的漫游后误差的积累会比较大。另一类方法在依靠内部传感器估计自身运动的同时,使用外部传感器(如激光测距仪、视觉等)感知环境,对获得的信息进行分析提取环境特征并保存 ...