DSO_ROS接入TX2开发板

DSO:https://github.com/JakobEngel/dso
DSO_ROS:https://github.com/JakobEngel/dso_ros
DSO以及DSO_ROS编译安装过程参考博客:https://www.ncnynl.com/archives/201806/2467.html
上文经过测试在x86_64架构下能够编译运行成功,但是迁移到ARM架构的TX2时会出现很多问题。本文fix了一些问题之后成功实现在TX2上相对流畅地运行dso_ros模块。

ARM架构的apt源

ARM架构的apt源和x86是基本不同的,不可以常规的加上普通的apt源,在apt-get update的时候就会陷入不断的waiting状态。
(参考博客https://blog.csdn.net/qlulibin/article/details/80271096)
清华源:

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse  
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse   
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse   
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse   
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse   
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse   
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted   
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted

中科大源:

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse 
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse 
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse 
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted 
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted

以上两个源都可以用。首先ARM的源不可以直接用https。
xenial是ubuntu16.04的名字。/ubuntu-port/的才是给arm64以及armhf使用的
主流的x86的PC端使用的是
/ubuntu/

换完了记得sudo apt-get update

TX2 CUDA8+OPENCV3.0.0的安装

主要参考:https://blog.csdn.net/ParallelNorth_30th/article/details/79713385
参考:https://docs.opencv.org/3.2.0/d6/d15/tutorial_building_tegra_cuda.html
https://blog.csdn.net/qq_38880380/article/details/77069187
使用源码编译opencv,一定要装好各种依赖。

sudo apt-get install \
    libglew-dev \
    libtiff5-dev \
    zlib1g-dev \
    libjpeg-dev \
    libpng12-dev \
    libjasper-dev \
    libavcodec-dev \
    libavformat-dev \
    libavutil-dev \
    libpostproc-dev \
    libswscale-dev \
    libeigen3-dev \
    libtbb-dev \
    libgtk2.0-dev \
    pkg-config

编译Pangolin的时候:

undefined reference to drmCloseOnce,/usr/lib/aarch64-linux-gnnu/libGL.so:.
(参考:https://blog.csdn.net/wayen_yan/article/details/79735833 )增加软链接

cd /usr/lib/aarch64-linux-gnu
sudo rm libEGL.so
sudo ln -s /usr/lib/aarch64-linux-gnu/tegra-egl/libEGL.so libEGL.so
 
sudo rm libGL.so
sudo ln -s /usr/lib/aarch64-linux-gnu/tegra/libGL.so libGL.so

编译DSO的时候

在这里找到SSE转换NEON指令的SSE2NEON.h,要放到/dso/src下面各个文件夹中,才能编译通过。
https://github.com/jratcliff63367/sse2neon
SSE(Streaming SIMD Extensions)是英特尔在AMD的3D Now!发布一年之后,在其计算机芯片Pentium III中引入的指令集,是继MMX的扩展指令集。SSE指令集提供了70条新指令。AMD后来在Athlon XP中加入了对这个新指令集的支持。
Neon是适用于ARM Cortex-A系列处理器的一种128位SIMD(Single Instruction, Multiple Data,单指令、多数据)扩展结构。
第一次编译的时候出现了内存不足的情况,会报奇怪的错误,百度了之后发现可能是内存不足,增加了3GB的交换区,通过free -g可以查看使用了大约2G的交换区才能编译成功。
(增加交换区:http://www.cnblogs.com/svenwu/p/9540318.html)

启动 uvc_camera节点:

在/opt/ros/kinetic/share/uvc_camera/launch路径选择使用uvc_camere
在/opt/ros/share会出现uvc_camera目录

roscd /opt/ros/share/uvc_camera
sudo mkdir launch
cd launch
sudo vim camera_node.launch
roscd uvc_camera/launch
roslaunch camera_node.launch

这里的camera_node.launch使用如下的内容,注意video使用0还是1
使用ls /dev/video*可以查看摄像头列表

<launch>
   <arg name="video_device" default="/dev/video1" />

   <node name="uvc_camera_node" pkg="uvc_camera" type="uvc_camera_node" output="screen">
    <remap from="image_raw" to="/camera/rgb/image_raw" />
       <param name="device" value="$(arg video_device)" />
       <param name="width" value="640" />
       <param name="height" value="480" />
       <param name="frame_rate" value="30" />
       <param name="exposure" value="0" />
       <param name="gain" value="100" />
   </node>
 </launch>

参考博客:https://blog.csdn.net/jasmine_shine/article/details/46715099
https://blog.csdn.net/qinruiyan/article/details/50769245
尝试过使用usb_camere,发现TX2不可以启动,回报错没有monitor。
使用sudo apt-get install ros-kinetic-libuvc-camera安装

运行DSO_ROS

先要启动roscore,然后按照之前的教程启动roslaunch camera_node.launch
然后就可以运行DSO_ROS了。

rosrun dso_ros dso_live image:=/camera/rgb/image_raw calib=/home/nvidia/catkin_ws/src/dso_ros/camera.txt mode=1

这里image:=/camera/rgb/image_raw要和camera_node.launch节点输出的位置相同,程序才能读到相机拍摄的画面。calib=/home/nvidia/catkin_ws/src/dso_ros/camera.txt是标定文件的位置。
本次实验之前使用张正友标定算法进行标定,得到相机内参数。
写成/camera.tx如下:

479.099780 474.205933  324.676625  276.206239 0.000000
640 480
crop
640 480

这里第一行是fx,fyx0,y0,0

运行结果

DSO_ROS接入TX2开发板可以接受一定的画面抖动,但是较为突然的行人的走动或者画面急剧变化,还有面对完全没有明显梯度的平滑表面,可能会使计算崩溃。

相关文章:

  • 2021-06-22
  • 2021-09-13
  • 2021-05-10
  • 2022-01-07
  • 2022-12-23
  • 2021-12-03
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-21
  • 2022-01-11
  • 2022-12-23
  • 2021-05-28
相关资源
相似解决方案