为了以后的人可以少走弯路,我会尽可能的列出自己遇到的问题和解决方法。
提一个非常实用的建议:多用谷歌搜索。
1、安装ROS
在安装ROS之前,我们需要了解ROS的版本,ROS分为1.0和2.0,ROS1.0的运行环境为Linux,普遍被大家所接受,2.0的正式版是去年出的,虽然说可以在windows下运行,但是稳定性不敢保证,再者2.0也是基于1.0开发的,所以初学者还是要学习1.0。
具体的介绍可以参考古月居http://www.guyuehome.com/1228,包括之后的学习阶段也可以参考他的建议。
具体的安装过程参考ROS wiki http://wiki.ros.org/cn/kinetic/Installation/Ubuntu
ROS的常用版本有以下几种:
ROS的版本与Ubuntu的版本相互对应,千万别装错了!
ROS版本 | Ubuntu版本 |
---|---|
ROS indigo | Ubuntu 14.04 |
ROS kinetic | Ubuntu 16.04 |
目前最常用的版本是这两个,之前用的是ROS indigo,因为换了16.04的系统,所以ROS的版本也换了,但是安装过程都是一样的(indigo与kinetic替换)。
1.1、软件中心配置
最好选用中国的源,阿里云、中科大、清华等都可以。
1.2、添加软件源
打开终端输入:
apt-cache search ros-kinetic
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
添加keys:
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
1.3、安装过程
保证系统的软件包索引最新:
sudo apt-get update
通过apt安装ROS完整版 :
sudo apt-get install ros-kinetic-desktop-full
安装完成后可通过以下命令查看可用的软件包:
apt-cache search ros-kinetic
1.4、初始化rosedep
sudo rosdep init
会出现警告,意思就是说你要执行下面的命令啦:
rosdep update
在这条命令会出现一些未知错误(我记得是有一个包不能安装),解决方法千奇百怪。我的经验就是确保自己的电脑连接的不是手机热点!!!如果还出现错误就请百度或者谷歌。
1.5、环境配置
上一篇博文中讲了一般的步骤,这里讲一个简单点的:
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
最后安装一个使用的工具和一些依赖项:
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
1.6、创建ROS工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
在catkin_ws的devel文件里有一些setup.bash文件,source这些文件可以讲当前工作空间设置为catkin工作环境最顶层。
source devel/setup.bash
为了方便以后使用,直接将其加入环境变量
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证安装,输入
roscore
2、libfreenect2安装
这是Kinect2在Ubuntu下的通用驱动安装。参考github
https://github.com/OpenKinect/libfreenect2/blob/master/README.md#linux
系统要求>=Ubuntu14.04,
2.1、下载libfreenect2源码
确保已安装git,不要修改下载路径。
git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2/
2.2、下载upgrade deb文件(仅Ubuntu14.04)
cd depends; ./download_debs_trusty.sh/
2.3、下载编译工具
sudo apt-get install build-essential cmake pkg-config
2.4、安装libusb,版本要求>=1.0.20
Ubuntu14.04:
sudo dpkg -i debs/libusb*deb
其他版本
sudo apt-get install libusb-1.0-0-dev
2.5、安装TurboJPEG
Ubuntu 14.04和16.04
sudo apt-get install libturbojpeg libjpeg-turbo8-dev
更高版本
sudo apt-get install libturbojpeg0-dev/
2.6、安装OpenGL
Ubuntu 14.04
sudo dpkg -i debs/libglfw3*deb; sudo apt-get install -f
其他版本
sudo apt-get install libglfw3-dev
2.7、安装OpenCL(可选,如果电脑有NVIDIA,请跳过这一步)
inter GPU
sudo apt-add-repository ppa:floe/beignet; sudo apt-get update; sudo apt-get install beignet-dev; sudo dpkg -i debs/ocl-icd*deb
sudo apt-get install beignet-dev
AMD GPU
sudo apt-get install opencl-headers
吐槽:装这个之前要先装AMD驱动,但是我一直没有装上,所以就换了NVIDIA的电脑。NVIDIA的cuda自带OpenCL(良心啊)。
还有一些其他的GPU就不说了,需要就看github/
2.8、安装 CUDA(可选,仅NVIDIA)
这部分主要为了实现GPU加速,具体的安装过程参考我的另一篇博文https://blog.csdn.net/zhang970187013/article/details/81012845
2.9、安装 VAAPI(可选,仅inter)
Ubuntu 14.04
sudo dpkg -i debs/{libva,i965}*deb; sudo apt-get install -f
其他版本
sudo apt-get install libva-dev libjpeg-dev
2.10、安装OpenNI2(可选)
Ubuntu 14.04(有ROS跳过这一步)
sudo apt-add-repository ppa:deb-rob/ros-trusty && sudo apt-get update
sudo apt-get install libopenni2-dev
其他
sudo apt-get install libopenni2-dev
2.11、Build
cd ..
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 -DENABLE_CXX11=ON
make
make install
cmake命令第一句是指定安装路径(不要改),第二句是添加C++支持(ROS与Kinect需要)
2.12、设置udev rules
sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
重新插拔USB
测试
./bin/Protonect
出现画面则基本成功,然后在上面的命令分别加入参数gl、cl、cpu(前面加空格),如果都成功就nice。
如果不成功就继续看。
3、iai_Kinect2安装
这是ROS下的Kinect驱动包,如果在前一步出现错误,参考github https://github.com/code-iai/iai_kinect2
github中的说明要求在ROS indigo上安装,但是在ROS kinetic上也可以安装成功。
cd ~/catkin_ws/src/
git clone https://github.com/code-iai/iai_kinect2.git
cd iai_kinect2
rosdep install -r --from-paths .
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE="Release"
如果运行rosdep install -r --from-paths .出现以下错误:
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
kinect2_viewer: Cannot locate rosdep definition for [kinect2_bridge]
iai_kinect2: Cannot locate rosdep definition for [kinect2_registration]
kinect2_calibration: Cannot locate rosdep definition for [kinect2_bridge]
kinect2_bridge: Cannot locate rosdep definition for [kinect2_registration]
参考解决方案:https://answers.ros.org/question/237451/run-rosdep-install-r-from-paths-error-when-i-install-iai_kinect2/
如果你之前安装的libfreenect2不是标准的路径,那么你就需要指明路径
catkin_make -Dfreenect2_DIR=path_to_freenect2/lib/cmake/freenect2 -DCMAKE_BUILD_TYPE="Release"
测试如果你已经按照步骤把setup.bash加入环境变量中,那么执行
roslaunch kinect2_bridge kinect2_bridge.launch
可能会出现关于opencl的错误:
[Error] [VaapiRgbPacketProcessorImpl] vaInitialize(display, &major_ver, &minor_ver): unknown libva error
[Error] [OpenCLAllocator] b->buffer = cl::Buffer(context, CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR, size, NULL, &err): -34
...
...
[Error] [OpenCLDepthPacketProcessorImpl] OpenCLDepthPacketProcessor is not initialized!
解决方法参考https://github.com/code-iai/iai_kinect2/issues/220,具体执行
roslaunch kinect2_bridge kinect2_bridge.launch depth_method:=opengl reg_method:=cpu
或rosrun kinect2_bridge kinect2_bridge _depth_method:=opengl _reg_method:=cpu
解决一下错误后,如果出现以下警告
[ WARN] [1557200552.447012178]: [Kinect2Bridge::initCalibration] using sensor defaults for color intrinsic parameters.
[ WARN] [1557200552.447106272]: [Kinect2Bridge::initCalibration] using sensor defaults for ir intrinsic parameters.
[ WARN] [1557200552.447164408]: [Kinect2Bridge::initCalibration] using defaults for rotation and translation.
[ WARN] [1557200552.447292482]: [Kinect2Bridge::initCalibration] using defaults for depth shift.
这是因为你没有标定你的kinect,参考前面的github链接解决。不过也可以使用。
查看kinect2_bridge的节点信息
rostopic list
启动viewer查看图像
rosrun kinect2_viewer kinect2_viewer sd cloud
如果viewer这一步不能运行也没关系,我会在之后的博文中介绍。也可以给我留言。