完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本周成功的在JetSon TX2上移植了Vins-Mono与RTAB-Map,并使用摄像头RealSense D435顺利跑通了这两个框架。中间遇到了各种各样神奇的问题,踩坑无数,现整理记录一下整体流程,便于后续查询与复现。
JetSon系列是Nvidia公司推出的面向人工智能领域的嵌入式平台,这块嵌入式板子的出现使得我们可以在移动设备上处理复杂数据。 一、在JetSon TX2上运行VINS-Mono 已有环境配置:我这里JetSon TX2上已经刷好了系统版本JetPack3.2.1。 具体刷机流程后面会深入学习一下,到时候再写一篇博客记录下来。 1、配置Vins-Mono的编译环境 在JetSon TX2上安装与编译Vins-Mono框架时,主要流程与Ubuntu 16.04系统下的搭建流程基本一致,具体可以参考本人之前的博客:搭建Vins-Mono环境与评估EuRoc定位精度、安装RealSense ZR300、D435驱动 中的安装流程。 需要安装的依赖项有:ROS Kinetic,OpenCV 3.3.1,Eigen 3.3.4,Ceres-Solver。 其中有两点与Ubuntu 16.04系统下不太一样的地方,需要留意一下: (1)ROS Kinetic在JetSon TX2上的安装: 直接运行如下命令行安装ROS Kinetic: mkdir -p ~/ROScd ~/ROSgit clone https://github.com/ncnynl/installROSTX2.git # 打开脚本文件cd installROSTX2gedit installROS.sh #将ros-kinetic-ros-base,更改为:ros-kinetic-desktop-full#安装。/installROS.sh 安装完,运行:roscore 查看是否安装成功。 (2)ceres-solve在JetSon TX2上的安装: 在TX2上安装ceres-solver时,如果先安装了Eigen 3.3.3的版本,则会出现以下错误: – Found installed version of Eigen: /usr/lib/cmake/eigen3– Found Eigen version 3.2.92: /usr/include/eigen3CMake Error at CMakeLists.txt:240 (message):– Ceres requires Eigen version 》= 3.3.4 on aarch64. Detected version ofEigen is: 3.2.92. 因此需要升级Eigen版本。在Eigen官网下载大于或等于3.3.4的版本,解压后使用cmake安装。 2、安装Realsense D435摄像头驱动与IMU驱动 由于Vins-Mono算法里融合了IMU惯导数据,所以需要带惯导信息的摄像头才能运行,例如Intel RealSense ZR300,RealSense D435i等。Intel Realsense D435摄像头不含惯导信息,于是我们购买了IMU芯片,与Realsense D435摄像头一起使用。 (1)安装Realsense D435的相机驱动 (librealsense SDK 2.0) ----mod 2021.01.20--- 本步骤在后文有更新,之前博文安装的版本太旧会有问题,建议直接从后面----mod 2021.01.20---处查看。 Realsense官方提供的SDK安装方法无法在arm架构上安装成功,于是JetSonhacks提供了针对JetSon TX2的Realsense D400系列SDK安装脚本。 github官方链接:https://github.com/jetsonhacks/buildLibrealsense2TX 本次安装使用的是v0.9版本,发布日期为July,2018,配置要求: L4T 28.2 / L4T 28.2.1 (JetPack 3.2.1) 如果系统不满足上述要求,需要对JetSon TX2重新安装系统。 将源码zip下载并解压,执行如下命令行进行安装: #重新构建内核。/buildPatchedKernel.sh#安装SDK./installLibrealsense.sh 在安装过程中发生如下错误: 原因是没有安装CUDA,需要安装CUDA-8.0并添加环境变量,安装命令行如下: wget http://developer.download.nvidia.com/devzone/devcenter/mobile/jetpack_l4t/013/linux-x64/cuda-repo-l4t-8-0-local_8.0.84-1_arm64.debsudo dpkg -i cuda-repo-l4t-8-0-local_8.0.84-1_arm64.debsudo apt-get updatesudo apt-get install cuda-toolkit-8-0 在根目录下执行命令 nvcc -V 。如果执行命令后的结果不是CUDA的版本信息而是提示有问题,则需要在JetSon TX2上设置环境变量: sudo gedit /etc/bash.bashrc 在文件的末尾加入: export PATH=/usr/local/cuda-8.0/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH 之后运行nvcc -V如果显示有版本信息,并在CUDA的example目录下执行sudo make能够正确运行示例,则证明CUDA已成功安装,重新执行。/installLibrealsense.sh 安装SDK库。 最后执行realsense-viewer如果能正确显示摄像头采集图像界面,如下所示,则证明SDK库已成功安装。 由于近期JetSon TX2上的ROS环境出现了问题,卸载重装后发现之前搭建的所有ROS节点都无法使用了,因此需要在TX2上复现这篇博文提到的完整框架,重新进行环境搭建。 在重新复现的过程中对RealSense相关的依赖库有了更全面的了解与认识,发现自己这篇博文有很多地方存在问题与疏漏,特此补充修改。 由于这篇博文写于2019年,当时RealSense SDK没有直接在arm架构下的安装方法,因此我采用了JetSonhacks提供的安装脚本,如上文旧的步骤(1)中所示。 需要注意的是这个SDK安装的是librealsense 2.13.0版本,如今我复现后发现这个旧版本依旧能够正常安装,但之后会与后文步骤(2)中librealsense_ros的安装存在版本冲突,即,当对librealsense_ros进行源码编译安装时,报错如下: CMake Error at realsense-ros/realsense2_camera/CMakeLists.txt:47 (message):Intel RealSense SDK 2.0 is missing, please install it from https://github.com/IntelRealSense/librealsense/releases 因此我重新去查看了RealSense SDK的官网,打算安装RealSense SDK的最新版本,新版本安装后问题得以解决(并且安装新版本时无需卸载旧版本,发现可以直接对其覆盖)。 官网查阅后发现如今RealSense SDK已经可以直接在JetSon TX2上进行安装,其安装方式有两种,一个是从源码编译安装,一个是直接apt-get安装。 首先为求便捷直接选择apt-get安装,但没能成功,不过还是记录一下正常的安装流程: 方式1:apt-get安装包进行安装: 官方手册:https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages 注册公匙: sudo apt-key adv --keyserver keys.gnupg.net --recv-key C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C8B3A55A6F3EFCDE 添加repositories(Ubuntu 16 LTS): sudo add-apt-repository “deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main” -u 安装library: sudo apt-get install librealsense2-dkmssudo apt-get install librealsense2-utils 安装developer和debug packages: sudo apt-get install librealsense2-devsudo apt-get install librealsense2-dbg 测试SDK: realsense-viewer 这里我遇到的问题有: 1/ 无法添加repositories: http://ppa.launchpad.net/fcitx-team/nightly/ubuntu/dists/xenial/main/binary-amd64/Packages 404 Not Found 后来尝试把软件&更新中的一些奇怪的源取消勾选后解决了。 2/ 在执行sudo apt-get install librealsense2-dkms时依旧无法定位软件安装包,报错如下: E: Unable to locate package librealsense2-dkms 这里一直没能解决,于是放弃apt安装,直接对源码进行编译。目前官方提供的最新版本为RealSense SDK 2.41.0,具体流程如下所示: 2021.07.06 目前官方提供的最新版本为RealSense SDK 2.48.0(注意一定要用最新版) 方式2:源码编译进行安装: 官方手册:https://github.com/IntelRealSense/librealsense/blob/master/doc/installation.md 从仓库中git源码到本地: git clone https://github.com/IntelRealSense/librealsense.git 安装一些依赖库: sudo apt-get install git libssl-dev libu***-1.0-0-dev pkg-config libgtk-3-dev 编译与安装: cd librealsense/buildcmake 。./sudo make uninstall && make clean && make && sudo make install 这里我安装的时候没有遇到什么别的问题,结束后进行librealsense的ROS版本安装。 (2)安装RealSense相机的ROS版本 ----mod 2021.01.20--- 本步骤在后文有更新,建议直接从后面----mod 2021.01.20---处查看。 安装基于ROS使用的librealsense_ros包。 官方链接:https://github.com/jetsonhacks/installRealSense2ROSTX 将源码zip下载并解压,执行如下命令行进行安装: 。/installRealSenseROS.sh 这里不知道为什么一直编译不通过,单独下载realsense源码进行catkin_make也没有用,可能是因为使用的这个版本比较旧后续有改动,导致找不到一些依赖库之类的问题。于是我卸载了之前安装的SDK(否则librealsense会出现版本冲突)命令行:sudo make uninstall,用ROS包进行安装,命令行如下: sudo apt-get install librealsense2sudo apt-get install ros-kinetic-realsense2-camera sudo apt-get install ros-kinetic-rgbd-launch 执行完毕上面命令后重启系统:sudo reboot 完成ROS上RealSense包的安装。 这里继续修改和完善ROS包的安装流程,上文步骤(2)的旧安装方式也是通过JetSonhacks提供的安装脚本进行的,但跟SDK一样如今ROS版本也已经可以直接在TX2上进行安装了,并且随着RealSense版本的更新,JetSonhacks提供的脚本会出现很多不适配的问题,如这个issue所示:https://github.com/IntelRealSense/librealsense/issues/4295 于是直接采用Realsense官方提供的用户手册,其安装方式依旧有两种,一个是从源码编译安装,一个是直接apt-get安装ros包。 方式1:apt-get安装包进行安装: 官方手册:https://github.com/IntelRealSense/realsense-ros 首先为求便捷也是直接选择apt-get安装,安装步骤如下: sudo apt-get install ros-kinetic-realsense2-camera sudo apt-get install ros-kinetic-rgbd-launchsudo apt-get install ros-kinetic-realsense2-description 但安装完成后运行相机ROS节点时roslaunch realsense2_camera rs_camera.launch,发现无法找到realsense2_camera节点,最后还是重新源码编译了… 方式2:源码编译进行安装: 官方手册:https://github.com/IntelRealSense/realsense-ros 从仓库中git源码到本地: mkdir -p ~/catkin_ws/srccd ~/catkin_ws/src/git clone https://github.com/IntelRealSense/realsense-ros.gitcd realsense-ros/git checkout `git tag | sort -V | grep -P “^2.d+。d+” | tail -1`cd 。. 编译与安装: catkin_init_workspacecd 。.catkin_make cleancatkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Releasecatkin_make install 在步骤(1)中的RealSense SDK 2.41.0安装成功后,这里的ROS版本编译安装也没有问题了。 (3)安装IMU驱动 由于RealSense D435摄像头不含IMU惯性测量模块,于是我们购入了一块轻量级IMU,集成两个加速度传感器与三个速度传感器(陀螺),用于测量物体三轴姿态角(或角速率)以及加速度,并以此解算出物体的姿态,使得最终的定位结果更加精准。 这里使用的IMU驱动是一位不愿意透露姓名的大神同事自己写的,非常牛逼,涉及到个人版权在这里就不开源了。 直接catkin_make进行编译,之后运行如下命令行: sudo cp `rospack find serial_com_node`/scripts/jy901.rules /etc/udev/rules.dsudo service udev reloadsudo service udev restart#重启系统sudo reboot 3、使用Realsense D435摄像头运行Vins-Mono 下面进入激动人心的Vins-Mono运行环节,首先测试Realsense D435摄像头是否能够正常工作。 (1)测试Realsense D435摄像头 打开三个终端,分别执行如下命令行: source devel/setup.bashroslaunch realsense2_camera rs_rgbd.launch #运行Realsense2的RGB-D相机 source devel/setup.bashroslaunch serial_com_node serial.launch #运行IMU rosrun rviz rviz 选择CloudPoints2,或者运行roslaunch realsense2_camera rs_camera.launch filters:=pointcloud,如果能够正确看到Realsense D435获得的点云信息,如下图所示,则证明摄像头驱动已正确安装。 (2)运行Vins-Mono 将vins-mono-catkin_ws/src/VINS-Mono/config/realsense/realsense_color_config.yaml文件中订阅的topic更改为Realsense D435与IMU发布的topic,如下所示: imu_topic: “/imu”image_topic: “/camera/color/image_raw”output_path: “/home/nvidia/output/” 打开四个终端,分别执行如下命令行: source devel/setup.bashroslaunch realsense2_camera rs_rgbd.launch source devel/setup.bashroslaunch serial_com_node serial.launch source devel/setup.bashroslaunch vins_estimator realsense_color.launch source devel/setup.bashroslaunch vins_estimator vins_rviz.launch 如果显示界面如下所示,则证明Vins-Mono框架已正确安装,并能够使用Realsense D435摄像头正确运行。 二、在JetSon TX2上运行RTAB-MAP RTAB-MAP(Real-Time Appearance-Based Mapping)提供了一个基于外观的定位与构图解决方案,解决大型环境中的在线闭环检测问题。 官方链接:http://introlab.github.io/rtabmap/ 1、安装与编译RTAB-MAP 在JetSon TX2上安装与编译RTAB-MAP时遇到了很多问题,并且编译速度很慢,需要一些耐心慢慢解决。 源码链接:https://github.com/introlab/rtabmap 官方用户手册:https://github.com/introlab/rtabmap_ros#installation 参考博客:https://www.ncnynl.com/archives/201706/1749.html 首先检查是否已安装OpenCV3,这里不做过多安装说明,之后直接使用源码安装RTAB-MAP,命令行如下: #安装依赖项 (Qt, PCL, VTK, OpenCV, 。..)sudo apt-get install ros-kinetic-rtabmap ros-kinetic-rtabmap-roscd ~git clone https://github.com/introlab/rtabmap.git rtabmap #rtabmap源码下载cd rtabmap/buildcmake 。.make -j4make install 在编译过程中遇到如下错误: /home/nvidia/rtabmap/corelib/src/optimizer/OptimizerGTSAM.cpp:45:42: fatal error: gtsam/sam/BearingRangeFactor.h: No such file or directory 分析原因,应该是没有安装GTSAM依赖项。运行如下命令行安装GTSAM: git clone https://bitbucket.org/gtborg/gtsam.gitcd gtsammkdir buildcd buildcmake 。.make checkmake install #需改为sudo make install,否则报如下错误 编译到最后一步时出现了一个错误: [100%] Built target ConcurrentFilteringAndSmoothingExample Install the project.。. -- Install configuration: “Release” -- Installing: /usr/local/lib/cmake/GTSAM/gtsam_extra.cmake CMake Error at cmake_install.cmake:44 (file): file INSTALL cannot copy file “/home/shruti/gtsam/build/gtsam_extra.cmake” to“/usr/local/lib/cmake/GTSAM/gtsam_extra.cmake”.Makefile:105: recipe for target ‘install’ failed make: *** [install] Error 1 发现是权限不够的问题,需要添加sudo来执行, 命令行:sudo make install 安装完GTSAM依赖项后重新进行RTAB-MAP的编译,依旧没有通过,于是又安装了G2O依赖包,命令行如下: #安装g2o依赖包:sudo apt-get install cmake libeigen3-dev libsuitesparse-dev#源码编译g2ogit clone https://github.com/RainerKuemmerle/g2o.gitcd g2o/mkdir buildcd build/cmake 。./make 再次进行RTAB-MAP的编译,还是没有通过,报错: error: no matching function for call to ‘g2o::BlockSolver.。..。.。 分析原因是G2O初始化时Block出错,以及迭代算法部分出错。由于github上的G2O换了新的接口,可以换回高博的旧版G2O。 然而这里我依旧没能编译成功,于是直接取消了G2O的依赖关系,命令行如下。这次终于能够正确编译,但可能会对RTAB-MAP的重建精度有一些影响。如果有人知道如何正确安装GTSAM与G2O依赖项欢迎一起讨论 ~ ~ cmake -DWITH_G2O=OFF -DWITH_GTSAM=OFF 。.makesudo make install 之前老博文这里遗忘了安装RTAB-MAP的ROS包的过程,补充一下后续安装步骤: cd ~/catkin_wsgit clone https://github.com/introlab/rtabmap_ros.git src/rtabmap_roscatkin_make -j1 这里遇到了几个错误,具体描述如下: 1/ No rule to make target ‘/usr/lib/x86_64-linux-gnu/libproj.so ,needed by ’。./bin/generate_pointcloud 错误原因是由于/usr/lib/aarch64-linux-gnu/文件夹内没有这个libproj.so库。因此先在该文件夹内搜索是否有同名不同版本的库,如果有 ,可以使用ln -s在该文件夹内部对存在的库链接到一个新建的名为libproj.so 库内,这样就可以使用了,执行命令行如下: sudo ln -s /usr/lib/aarch64-linux-gnu/libproj.so.9 /usr/lib/aarch64-linux-gnu/libproj.so 如果文件夹内部没有此库,需要安装依赖库:sudo apt-get install libproj-dev。 2/ /home/ubuntu/ros_ws/devel/lib/librtabmap_ros.so: undefined reference to ‘rtabmap::Signature::setWords(std::multimap《int, cv::KeyPoint, std::less, std::allocator《std::pair《int const, cv::KeyPoint》 》 》 const&)’ 这里是由于19年安装的时候RTAB-MAP的源码版本为0.19.6,我这里依旧沿用了当时安装的版本,于是就与现在的ROS版本无法兼容与适配,可以参考这篇遇到类似问题的issue:https://github.com/introlab/rtabmap_ros/issues/456 解决办法是在官网上下载与RTAB-MAP的源码版本匹配的ROS版本,发现没有0.19.6这个版本,于是下载Master版本,将之前编译的build与devel文件夹删除后重新编译(切记要clean你的ros工作空间,不同版本编译安装时无法直接覆盖,会出问题),问题得以解决。 2、使用摄像头RealSense D435运行RTAB-MAP 参考博客:https://answers.ros.org/question/308137/run-rtab-map-but-without-image-open/ 首先将rtabmap.launch文件中订阅的topic更改为RealSense D435摄像头发布的信息,如下所示: 《arg name=“rgb_topic” default=“/camera/color/image_raw” /》《arg name=“depth_topic” default=“/camera/aligned_depth_to_color/image_raw” /》《arg name=“camera_info_topic” default=“/camera/color/camera_info” /》 之后分别打开三个终端,分别运行如下命令行: source devel/setup.bashroslaunch realsense2_camera rs_rgbd.launch source devel/setup.bashroslaunch serial_com_node serial.launch #启动RTAB-MAP建图source devel/setup.bashroslaunch rtabmap_ros rtabmap.launch rtabmap_args:=“--delete_db_on_start” #或者source devel/setup.bashroslaunch rtabmap_ros rtabmap.launch rtabmap_args:=“--delete_db_on_start” rviz:=true rtabmapviz:=false 显示如下三维场景重建界面,表明RTAB-MAP已经正确安装,Realsense D435摄像头可以正确运行。 |
|
|
|
只有小组成员才能发言,加入小组>>
3847个成员聚集在这个小组
加入小组3079 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4058 浏览 1 评论
4049 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-18 00:42 , Processed in 0.544953 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号