【NVIDIA Xavier NX 安装ROS-melodic + Realsense D435i环境搭建】


背景

20220313更新
今早看到还有人看这篇帖子,看着行文太无拘无束了,很浪费时间,不过纯小白的话可以看看,可以避避坑。

为了避免浪费大家的时间,特此更新总结,换源等操作就不赘述了:

Ubuntu18.04的NVIDIA Xavier NX搭建ROS+realsense D435i环境:

  1. 如果版本合适的话(官方只在两个版本上测试过),可以直接用Jetson官方脚本安装ROS【首选】
  2. 如果官方的安装不了,那就直接跟着ROS官网Ubuntu系统的装就可以,关于rosdep的问题,直接查raw.githubusercontent.com的ip,全部ip写进/etc/hosts中,看网络就行,可以过的。详细操作可以看我最新发的帖子的安装ROS部分
  3. 关于realsense环境,遵循一个原则:librealsense、ROS-Wrapper和相机固件版本要匹配才能正常使用,直接看官方github的ReadMe文件就可以,怎么升级固件网上也很多资料,看本文最下面也可以,不难。

从本文第一次发文至今,已经装过很多环境了,科研人加油!



原文:

整活整活,走一波国际惯例,介绍背景+吐槽。:
如有缘看到此文,并有可以参考的地方,请看完全文再进行,否则后果自负。
本文采取总分总的结构记叙,时间少的可以直接看这里的结论吧。
如果你是全新的NVIDIA Xavier NX,既然会找到我的文章,那我还是建议你看完。

结论:下载跟固件版本相对于的SDK版本,或者直接把固件升级到最高版本,然后下载相应的SDK,就可以运行了。

嗯,Realsense D435i的环境搭建就这样没了。

ROS的先换源,然后看我下面的命令,敲进去Ubuntu 18.04

嗯,ROS也结束。

可以在ROS上运行realsense D435i了。

嗯,本文完结,接着科研吧,冲!!!


一、软硬件信息

工控机
核心板:NVIDIA Xavier NX
系统:Ubuntu18.04
内核:4.9.140
JetPack:4.3
L4T:32.4.3

视觉Intel RealsenseD435i
固件版本:5.12.11(后升级到5.12.13.50)


二、过程

以下为自己走过的曲折之路,只为记录,若dalao一心为科研,没时间看小白吐槽,可跳过。

1. 盒子到手,悔无调研

因为要做嵌入式的视觉系统,之前买了一个Realsense的摄像头,听了控制前辈(非视觉向)的话,我直接败家地入手了一个某公司的智盒,其核心板是英伟达的Xavier NX(劝告各位跟我一样的小白,买之前请三思,溢价有点高,说实话,我有点后悔,买个核心板和一些配件回来就好了),然而吧,像往常PC端上装Realsense SDK一样,装完发现realsense-view工具直接没办法使用,检测不到设备(曲折1),盒子到手查了一下才发现,英伟达和因特尔的产品并没有很好的兼容性,小菜鸡没有提前做调研,各位小白以后买东西之前先做好调研,别像我一样败家。
嗯,既然没有很好的兼容性,即Realsense在常规amd64的Ubuntu上的使用的环境和arm64的Ubuntu上的不一样,在arm上需要打补丁。

2. 死马当活医,但仍有隐患

嗯,日常开始搜教程,csdn:“在Xavier NX上运行Realsense D435i”,结果并没有几个,随手点开一个比较中意的开始整活,即Reference[1]。我当时知道自己盒子的内核信息和教程上的不一样,但是毕竟不知道有什么影响,教程都是比较老的版本,一般都是1、2年过去了,想着实在不行跟在PC端一样降内核呗,这个教程里还有刷机的部分,我是很抗拒刷机的,没事为什么要刷机,整坏了呢?但没有别的方法,那就干吧。
Two years later,在第二步给系统打补丁时,系统跳出L4T版本不匹配,中止,我上了github查看链接作者的说明文件才发现,它的版本并不合适(曲折2)。
随后开始了各种教程的寻找,怎么找也找不到跟我一样当前较新版本的教程,连更老版本的Github dalao——jetsonhacks都不更新新版本的脚本了,就很尴尬(曲折3)。csdn上肯定是没希望了,直接上Github开始痛苦的英文之旅吧。最后在Github上找到一个用于cmake搭建Python3环境下的包,houthlab开发的,即Reference[2],但它支持的却是JetPack4.5.1,还是选择了尝试(死马当活马医呗)。
最后,安装编译后是可以成功运行realsense-view工具的,这个包里配置的却是2.31的SDK,而我的D435i的固件版本应该对应的是2.40版本的SDK(曲折4),但是用也能用,却会报一些错误,至今也不知道坑(文末填坑)的问题还是固件的版本没有对应的问题。因为版本对应的问题,所以我想着是否通过houthlab开发的工具包已经给系统打上了补丁,我可以重新下载较高版本的SDK来运行,于是我又打开链接[1],安装下载较高版本的SDK。现实总是很骨感的,重新下载完高版本SDK后,还是跟一开始一样,检测不到设备,可见或许并不是补丁的问题,该从其他角度入手(曲折5)。最后我又重新编译了一遍houthlab的包,虽然很多WARNING,但至少还有一个保底的能用。

3. 安装ROS

于是就开始着手安装ROS系统,查了几个教程发现装ROS就直接装就可以,没有很多乱七八糟的事情。
然而吧,装ROS本来就是一件窒息的事情,毕竟很多东西从外网下载,网速很慢,在这几天中我也尝试了接网线、像以前一样装ROS用手机热点、下载各种客户端维持网速等方式,由于客观局域网配置原因,根本无法解决用网线保持稳定网速这件事情,尤其是sudo rosdep initrosdep update
建议:不管如何,只要是arm,在开始安装ROS前先更换国内较为优质的软件源,且注意自己Ubuntu系统的版本。
更换Ubuntu-arm软件源方法可以看看Reference[3],还是有点区别的。

常见问题1:sudo rosdep init

报错:

ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.

解决方案:

① 登陆IPAdress网站,输入raw.githubusercontent.com查询到真实IP地址(IP地址会变);
② 打开终端,sudo gedit /etc/hosts
③ 在最后一行键入
(查询到的代码) raw.githubusercontent.com

我查到的是:
在这里插入图片描述
于是我在最后一行键入: 185.199.108.133 raw.githubusercontent.com

④ 保存,再进行sudo rosdep init就可以。

常见问题2:rosdep update

这个真就随缘,所有办法都是在疯狂修改网络环境,我在装PC的时候,最好的方式就是接手机热点,基本都能通过,一次不行就两次。
然而在arm上,这行不通啊,我就卡在了这一步,人傻(曲折6)。

在万花丛中看到了一颗新星,Reference[5],资源的地址是:https://github.com/jetsonhacks/installROSXavier,Jetsonhacks dalao的杰作,可以去看一下ReadMe。

安装命令如下:

git clone https://github.com/jetsonhacks/installROSXavier.git
cd installROSXavier
./installROSXavier

环境参数配置:

//打开.bashrc文件:
sudo vim ~/.bashrc 

//加入以下两项:
export LD_LIBRARY_PATH=/opt/ros/melodic/lib
export LC_ALL="C"

//最后source一下
source ~/.bashrc

最后完整的安装好了ROS,可以运行一下小乌龟测试一下:

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

4. 下载编译Realsense-ros

这个就比较简单直接了:

step1:创建一个工作空间

mkdir -p catkin_ws/src
cd catkin_ws/src

step2:在src下,下载文件

git clone https://github.com/IntelRealSense/realsense-ros.git
git clone https://github.com/pal-robotics/ddynamic_reconfigure.git
cd ~/catkin_ws && catkin_make

哦,我这全新的板子没有装过opencv,这个倒还好找,没啥,我是用这个帖子的:Reference[6],如果不想在板子上编译可以直接在移植的教程。嗯,这一part结束,go on。

step3:

catkin_make

这个时候就厉害了,realsense-ros安装包要和前面的librealsense包相对应,然而我前面装的Librealsense是2.31的,realsense-ros包默认是最新的,即支持Librealsense v2.45.0的,好嘛(曲折7)。

于是开始静下心来,开始认真的看一下怎么整活。

在这里插入图片描述

嗯,不单是SDK要对应,而且固件也要升级。

ok,双管齐下,一边升级固件一边下载SDK。


三、正片(装Librealsense和ROS Wrapper看这里就好):

根据官网相互对应和匹配的原则,我直接都莽最新的版本。

1. 按PC端的方式,下载编译SDK2.45(目前最新)

官网提供了两种安装方式,一种是从源上添加再安装,一种是从源码编译安装,两种方式都可以进行,大多数人都是采用后者——源码编译安装。
Github:https://github.com/IntelRealSense/librealsense

step1:下载资源source,默认都是最新的

git clone https://github.com/IntelRealSense/librealsense
cd librealsense

step2:安装依赖项(基本前面都安装过)

sudo apt-get install libudev-dev pkg-config libgtk-3-dev
sudo apt-get install libusb-1.0-0-dev pkg-config
sudo apt-get install libglfw3-dev
sudo apt-get install libssl-dev

step3:安装权限脚本

sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger 

step4:

mkdir build
cd build
cmake ../ -DBUILD_EXAMPLES=true
make
sudo make install

2. 升级固件(记得插上相机)

这个官网上有直接教程,安装在官网上看到ROS Wrapper的要求:D400系列相机要升级到5.12.13.50,那走起。

step1:下载所需版本的固件,我下载5.12.13.50的

固件Firmware下载:https://dev.intelrealsense.com/docs/firmware-releases

step2:在终端运行rs-fw-update -l以启动该工具并打印已连接设备的列表

例如:某个D415相机输出信息:

connected devices:
1) Name: Intel RealSense D415, serial number: 725112060411, ASIC serial number: 012345678901, firmware version: 05.11.01.100, USB type: 3.2

step3:提供序列号以识别设备以及我们要更新的固件文件名,在固件所在的文件夹内打开终端,键入:

rs-fw-update -s [serial numbei] -f [固件名称]
//serial number是上面那一长串数字,固件名称就是所想要升级的文件名(刚才下载那个)

例如:

rs-fw-update -s 725112060411 -f Signed_Image_UVC_5_11_6_250.bin

如果只连接了一台相机,也可以不输入序列号:

rs-fw-update -f [固件名称]

执行后,预期输出的信息示例:

search for device with serial number: 725112060411

update to FW: Signed_Image_UVC_5_11_6_250.bin

updating device:
Name: Intel RealSense D415, serial number: 725112060411, ASIC serial number: 012345678901, firmware version: 05.11.01.100, USB type: 3.2

firmware update started

firmware update progress: 100[%]

firmware update done

device 725112060411 successfully updated to FW: 05.11.06.250

输出信息最后一行的含义就是:你的设备725112060411(序列号)固件已成功升级为:05.11.06.250版本。

注:若还有不明白,可见官方安装文档:https://dev.intelrealsense.com/docs/firmware-update-tool

step4:见证奇迹的时刻到了,使用realsense-viewer工具查看效果,在终端键入:

realsense-viewer

你会发现一切豁然开朗。

step5:填完上面二、4的坑,ROS Wrapper还没编译呢,如果你是直接跳到这来的请完整操作上文二、4。

catkin_make

step6:编译完成后,测试一下:

roslaunch realsense2_camera demo_pointcloud.launch 	//打开相机节点

rostopic list		//在另一个终端输出相机节点的话题列表

如果成功显示出相机节点被订阅话题的列表,则恭喜你安装成功,可以继续冲了。


总结

其实并不复杂,NVIDIA Xavier NX 安装ROS-melodic + Realsense D435i环境搭建的流程:

① 安装ROS:换源-部署ROS-更改配置环境-测试,全程保持较稳定网络状态即可

② 搭建D435i环境:下载安装编译选择所需Librealsense包的版本-查看/升级固件-测试,原装线连接摄像头与设备

没了,好好学习,天天科研。

我的全程当然不止只有7次曲折这么简单,中间还查了很多东西,一些细枝末节的弯路和坑没有记录下来,毕竟不是写流水账。愿科研路上一帆风顺,peace。


填坑(二-2)

我在第二章第二节中提到有一个坑,就是在realsense-viewer工具开启时,会出现以下几种错误:

27/04 09:29:56,572 WARNING [139988041905920] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 6102/06 18:14:04,834 WARNING [546903667072] (uvc-device.cpp:644) interrupt event received: 1, 3, 0, 7, 0, 002/06 15:30:00,403 WARNING [5479364444192] (types.cpp:49) hwmon command 0x4f failed. Error type: No data to return (-21)01/06 23:37:56,009 WARNING [548128411424] (messenger-libusb.cpp:42)control_transfer returned error, index: 768, error: Resource temporarily unavailable; number: 11

诸如此类的警告时,如果只是刚开启时跳出这些警告,不是频繁的弹出,那倒问题不大,可以不必理会,这个相机或者是版本的一个bug,目前没有处理办法;如果是频繁弹出,从如下角度考虑:

① 数据线是否为原装线;

② 固件版本、包的版本是否相匹配;

③ 设备之间的通信问题,其实也与①②相关。

我遇到后发现问题就是固件和包版本的关系,有时候系统并不会提示你,你装完后很多东西都是正常的,但是确实不对的,故会报出上述警告提示,过于频繁的弹出警告,则说明有问题,忽略不管的话后续肯定会有很多不知名错误等着的。


Reference

[1]. https://blog.csdn.net/hnlyzxy123/article/details/100135303
[2]. https://github.com/houthlab/installRealSenseSDK
[3]. https://www.cnblogs.com/yongy1030/p/10315569.html
[4]. https://blog.csdn.net/weixin_36965307/article/details/108477174
[5]. https://blog.csdn.net/bhm429462286/article/details/102871064
[6]. https://blog.csdn.net/public669/article/details/99044895
[7]. https://blog.csdn.net/Lynn_mg/article/details/103149489
[8]. https://dev.intelrealsense.com/docs/firmware-update-tool
[9]. https://blog.csdn.net/qq_44847636/article/details/116298282
[10]. https://ask.csdn.net/questions/1735987?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162290021616780262513298%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162290021616780262513298&biz_id=4&utm_medium=distribute.pc_search_result.none-task-ask_topic-2allfirst_rank_v2~rank_v29-1-1735987.pc_search_result_before_js&utm_term=control_transfer+returned+error%2Cindex%3A768%2Cerror%3AResource+temporarily+unavailable&spm=1018.2226.3001.4187

  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay_z在造梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值