参考这个人的博客:
http://blog.csdn.net/u013142781/article/details/50529030
目前已经没有14.04链接了,大家可以点击先点击的这个参考链接
http://releases.ubuntu.com/14.04/
VMware用的版本是10.0
下载地址:
http://cn.ubuntu.com/download/
剩余步骤参考:
http://blog.csdn.net/u013142781/article/details/50529030
还需要一次冷关机,才能虚拟化成功。一直重启没结果!!
–#—————————————————————-
实测可用的安装步骤,
http://blog.exbot.net/archives/762
要注意的地方:vmware10.0以上,内存2G,CPU,2个以上
另外要注意的地方,安装的
第一条是,安装预览版,
第三条才是正式安装
我是按照这个人的博客配置的:http://blog.itpub.net/22864897/viewspace-1119398/
在Ubuntu中打开系统终端(快捷键 Ctrl+Alt+T)
当然就是设置成中文啦
然后安装VMtool 这个在我前面有一篇博客中有写大家可以去找找
然后如果需要扩容这个也在我前面的一篇博客中,实在找不着的话大家可以给我留言
写这篇博客主要是为了在说明一下在安装opencv和openNI 中走过的弯路,希望大家不要走
然后不要用易科机器人的镜像,因为你也不知道他是怎么设置的,我就是个openjdk-7-jdk的一个玩意没装好。以我目前水平不可能解决这个问题,还不如像学姐那样找个干净的镜像,然后需要什么自己去配置就好了。
当然,写这篇博客主要是对高博的一起做RGB-D slam 的一个总结
链接:http://www.cnblogs.com/gaoxiang12/p/4633316.html 中间走过不少弯路希望大家共勉
如果大家有在安装过程中有什么问题,欢迎留言。也希望大家都能够跟我一步一步这样安装,不然有的问题真是不好处理。
1、重启可能会遇到没有办法启动的问题。这个时候重启启动客户端,然后重启一下就可以,不用担心
2、进去之后可能会遇到分辨率不对的问题。例如:
这个时候需要调节一下屏幕的分辨率
推荐这个分辨率
然后就好了:
如果你和我一样觉得图标太大的话,可以调解菜单栏的缩放比例
参考我这里的博客:http://blog.csdn.net/u013142781/article/details/50529030
跟着你上面这个博客走,不会有太大问题yes
Step 1.
下载OpenCV源代码: http://opencv.org/downloads.html
这个网页打开会比较慢,耐心等等
然后下载2.0版本 for linux
然后就我会我屏幕当中那个opencv-2.4.13的文件夹
然后打开终端:(必须要添加这个依赖项,建议用14.04的版本,如果是16.01版本,我尝试过,这个地方就会进行报错)
输入
sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev
把OpenCV解压到下载目录中,用cmake编译再安装.
1、mkdir build
2、cd build
3、cmake ..
4、make
5、sudo make install
在安装过程中千万不能报错,一报错就有问题,我用16.01版本就是一直在报错
在安装PCL的过程当中
1 sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
2 sudo apt-get update
3 sudo apt-get install libpcl-all
参考高博的博客:
http://www.cnblogs.com/gaoxiang12/p/4739934.html
需要注意的地方:
1、千万不要加红框框住的那个依赖项
sudo apt-get install libeigen3-dev libsuitesparse-dev libqt4-dev qt4-qmake
先用sudo su 启动root权限
再用dpkg -i命令安装:
顺序千万不要乱
第一个安装:libqglviewer-qt4-2_2.3.4-4ubuntu2_amd64.deb
第二个安装:libqglviewer-dev-common_2.3.4-4ubuntu2_all.deb
第三个安装:libqglviewer-qt4-dev_2.3.4-4ubuntu2_amd64.deb
三个弄完以后,再去高博的git上面把
然后把他解压出来
千万要注意这个地方要要在英文的安装路径下
意外情况1、如果是在中文路径的话,就会出现:
或者
意外情况2、遇到问题千万不要乱说删软件
出现以下报错:
这是因为依赖项冲突,究其本质:是因为你的吧原来的依赖项直接删除了
解决方法:dpkg -r 将那些有冲突的依赖项全都解开,然后重新装
意外情况3、
原因:由于先执行了 dpkg -i 那那三个文件,然后执行的
sudo apt-get install libeigen3-dev libsuitesparse-dev libqt4-dev qt4-qmake
导致的错误。
用sudo apt-get -f install A B 将报错这A,B两个文件给解除依赖项
解压g2o并编译安装:
进入g2o的代码目录,并:
mkdir build
cd build
cmake ..
make
sudo make install
最后只能祝福大家好运了!!
最后make 的时候胜利截图:
最后记得sudo make install
打完,收工!!!
感谢New Life 大神的帮助!!
后记:
感觉g2o真的很难装,每次装都有不同程度的问题,
这次的问题是少包: libxmu-dev和libxmu-dev
https://pkgs.org/search/LIBXmu-dev
在这个网站上面找对应的包
解决方案:同时装
然后再装
就可以通过这个问题
后后记,跟着高博的教程走的,同样的遇到问题。
遇到的问题,都是因为包的问题。我下面这张图,是关键问题的解决思路和步骤。
参考古月的博客:
http://blog.csdn.net/hcx25909/article/details/8619126
git checkout Unstable-1.5.4.0表示切换到新的分支
目前就现在这里停止吧。我这周的规划是能够把高博程序看懂,能够解释清楚demo
然后那个git 是可以用的,报错也不要管
继续运行
然后让系统出现了linux -64-15什么的包之后,然后再继续安装
参考这个人的博客
http://www.cnblogs.com/liufuqiang/p/5618335.html
十分重要的一点: 用make 不用make -j
如果用make-j 的话,会在84%的时候虚拟机直接卡死
在注释代码的时候,你也需要会一点vim 的基础
首先你要去磁盘管理那里单独分一个区出来给Ubuntu系统。
实测可用的百度经验,就按照上面的步骤走
http://jingyan.baidu.com/article/e4d08ffdace06e0fd2f60d39.html
在分区的地方,每台电脑都不一样,到时候自己懂得变通一下就可以。
如果是这样的话,我只要写(h0,0)就可以。主要就是为了能够让计算机自己找到分区。
http://blog.csdn.net/yangtze_1006/article/details/51606680
在终端运行Ctrl+s表示暂停程序
在显示的QT界面按一下“”空格键“”暂停特征匹配和读取信息
然后运行Ctrl+s保存 Pcd 文件,然后尝试运行ctrl + F 可以另存PCD 文件
目前遇到的问题是
没有办法画出轨迹图,不知道高博说的那个txt文件在哪里
参考教程
http://www.cnblogs.com/CZM-/p/5858180.html
http://blog.csdn.net/heyijia0327/article/details/53173146
roscore
rosrun usb_cam usb_cam_node
rosrun image_view image_view image:=/usb_cam/image_raw
rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=/home/davidhan/Downloads/DSO/dso/camera.txt mode
这个github上面有camera.txt的详细的文档说明,吧参数弄对才能跑通
https://github.com/JakobEngel/dso
http://www.ncnynl.com/
上面的代码可重复性高
红色箭头用来表示前进,输出的图像是Kinect看到的世界,蓝色的圆盘表示旋转角度
将新买的笔记本联想E460 win10 装成 win7 实测可用的过程
http://tieba.baidu.com/p/4325368308
在这个地方有几点要说明,都是我今天走过的坑,希望将来能够看到这篇博客的人少走一些弯路
1、WIN8以后的,也就是现在出厂的笔记本基本上硬盘格式都是GUID,要把硬盘的格式改成MBR之后才能装WIN7.(说个内心体会,可能我真的跟win10无缘了,自己笔记本装win10,然后开机吧电源键烧了,花了200修好,联想笔记本win10弄好了之后,然后开机密码忘记了,然后进入开机的时候,按F11,进行恢复出厂设置,但是在用easyBCD的时候遇到没有办法添加引导,整个按钮都是灰色的,显示的EFI的原因,我又到boot界面设置EFI,就是安装上面这个链接设置的,设置之后,发现根本没有办法驱动,是什么原因,我不知道,但是发现可以从优盘驱动,那好,我就把他刷成win7,在第一次装win7的时候,没有办法启动,启动之后一直是黑屏,意外发现自己原来的写的博客,进入大白菜之后,发现是硬盘格式的问题,然后更改了格式,成功装上win7,进入win7之后,发现没有USB驱动,没有办法联网联wifi等问题,然后在大神的指导下,在大白菜里面个C盘放了一个驱动,这是在网上随便找的,发现安装之后完全没有用,然后去联想官网上找,链接如下:
http://think.lenovo.com.cn/support/driver/newdriversdownlist.aspx?categoryid=3109624&CODEName=20ETA00GCDPF0N9XLP&SearchType=1&wherePage=1&SearchNodeCC=20ETA00GCDPF0N9XLP&osid=233
然后成功的链接上网,这时发现除了C盘之外,多了其他两个不知道干嘛用的盘,一个500多MB,一个123MB,用联想的驱动下载,会蹦,因为联想的驱动只往哪个500MB里面下,不能修改下载路径,结果电脑直接卡到重启,然后使用弄万能驱动精灵下载,成功安装好各项驱动之后,准备开始装系统工作,然后进入Ubuntu的下载界面后,发现原先在win10系统下我是吧931G,用压缩卷的方式进行划分2个481G,只有C盘的压缩卷可以用,但是另外的481g直接显示不可用。另外电脑竟然会有4个主分区,就是那个两个500mb和123mb闹得,无奈呢之后,跟大神沟通后,决定在大白菜里面将所有的卷都删除,重新分区,重装系统,重装之后,easyBCD可以正常使用,一切正常,然后进入Ubuntu系统之后,输入sudo umount -i /isodevice 发现iso被占用,无奈呢,重启吧,重启之后再次输出命令,结果正常,成功装上Ubuntu系统,新的笔记本条条框框太多了。)
大家就当个笑话看看,专人专事,装系统,装驱动。
我把一些对我而言,比较有意义的图像和整个安装过程中比较重要的几个节点的图片发一下
我的笔记本能装4个内存卡槽,但是我在Ubuntu系统的时候只是分了16G作为交换空间,不着以后如果扩容了,需要怎么改。
这个框就是要改的地方。
然后大家在看我在下面提供的这个人的链接就可以了:
http://tieba.baidu.com/p/4325368308
首先你已经装了ros indigo
(1)配置环境变量
下面我们开始创建一个catkin 工作空间:(在主文件夹下)
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
即使这个工作空间是空的(在’src’目录中没有任何软件包,只有一个CMakeLists.txt链接文件),你依然可以编译它:
$ cd ~/catkin_ws/
$ catkin_make
(2)
在主文件夹下ctrl+h后找到隐藏文件夹.bashrc。在.bashrc 最下面添加
source /opt/ros/indigo/setup.bash
source ~/catkin_ws/devel/setup.bash
(3)编译usb_cam(下载链接:https://github.com/bosch-ros-pkg/usb_cam)
把usb_cam放到catkin_ws/src下
$ cd catkin_ws/src/usb_cam
$ mkdir build
$ cd build
$ cmake ..
$ make
(4)编译orb_slam2(下载链接: https://github.com/raulmur/ORB_SLAM2)
把orbslam2放到catkin_ws/src下
在cmake .. 之前要几点说明: 由于我们用的节点是
也就是所用的topic是/usb_cam/image_raw,而在源码中,默认的是/camera/image_raw。所以我们需要更改一下源码:
这幅如已经很能说明问题了,有路径,和需要更改的位置
$ cd catkin_ws/src/orbslam2
$ chmod +x build.sh
$ ./build.sh
$ mkdir build
$ cd build
$ cmake ..
$ make
$ cd ..
$ cd Examples/ROS/ORB_SLAM2
$ mkdir build
$ cd build
$ cmake ..
$ make
(5)运行usb_cam和orbslam2
roscore
rosrun usb_cam usb_cam_node
rosrun ORB_SLAM2 Mono /home/davidhan/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/davidhan/catkin_ws/src/ORB_SLAM2/my2.yaml
其中liqingfeng是电脑的名字,my.yaml是标定的文件
遇到的问题:我用matlab标定后书写的my.yaml
但是这个文件是有问题的,焦距和光心值太小了,光心应该是分辨率一半左右的值,640 480 就是分辨率
出现的状况:
1、一片黑是因为编译不对,把原来build删了重新编译
2、有图像了,但是就是不进行特征点的提取与匹配,这是因为参数不对
正确的参数应该是:
运行成功的截图:
在这副图当中,点都是特征点,红色的是当前帧时候匹配到的特征点,黑色的是没有匹配到的特征点
写到这个,要感谢北航的张一帆同学的大力相助,感谢他的指导!感谢!
然后在另外一个地方输入的静态的物理地址MAC
http://blog.csdn.net/beyond_ray/article/details/38966251
在启动之前,还需要在ROS上面安装两个包
sudo apt-get install ros-<rosdistro>-openni-camera
sudo apt-get install ros-<rosdistro>-openni-launch
//我自己的ROS的版本是indigo那么这两条命令是:
sudo apt-get install ros-indigo-openni-camera
sudo apt-get install ros-indigo-openni-launch
roslaunch openni_launch openni.launch
rosrun image_view image_view image:=/camera/rgb/image_color
意外情况:因为没有安装上面提示的openlaunch包和camera包
http://blog.sina.com.cn/s/blog_541900d50101eu9r.html
然后在分区中,把原来的卷都删除了,对分区里面先格式化,然后进行调整
sudo apt-get install gparted
然后可以按空格键,然后按monitor
最后我现在的分区情况如下:
将来如果有任何的意外情况,我也可以有50G的空闲空间。
(虽然我还木有看哈,留个备份)
https://github.com/OpenSLAM/SlamList
感谢任小虫的提供
在Ros调出kinect的深度图
参考古月的博客
启动kinect
roscore
roslaunch openni_launch openni.launch
rosrun image_view disparity_view image:=/camera/depth/disparity
如果你想看rgb图像的话
rosrun image_view image_view image:=/camera/rgb/image_color
到底有多少个话题,我觉得应该在openni.launch文件中可以找到
个人感觉这次跑通rtabmap的代价有点大,希望大家谨慎
如果你确定要跑,那么就一直跑下去吧
1、参考博客链接:
http://blog.csdn.net/u013453604/article/details/49784351
在这个博客当中,同样,因为我也是从源码当中安装,因此遇到的了
siat@ThinkPad-siat:~/rtabmap/build$ make -j4
[ 7%] Built target rtabmap_utilite
[ 7%] Built target uresourcegenerator
[ 8%] Built target imagesJoiner
[ 9%] Built target extractObject
[ 10%] Building CXX object corelib/src/CMakeFiles/rtabmap_core.dir/CameraThread.cpp.o
[ 10%] [ 11%] [ 12%] Building CXX object corelib/src/CMakeFiles/rtabmap_core.dir/CameraRGBD.cpp.o
Building CXX object corelib/src/CMakeFiles/rtabmap_core.dir/VisualWord.cpp.o
Building CXX object corelib/src/CMakeFiles/rtabmap_core.dir/EpipolarGeometry.cpp.o
In file included from /usr/include/ni/XnOS.h:27:0,
from /usr/include/pcl-1.7/pcl/io/openni_camera/openni.h:47,
from /usr/include/pcl-1.7/pcl/io/openni_camera/openni_depth_image.h:44,
from /home/siat/rtabmap/corelib/src/../include/rtabmap/core/CameraRGBD.h:37,
from /home/siat/rtabmap/corelib/src/CameraRGBD.cpp:28:
/usr/include/ni/XnPlatform.h:73:3: error: #error OpenNI Platform Abstraction Layer - Unsupported Platform!
#error OpenNI Platform Abstraction Layer - Unsupported Platform!
^
.
.
.
In file included from /usr/include/pcl-1.7/pcl/io/openni_camera/openni.h:50:0,
from /usr/include/pcl-1.7/pcl/io/openni_camera/openni_depth_image.h:44,
from /home/siat/rtabmap/corelib/src/../include/rtabmap/core/CameraRGBD.h:37,
from /home/siat/rtabmap/corelib/src/CameraThread.cpp:31:
/usr/include/ni/XnCppWrapper.h:10045:76: error: macro "XN_VALIDATE_NEW" passed 4 arguments, but takes just 2
XN_VALIDATE_NEW(pTrans, StateChangedCallbackTranslator, handler, pCookie);
^
/usr/include/ni/XnCppWrapper.h:10104:75: error: macro "XN_VALIDATE_NEW" passed 4 arguments, but takes just 2
XN_VALIDATE_NEW(pTrans, StateChangedCallbackTranslator, handler, pCookie);
^
[ 13%] Building CXX object corelib/src/CMakeFiles/rtabmap_core.dir/VWDictionary.cpp.o
In file included from /usr/include/ni/XnStatusCodes.h:27:0,
from /usr/include/ni/XnMacros.h:27,
from /usr/include/ni/XnOS.h:28,
from /usr/include/pcl-1.7/pcl/io/openni_camera/openni.h:47,
from /usr/include/pcl-1.7/pcl/io/openni_camera/openni_depth_image.h:44,
from /home/siat/rtabmap/corelib/src/../include/rtabmap/core/CameraRGBD.h:37,
from /home/siat/rtabmap/corelib/src/CameraRGBD.cpp:28:
/usr/include/ni/XnStatus.h:33:9: error: ‘XnUInt32’ does not name a type
typedef XnUInt32 XnStatus;
^
遇到了这些问题,
2、解决方案:
参考博客:http://blog.csdn.net/u010658879/article/details/50730974
重要的事情提前说,sudo apt-get autoremove ** 这条语句一般情况下千万别用,除非你已经做好了重装系统的准备。这条语句意思是,将所以跟openni相关的软件都删掉,我在执行了这条语句后大约删除了1.4个G
sudo apt-get autoremove libopenni-dev
sudo apt-get install libopenni-dev
然而我安装openni只44MB左右,还有参考博客当中的一些软件,加起来也就是500多MB,然后就出现各种问题
3、遇到的问题
3.1 KINECT没有连接
解决办法: 我把我这篇博客当中给的openNi的安装链接又刷了一遍,(只是刷了一下依赖项)源码没有刷,然后吧senser kinect 重新安装。
然后kinect就可以正常驱动
3.2 image_viewer这个包不存在,以及usb_cam节点
解决办法:由于上面跟openni吧很多依赖项都给删除了,那么只有重新安装ROS了,linux有个好处,就是你再重新安装的话,如果你原来已经安装好了,他会提示你已经从新安装了,如果没有没有,就想现在,那么他会吧那些你原来没有重新安装的部分给安装好。
4、总结
4.1、总体来说,跑rtabmap的代价还是值得的,他的三维重建的效果真的没得说哦,真好!!
4.2、重新安装能够修复一些问题
4.3、Rosaria和Rosaria_client 在catkin_ws不能同时编译,只有当Rosaria编译好了,才能编译Rosaria_client.
4.4以后千万别手贱用apt-get autoremove
4.5 用rosrun rqt_image_view rqt_image_view可以更加方便的选择节点,更好。这是意外收获。
4.6kinect在玻璃,反光,哪怕是太阳光照射的地方,都不能够显示。
4.7 补充说明,如果是从源码中安装的话,应该是cd rtabmap/bin 然后 ./rtabmap这样才能运行,事先不用打开roscore
在某人的强烈要求下,我被迫又跑了一遍rtabmap
现象:make 到88%的时候有如下报错
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_pinv' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_post'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_calloc' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_malloc'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_nfree' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_spfree'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_etree' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tog2o::csparse_extension::cs_cholsolsymb(cs_sparse const*, double*, cs_symbolic const*, double*, int*)'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_symperm' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_schol'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to g2o::csparse_extension::writeCs2Octave(char const*, cs_sparse const*, bool)' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_cumsum'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_sfree' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_amd'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to g2o::csparse_extension::cs_chol_workspace(cs_sparse const*, cs_symbolic const*, int*, double*)' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_free'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_counts' collect2: error: ld returned 1 exit status make[2]: *** [../bin/rtabmap-camera] Error 1 make[1]: *** [tools/Camera/CMakeFiles/camera.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... [ 67%] Building CXX object guilib/src/CMakeFiles/rtabmap_gui.dir/PdfPlot.cpp.o ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_pinv'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_post' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_calloc'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_malloc' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_nfree'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_spfree' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_etree'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to g2o::csparse_extension::cs_cholsolsymb(cs_sparse const*, double*, cs_symbolic const*, double*, int*)' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_symperm'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_schol' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tog2o::csparse_extension::writeCs2Octave(char const*, cs_sparse const*, bool)'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_cumsum' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_sfree'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_amd' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tog2o::csparse_extension::cs_chol_workspace(cs_sparse const*, cs_symbolic const*, int*, double*)'
../../../bin/librtabmap_core.so.0.11.10: undefined reference to cs_free' ../../../bin/librtabmap_core.so.0.11.10: undefined reference tocs_counts'
collect2: error: ld returned 1 exit status
make[2]: *** [../bin/rtabmap-stereoEval] Error 1
在matlable的大神的提醒下,我对照了我的cmake 和 jemma电脑的cmake 发现
这是我的cmake..之后的
而jemma的电脑多了EXTERNAL 那么就找到这个文件,并且将它删除了,
记得要sudo su获得root权限
然后接着编译,就可以了
总结一下:上面这个报错的本事就是c sharp的问题。
那么把原来的rtabmap删除以后,自己重新从码源安装一遍,就是
cmake ..
make
sudo make install 这样
最后,当我在终端输入rtabmap的时候,总是发现 core dump
然后之后再在终端输入rtabmap就可以正常使用了
最后,祝大家rtabmap编译顺利!
参考博客:
http://blog.csdn.net/u013453604/article/details/49784351
jemma跑通了rtabmap_ros,我也跃跃欲试的跑了一遍。当时困住主要是在freenect2这个包的问题,后来发现这个包只跟kinect2有关,果断放弃编译这个包
然后在catkin_make的时候出现trabmap的版本不对
然后用下列的命令将rtabmap的版本进行更新后,编译可以正常通过
roscore
roslaunch openni_launch openni.launch
rosrun rviz rviz
打开rviz之后,只需要让不同的控件(例如image, piontcloud2等)订阅不同的话题,(如何选择:用鼠标点啊)
箭头的地方是我订阅话题的地方
然后你可以选择其他的类型
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
命令行解析
第一条命令,是让你能够每次打开命令窗口就能够使用rosrun roslaunch 等语句的补齐
第二条命令,将你工作区间的路径直接加入到到 .bashrc 文件当中,这样你就可以直接用catkin_ws这个工作空间下所有的包
第三条命令,就是让 上面两条指令立即生效,就是说刷新了一下 .bashrc这个文件
举例说明
正常情况下,要添加路径才能运行,现在不用添加路径了,是不是觉得分方便。
可以通过 echo $ROS_PACKAGE_PATH
这条指令来检验你的工作路径
当你使用rosmake进行编译的时候,如果提示没有找到这个包,那么很有可能是你没有用source ~/catkin_ws/devel/setup.bash 就是让编译器能够找到这个包
cd catkin_ws/src
git clone https://github.com/MobileRobots/amr-ros-config.git
cd ..
catkin_make
一般情况下是能够编译通过的
(这个地方可能要改一下)
当然你也可以像我一样,全都分开来编译
因为的见launch文件中,找包都是用这个格式找到
例如:
source ~/catkin_ws/devel/setup.bash
roslaunch amr_robots_gazebo example-pioneer3at-terrainworld.launch
rostopic list
rostopic pub /sim_p3at/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
然后这个车就开始转圈圈,就跟小海龟一样。小海龟能干的事,车也能干
rosrun rviz rviz
修改rviz中的参数
发现在rviz中和gazebo中车的运动是同步的
这是话题订阅的图
输入这条命令:
roslaunch gazebo_ros empty_world.launch
这个launch文件在下图所示的文件中
launch文件里面就是用测XML写的,包括节点名,参数的设置啊 等等
这里给出一个非常好的学习gazebo的博客
http://moorerobots.com/blog/post/1
以及这个amr-ros-config这个开源代码的使用:
https://www.youtube.com/watch?v=Yp92L6mc58A
1、安装NITE
64位安装包:
http://www.openni.ru/wp-content/uploads/2013/10/NITE-Bin-Linuxx64-v1.5.2.23.tar.zip
32位安装包:
http://www.openni.ru/wp-content/uploads/2013/10/NITE-Bin-Linuxx86-v1.5.2.23.tar.zip
下载下来之后后缀名是.zip 然后用unzip指令解压,如果没有unzip指令,要么就去安装,要么就现在WIN下面解压,然后再传到Ubuntu中。
cd ~/Download/NITE-Bin-Dev-Linux-x64-v1.5.2.23
sudo ./install.sh
sudo niLicense -l 0KOIk2JeIBYClPWVnMoRKn5cdY4=
到这里就完全安装好了
2、下载openni_tracker的包
cd ~/catkin_ws/src
git clone https://github.com/ros-drivers/openni_tracker.git
cd ~/catkin_ws
catkin_make
3、启动
效果1:
注意事项:这个适用于用openni来启动kinect,如果你是用freenect的话,就不是了
roslaunch openni_launch openni.launch
rosrun openni_tracker openni_tracker
rosrun rviz rviz -d `rospack find rbx1_vision`/skeleton_frames.rviz
在rviz中刚开始可能没有图像,你要离kinect 5-6步远的距离,就能正常显示了
效果2:
cd ~/catkin_ws/src
然后去这个网址吧对应的包下载下来,对应好你的ros版本。我的indigo版本的
https://github.com/pirobot/skeleton_markers.git
然后解压到src中
cd ~/catkin_ws
catkin_make
运行:
roslaunch openni_launch openni.launch
rosrun openni_tracker openi_tracker
roslaunch skeleton_markers markers_from_tf.launch
rosrun rviz rviz
下载对应的包
cd catkin_ws/src
git clone https://github.com/JaouadROS/head_depth
cd ..
catkin_make
source devel/setup.bash
启动
roslaunch openni_launch openni.launch
roslaunch head_depth head_depth.launch
roslaunch rbx1_bringup fake_turtlebot.launch
roslaunch rbx1_nav fake_move_base_blank_map.launch
rosrun rviz rviz -d `rospack find rbx1_nav`/nav_test.rviz
在《ROS by Example》第九章安装语音识别的包部分,
sudo apt-get install gstreamer0.10-pocketsphinx
sudo apt-get install ros-indigo-pocketsphinx
sudo apt-get install ros-indigo-audio-common
sudo apt-get install libasound2
安装上述包之后,并且启动语音识别的包,
roslaunch pocketsphinx robocup.launch
出现如下报错
[INFO] [WallTime: 1489898516.883456] Launch config: gconfaudiosrc
/opt/ros/indigo/lib/pocketsphinx/recognizer.py:68: SyntaxWarning: The publisher should be created with an explicit keyword argument 'queue_size'. Please see http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers for more information.
self.pub = rospy.Publisher('~output', String)
[INFO] [WallTime: 1489898516.893212] Starting recognizer...
Traceback (most recent call last):
File "/opt/ros/indigo/lib/pocketsphinx/recognizer.py", line 177, in <module>
start = recognizer()
File "/opt/ros/indigo/lib/pocketsphinx/recognizer.py", line 73, in __init__
self.start_recognizer()
File "/opt/ros/indigo/lib/pocketsphinx/recognizer.py", line 80, in start_recognizer
self.pipeline = gst.parse_launch(self.launch_config)
glib.GError: no element "gconfaudiosrc"
Traceback (most recent call last):
File "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/core.py", line 401, in signal_shutdown
h()
File "/opt/ros/indigo/lib/pocketsphinx/recognizer.py", line 131, in shutdown
gtk.main_quit()
RuntimeError: called outside of a mainloop
[recognizer-2] process has died [pid 6017, exit code 1, cmd /opt/ros/indigo/lib/pocketsphinx/recognizer.py __name:=recognizer __log:=/home/davidhan/.ros/log/612d3e76-0c5e-11e7-a74d-84ef18110d3c/recognizer-2.log].
log file: /home/davidhan/.ros/log/612d3e76-0c5e-11e7-a74d-84ef18110d3c/recognizer-2*.log
出现这个问题的原因是gstreamer0.10的包不对,因此应该安装:
sudo apt-get install gstreamer0.10-gconf
然后再启动,并且查看输出
roslaunch pocketsphinx robocup.launch
rostopic echo /recognizer/output
关于kinect是同色连接,浅色对浅色
灰色是负极,褐色是正极
解释一下前两个的xml语句,就是导入先锋机器人的模型和导入kinect模型
下面的6行用来描述kinect的位置和朝向,这真的应该感谢turtlebot模型制作者,非常方便二次开发
给各位看下我的模型:
后面绿色的部分是因为要放笔记本,然后和笔记本和先锋之间有很多线,
同时这里的绿色的部分就是用下面xml中,其中的例如inertial等标签可以参考东方赤龙的博客:
http://blog.csdn.net/crazyquhezheng/article/details/42840955
在rviz当中只能这样来有最简单的几何体,圆柱,球,长方体
<link name="post">
<inertial>
<mass value="0.1" />
<origin xyz="0 0 0" />
<inertia ixx="0.1" ixy="0" ixz="0" iyy="0.1" iyz="0" izz="0.1" />
inertial>
<visual name="post_visual">
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="0.27 0.65 0.01" />
geometry>
<material name="post_color"><color rgba="0 0.5 0.5 1"/>material>
visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="0.27 0.65 0.01" />
geometry>
collision>
link>
<joint name="base_post" type="fixed">
<origin xyz="-0.15 0 0.25" rpy="0 0 0" />
<parent link="base_link" />
<child link="post" />
joint>
这几个sudo apt-get update遇到了点问题,然后查阅一下资料
sudo rm /var/lib/apt/lock给解决了。
产生的问题如下:
注意:我的roscore是开启的。
各种尝试都尝试过了,心碎啊,希望大家千万不用走我这条路。由于QT4和QT5还是有很多差别的。我探索了一整天,尝试了重新安装QT,重新安装ROS,重新安装rqt,但是都没有结果,再加上这几天导师催着交论文,亚历山大,只能破釜沉舟,自己所有的包全部拷贝后重现安装了Ubuntu14.04.5
在启动盘的制作方面参考链接:
http://jingyan.baidu.com/article/a378c960630e61b329283045.html
http://blog.csdn.net/love_xiaozhao/article/details/52704197
http://jingyan.baidu.com/article/3f16e003d15e612590c10368.html
https://zhidao.baidu.com/question/432874301.html
从上面的提示报错,我们可以发现:是因为ros-control没有这个包的缘故。
然后上roswiki上面找到了关于这个包的信息:
安装好之后,基本上这个包就可以用来,我当时还有很多关于move_base的包没有使用。
然后在电脑上安装了ros by example当中的所有可以从源码安装的包。然后基本上就没有大的问题了。
重装大约用了半天的时间。与其在哪里苦苦纠结一个问题,真不如重新安装一个系统,然后选一些重要的包跑起来,来的直接。但是不建议大家重装系统,真的心好累。
重装系统之后,rqt_graph就可以正常使用了。
今天第一次见识到了ROS分布式存储的厉害之处。
参考hitcm大神的博客:
http://www.cnblogs.com/hitcm/p/5616364.html
这个里面的app在大神的github上面,大家安装的手机端,然后设置到ROScore的IP,一链接,机可以了。
在linux下查看opencv的版本
直接在终端下输入:
pkg-config --modversion opencv
opencv在github上的各个版本
https://github.com/opencv/opencv/releases
安装两个版本的opencv
安装opencv3.1我是从参看高博视觉SLAM视频的安装方法。
安装opencv2.4.14我是参考上面链接发给发
最后在usr/include/opencv2.14 和 usr/include/opencv3.1
同样的编译方法:
mkdir build
cd build
cmake ..
make -j8
sudo make install
在ROS里面的坐标系是右手坐标系
也就是X是红色,Y是绿色 Z是蓝色
18-04-26更新
问题:将scan数据类型转化pointcloud类型
问题分析:激光雷达的采集到的数据,以scan的topic发布,scan的数据结构是sensor_msgs::LaserScan,而需要转化的pointcloud的数据类型是sensor_msgs::PointCloud2或者sensor_msgs::PointCloud。可以依赖laser_geometry进行数据的转化。转化的代码如下:
#include <ros/ros.h>
#include <tf/transform_listener.h>
#include <laser_geometry/laser_geometry.h>
#include <sensor_msgs/PointCloud.h>
class My_Filter {
public:
My_Filter();
void scanCallback(const sensor_msgs::LaserScan::ConstPtr& scan);
private:
ros::NodeHandle node_;
laser_geometry::LaserProjection projector_;
tf::TransformListener tfListener_;
ros::Publisher point_cloud_publisher_;
ros::Subscriber scan_sub_;
};
My_Filter::My_Filter(){
//必须要有wait,不然就会有报错
tfListener_.waitForTransform("/base_link","/laser",ros::Time(0),ros::Duration(4.0));
try{
scan_sub_ = node_.subscribe<sensor_msgs::LaserScan> ("/scan", 100, &My_Filter::scanCallback, this);
point_cloud_publisher_ = node_.advertise<sensor_msgs::PointCloud> ("/laser_pointcloud_map", 100, false);
// point_cloud_publisher_ = node_.advertise ("/laser_pointcloud_map", 100, false);发布PointCloud2
}
catch (tf::TransformException &ex) {
ROS_ERROR("%s",ex.what());
ros::Duration(1.0).sleep();
}
//tfListener_.setExtrapolationLimit(ros::Duration(0.1));
}
void My_Filter::scanCallback(const sensor_msgs::LaserScan::ConstPtr& scan){
// sensor_msgs::PointCloud2 cloud;
sensor_msgs::PointCloud cloud;
projector_.transformLaserScanToPointCloud("base_link", *scan, cloud, tfListener_);
point_cloud_publisher_.publish(cloud);
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "my_filter");
My_Filter filter;
ros::spin();
return 0;
}
代码注释已经很清楚了,可以将sensor_msgs::LaserScan转化成sensor_msgs::PointCloud2或者sensor_msgs::PointCloud的数据类型。具体的代码我制作了laser2pointcloud的pkg上传至我的github,详见:点击这里
参考资料:点击这里