在NVIDIA Jetson上配置ROS并使用ZED立体相机

下午好,亲爱的读者们! 在最近的文章中,我谈到了在ROS中受支持的流行的SLAM和视觉测距法。 在本文中,我将稍微偏离本主题,并讨论在NVIDIA Jetson TK1微型计算机上设置和使用ROS的问题。 安装所需的一切之后,我们将连接并尝试streolabs ZED立体摄像机 。 我对谁问有趣呢?

关于NVIDIA Jetson


首先,请考虑NVIDIA Jetson TK1平台。 NVIDIA Jetson TK1是基于Tegra K1 SOC (单芯片上的CPU + GPU和CUDA支持)的NVIDIA微型计算机。 NVIDIA Jetson拥有2.3 GHz四核ARM Cortex-A15 CPU,具有与Raspberry Pi相同的组件(HDMI,USB 2.0和3.0,以太网),以及PC专用模块:SATA,mini-PCIe 。 Tegra K1移动处理器的性能和架构与台式机GPU非常相似,从而使其能够以最小的功耗承受重负荷。 如官方页面所述,该处理器允许您在板上运行任何资源密集型图形任务,例如面部识别,增强现实,甚至是无人驾驶车辆的计算机视觉任务。 您可以在此处阅读有关所有平台功能的更多信息。

NVIDIA Jetson TK1上的内部存储器由16 GB eMMC模块表示。 默认情况下,NVIDIA Jetson TK1预装了Ubuntu 14.04操作系统。

12 V AC / DC适配器用于为微型计算机供电。

图片

ZED立体相机


ZED立体摄像头是一种被动深度摄像头,由两个彼此相距12 cm的普通RGB摄像头组成,可以看到20米的距离。 与有源摄像机(例如ASUS Xtion和Microsoft Kinect)不同,ZED立体摄像机没有红外激光来测量距离。 这款相机相对便宜(售价449美元)。 相机的优点是体积小(175 x 30 x 33毫米)和重量轻(159 g)。

该摄像机可用于在无人机上绘制室外区域的地图
您可以在官方页面上阅读有关相机的更多信息。

图片

在NVIDIA Jetson TK1上配置Ubuntu


我们使用HDMI将NVIDIA Jetson TK1连接到显示器,将以太网线连接到相应的连接器,最后使用12 V AC / DC适配器连接电源。

要在NVIDIA Jetson上安装系统,您可能需要安装JetPack TK1(说明可在此处找到)。 我手头已经安装了JetPack和Ubuntu 14.04的NVIDIA Jetson,因此在这里我将不考虑安装它。

因此,Ubuntu 14.04系统将自动启动。 为了进行授权,我们使用ubuntu用户名和密码。

找出Jetson主机的IP地址:

ifconfig 

获取硬件规格:

 lscpu 

结论是这样的:

 Architecture: armv7l Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 

通过SSH连接到Jetson可能存在问题:ifconfig显示IP地址,但是您不能使用该地址连接到Jetson。 要解决该问题,请从根目录打开文件/ etc / network / interface:

 sudo nano /etc/network/interface 

并添加以下行:

 auto eth0 iface eth0 inet dhcp 

我们对IP地址进行了动态分配。 保存更改并执行:

 sudo ifup eth0 

现在一切正常。 这个决定是从这里作出的
现在通过SSH连接到Jetson:

 ssh -X ubuntu@<ip_address> 

安装CUDA


要使用ZED相机,我们需要ZED SDK,它需要已安装的CUDA版本6.5。 从此处下载用于L4T的CUDA Toolkit 6.5的deb文件(说明从此处获取 ):

 wget http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb 

为刚刚下载的L4T的CUDA设置存储库元数据:

 sudo dpkg -i cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb 

下载并安装CUDA Toolkit本身,包括NVIDIA的OpenGL工具包:

 sudo apt-get update 

安装cuda-toolkit-6-5:

 sudo apt-get install cuda-toolkit-6-5 

将ubuntu用户添加到“视频”组,以提供对GPU的访问:

 sudo usermod -a -G video $USER 

这里$ USER是ubuntu。
将CUDA安装文件夹的路径添加到.bashrc脚本中,并在当前终端中执行它:

 echo "export PATH=/usr/local/cuda-6.5/bin:$PATH" >> ~/.bashrc echo "export $PATH=/usr/local/cuda-6.5/bin:$PATH" >> ~/.bashrc source ~/.bashrc 

检查设备上是否已安装CUDA Toolkit:

 nvcc -V 

在Jetson TK1上配置USB 3.0


默认情况下,Jetson TK1上的系统将USB 3.0端口配置为USB 2.0。 我们需要将其配置为USB 3.0。 为此,请在根目录下打开文件/boot/extlinux/extlinux.conf:

 sudo vi /boot/extlinux/extlinux.conf 

找到字符串“ usb_port_owner_info = 0”。 如果该行出现两次,则更改最后一个包含。 将“ usb_port_owner_info = 0”重写为“ usb_port_owner_info = 2”。

安装ZED SDK


安装过程看起来与台式机Linux类似。 仅应注意,在安装JetPack时已经安装了OpenCV,因此您可以对其使用Tegra优化。 因此,不需要手动安装OpenCV。

要使用ZED立体摄像机,我们需要安装ZED SDK 1.2。 安装程序使用特殊的Jetson TK1 .run文件。 下载安装程序:

 wget https://www.stereolabs.com/developers/downloads/archives/ZED_SDK_Linux_JTK1_v1.2.0.run 

设置文件的执行权限并在终端中运行它:

 sudo chmod +x ZED_SDK_Linux_JTK1_v1.2.0.run ./ZED_SDK_Linux_JTK1_v1.2.0.run 

我们接受许可协议的条款,请按“ q”,然后按“ Y”。 接下来,按照说明进行操作。

在Jetson本身上启动ZED Explorer(通过SSH远程连接时不起作用):

 /usr/local/zed/tools/ZED\ Explorer 

图片

安装ZED立体摄像机的ROS驱动程序


我在实验中使用了ROS Indigo。 安装ROS驱动程序的依赖项:

 sudo apt-get install ros-indigo-tf2-ros ros-indigo-image-transport ros-indigo-dynamic-reconfigure ros-indigo-urdf 

为ZED相机安装ROS包装器:

 cd ~/catkin_ws/src git clone https://github.com/zastrix/zed-ros-wrapper.git git checkout ef3ad46f14cf62ff21083829a1fa6879d20246de cd ~/catkin_ws catkin_make 

通过在终端的不同窗口中执行以下命令来运行zed_wrapper:

 roscore roslaunch zed_wrapper zed.launch 

我们显示活动主题:

 rostopic list 

在列表中,除了标准主题之外,我们还将看到带有/ zed前缀的主题:

 /zed/depth/camera_info /zed/depth/depth_registered /zed/joint_states /zed/left/camera_info /zed/left/image_raw_color /zed/left/image_rect_color /zed/odom /zed/point_cloud/cloud_registered /zed/rgb/camera_info /zed/rgb/image_raw_color /zed/rgb/image_rect_color /zed/right/camera_info /zed/right/image_raw_color /zed/right/image_rect_color 

运行rqt_image_view:

 rosrun rqt_image_view rqt_image_view 

当选择主题/ zed / depth / depth_registered时,我们得到一个深度图:

图片

左相机的RGB图像(/ zed /左/ image_raw_color):

图片

最后,来自右摄像机的RGB图像(/ zed / right / image_raw_color):

图片

来自摄像机的数据发布在主题/ zed / rgb / image_raw_color和/ zed / depth / depth_registered中,频率为15Hz。
我们在/ zed / point_cloud / cloud_registered主题中找到发布点云的频率:

 rostopic hz /zed/point_cloud/cloud_registered 

 average rate: 4.146 min: 0.202s max: 0.371s std dev: 0.04798s window: 11 average rate: 4.178 min: 0.191s max: 0.371s std dev: 0.04306s window: 16 

在Jetson本身上运行rviz(通过带有-x选项的ssh连接时,我无法成功启动它):

 rosrun rviz rviz 

图片

图片

配备ZED立体相机的NVIDIA Jetson上的SLAM


现在让我们在实际任务中尝试ZED相机。 在NVIDIA Jetson上,您可以轻松运行SLAM RTAB-MAP算法。 首先,为RTAB-MAP安装ROS包装器:

 sudo apt-get install ros-indigo-rtabmap-ros 

现在,使用ZED摄像机运行rtabmap。 如果我们没有运行zed_wrapper,请运行它:

 rosrun zed_wrapper zed_wrapper_node 

运行rtabmap:

 rtabmap 

在rtabmap窗口中选择ZED摄像机作为源:

图片

我尚未在NVIDIA Jetson上测试过RTAB-MAP,因此,亲爱的读者们,我有机会尝试这种SLAM算法。 在我的最后两篇文章( 此处此处 )中可以找到RTAB-MAP的使用。

我希望本文将是您使用ZED立体相机和NVIDIA Jetson微型计算机的一个很好的起点。 祝您在实验中一切顺利,很快见到您!

PS:您对于选择廉价的立体摄像机进行实验的观点很有趣。 ROS支持并不重要,最重要的是价格。 请在文章评论中写下您的选择。

PS(更新):我想尝试ZED等无源立体声相机。 希望能够与Raspberry Pi 3配合使用。

Source: https://habr.com/ru/post/zh-CN409259/


All Articles