官网地址 :https://www.stereolabs.com/
SDK下载地址:https://www.stereolabs.com/developers/release/
文档:https://www.stereolabs.com/docs/getting-started/
ROS插件下载:https://github.com/stereolabs/zed-ros-wrapper
不管三七二十一,先下载SDK和所有可能用到的文档,官网推荐的环境是ubuntu16.04(内核版本4.4.0) + cuda9以上版本。
实验的场景是工控机linux14.04 + ROS1.0,貌似没有找到ubuntu14,所以直接下载了2.8.4的SDK,经过多次尝试,始终没有成功,第一个问题是最新版的SDK2.8.4安装的过程中提示MD5 checksums erro,然而我从官网下载的过程中并没有修改任何东西,怀疑是ubuntu系统和内核不匹配,往前下载了早期的SDK ,终于没有报MD5的错了,安装过程中提示需要cuda依赖,又是经过多次尝试还是不成功,有两个原因,第一是因为虽然系统为ubuntu14.04,但是cuda要求14.04系统的内核版本是3.3.0,而我的系统内核却是4.4.0。有如下两种解决方法:降级内核版本或者升级系统。参考方法https://blog.csdn.net/pppp00qqqq/article/details/80715200,Ubuntu 14.04更换内核https://blog.csdn.net/hongquan1991/article/details/55213360。
第二问题也是最根本无法解决的问题,那就是实验室使用的研华工控机是不具有英伟达独立显卡的,只有集显,所以cuda始终没装上。。无奈只能让导师更换带有英伟达独显的工控机,等后期有时间在测试ROS+ZED把,目前只能使用自己的小笔记本把相机跑起来。
实验环境Windows10,首先下载的还是官网最新的SDK2.8.4,经过多次测试,安装过程中各种报错,提示各种dll库缺少,尼玛安装一个SDK就这么复杂吗。。。换成SDK2.7的版本,意外竟然安装成功了,没有任何报错,启动ZED Explorer,提示有最新版的SDK,果断忽略不更新,插上双目的USB,完美启动。
ZED相机还可以根据双目的差异计算出深度图像,这个过程计算量巨大,所以需要GPU进行运算,这也就是为啥么SDK需要安装cuda的原因,如果没有显卡和显卡驱动并安装cuda驱动,是无法使用深度图像的。
安装cuda9.0(实在不敢安装最新版的cuda10了),安装过程相比较ubuntu就简单很多了,自行网络搜索。当我安装完成之后,启动ZED Depth Viewer软件,发现图像并没有正常显现,几番排查发现是因为显卡驱动没有正常运行。官网下载驱动:https://www.nvidia.cn/Download/index.aspx?lang=cn
安装之后如下设备管理器-》显示适配器-》Geforce840M,如果你的一开始就是这样的,说明你的驱动是正常的。
重新打开ZED Depth Viewer软件,右侧的界面可以通过鼠标按住拖动,显示比较立体的距离信息。
将自己的笔记本电脑装成win10+ubuntu16.04.6的双系统,然后下载NVIDIA-Linux下的显卡驱动,并下载CUDA和SDK,准备再次测试linux系统下的ZED相机安装和使用。最终的搭配为Win10+Ubuntu16.04.6+GeForce840M显卡驱动+cuda9.0+ZED SDK2.7.显卡按照自己的驱动下载对应的即可.
值得注意的一点就是双系统安装显卡驱动需要在装系统的时候将安全模式关闭,否则后面安装驱动大概率出错。我是第一遍没有关闭安全模式,等到一番操作之后,发现始终无法成功,然后去BIOS关闭安全模式,却误操作吧系统搞蹦了,所以你最好在安装系统之前就在BIOS界面将安全模式禁用。第二个坑就是ubuntu16.04系统安装的时候,有一个选项为为第三方图形和无线安装驱动,第一次安装的时候我勾选了,然后驱动会冲突(不确定是否是这个原因导致的),第二次没有勾选,安装过程就没报错了,所以我还是建议不要勾选这个选项。安装完成,进入系统,简单的对输入法进行配置,然后将下载的文件copy进来。
显卡驱动安装:
卸载原有驱动
sudo apt-get remove –purge nvidia*
禁用nouveau
sudo gedit /etc/modprobe.d/blacklist.conf在最后添加:
blacklist nouveau
options nouveau modeset=0
保存退出编辑。
执行下面的操作:
sudo update-initramfs -u重启后执行:
lsmod | grep nouveau若没有输出则表示屏蔽成功。
1.进入命令行界面Ctrl-Alt+F12.禁用X-Window服务
sudo service lightdm stop #这会关闭图形界面3.给驱动run文件赋予执行权限sudo chmod +x NVIDIA-Linux-x86_64-×××.run4.安装:sudo ./NVIDIA-Linux-x86_64-×××.run –no-opengl-files –no-opengl-files 只安装驱动文件,不安装OpenGL文件。这个参数最重要
必选参数解释:因为NVIDIA的驱动默认会安装OpenGL,而Ubuntu的内核本身也有OpenGL、且与GUI显示息息相关,一旦NVIDIA的驱动覆写了OpenGL,在GUI需要动态链接OpenGL库的时候就引起问题。
安装过程中一些选项:
The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。
Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择 No 继续。其余默认即可。
安装过程中需要选择参数,可以根据自己的需要选择。若出错,则重新选择,直至显示成功安装。
5.Driver测试:
nvidia-smi #若列出GPU的信息列表,表示驱动安装成功
nvidia-settings #若弹出设置对话框,亦表示驱动安装成功
cuda toolkit安装:
进入命令终端,进入安装的目录进行cuda toolkit安装
sudo sh cuda_9.1.85_387.26_linux.run
执行此命令约1分钟后会出现安装协议要你看,刚开始是0%,按一次Ctrl + c,然后按照提示操作即可,先输入 accept
然后是否安装显卡驱动选择no !
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?
(y)es/(n)o/(q)uit: n
Install the CUDA 9.0 Toolkit?
(y)es/(n)o/(q)uit: y
最重要的是Drivers选择no, toolkit 选择yes, 其它选项按照自己需求来选择。
安装完成后重启系统
reboot
检查cuda toolkit是否安装成功,终端输入:
nvcc -V
会出现cuda的版本信息
配置环境变量:sudo gedit ~/.bashrc在最后添加:export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-9.0/bin:$PATH执行:
source ~/.bashrc
验证cuda安装是否成功:cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuerysudo make./deviceQuery
若出现如下信息,则证明安装成功:./deviceQuery Starting...CUDA Device Query (Runtime API) version (CUDART static linking)Detected 1 CUDA Capable device(s)Device 0: "GeForce GTX TITAN X"CUDA Driver Version / Runtime Version 10.0 / 10.0CUDA Capability Major/Minor version number: 5.2Total amount of global memory: 12210 MBytes (12802785280 bytes)(24) Multiprocessors, (128) CUDA Cores/MP: 3072 CUDA CoresGPU Max Clock rate: 1076 MHz (1.08 GHz)Memory Clock rate: 3505 MhzMemory Bus Width: 384-bitL2 Cache Size: 3145728 bytesMaximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layersMaximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layersTotal amount of constant memory: 65536 bytesTotal amount of shared memory per block: 49152 bytesTotal number of registers available per block: 65536Warp size: 32Maximum number of threads per multiprocessor: 2048Maximum number of threads per block: 1024Max dimension size of a thread block (x,y,z): (1024, 1024, 64)Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)Maximum memory pitch: 2147483647 bytesTexture alignment: 512 bytesConcurrent copy and kernel execution: Yes with 2 copy engine(s)Run time limit on kernels: YesIntegrated GPU sharing Host Memory: NoSupport host page-locked memory mapping: YesAlignment requirement for Surfaces: YesDevice has ECC support: DisabledDevice supports Unified Addressing (UVA): YesDevice supports Compute Preemption: NoSupports Cooperative Kernel Launch: NoSupports MultiDevice Co-op Kernel Launch: NoDevice PCI Domain ID / Bus ID / location ID: 0 / 1 / 0Compute Mode:< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.0, CUDA Runtime Version = 10.0, NumDevs = 1
Result = PASS
安装ZED SDK:
在ZED官网下载或者拷贝自带驱动U盘里面的ZED_SDK_Linux_Ubuntu16_v2.7.0.run文件
然后终端进入该文件路径
chomd +x ZED_SDK_Linux_Ubuntu16_v2.7.0.run
./ZED_SDK_Linux_Ubuntu16_v2.7.0.run
运行安装即可。
测试时进入/usr/local/zed/tools,“./文件”方式路径运行SDK的测试上位机即可。
安装之后发现RGB图像不太正常,怀疑是opengl渲染的问题,深度图像由于GPU显存不够无法显示,但总算是成功在双系统上安装驱动和cuda+sdk了。
万事俱备,接下来就是ROS中使用相机了,之前使用的ROS都是在ubuntu14上面跑indigo,但由于要匹配显卡驱动和SDK的版本,安装了ubuntu16.04,那么对应的ROS版本也要更新,参考网上的方法安装了ROS kinetic。然后下载ZED的ROS开源包并使用:
$ sudo apt install ros-kinetic-rviz-imu-plugin
$ cd ~/catkin_ws/src/ #use your current catkin folder
$ git clone https://github.com/stereolabs/zed-ros-wrapper.git
$ cd ..
$ catkin_make -DCMAKE_BUILD_TYPE=Release
$ echo source $(pwd)/devel/setup.bash >> ~/.bashrc
$ source ~/.bashrc
第一次运行报错:
[display_zedmss.launch] is neither a launch file in package [zed_display_rviz] nor is [zed_display_rviz] a launch file name
The traceback for the exception was written to the log file
原因是没有执行source /devel/setup.bash.
再次编译完成之后执行,第二次报错:
ERROR: cannot launch node of type [zed_wrapper/zed_wrapper_node]: can't locate node [zed_wrapper_node] in package [zed_wrapper]
原因是zed_wrapper这个包下的节点没有编译成功,需要单独编译该包以生成节点。
$ catkin_make -DCATKIN_WHITELIST_PACKAGES="zed_wrapper"
再次执行完美通过。
运行ZED_mini节点如下:
$ roslaunch zed_wrapper zedm.launch
运行ZED_mini节点并通过RVIZ展示效果
$ roslaunch zed_display_rviz display_zedm.launch