最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Jetson Xavier NX 踩坑筆記1(Jetson,ROS,TELLO,ORB_SLAM3)

2021-08-09 17:22 作者:KERO  | 我要投稿

? 前段時間在WIN10的WSL1 UBUNTU 20.04上構(gòu)建好了ORB_SLAM3 跑tello無人機(jī)傳回來的視頻流。過程比較輕松,各種編譯幾乎都是無痛編譯。

? 然后上周,下單了兩個月的jetson xavier nx總算是到貨了

??

?于是就得再在jetson上構(gòu)建一遍,但是這個過程比起WSL的時候要麻煩痛苦不少。寫下筆記記錄一下。

?jetson的燒機(jī),或者是一些軟件編譯的具體過程網(wǎng)上有很多文章,就不在這里在這里復(fù)述了。重點記錄一下一些比較少被人提到但是實際遇到的報錯。


TELLO

  • Illegal instruction (cpre dumped)????

首先當(dāng)然是來測試一下tello和jetson的通信? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 我用的是支持python3的 djitellopy(https://github.com/damiafuentes/DJITelloPy)

from djitellopy import tello

me = tello.Tello()
me.connect()

運行,萬萬沒想到這么簡單一步馬上就報錯了

>>> from djitellopy import Tello? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Illegal instruction (core dumped)

原因是jetson的CPU是ARM64架構(gòu),區(qū)別于電腦上的X86架構(gòu)。不光是這個tello的模塊,jetson上運行別的python指令也很容易出現(xiàn)這個報錯(https://forums.developer.nvidia.com/t/illegal-instruction-core-dumped-xavier/166278)


解決方法是定義變量

export?OPENBLAS_CORETYPE=ARMV8

當(dāng)然不可能每次打開終端都這樣,還是得寫進(jìn) ~/.bashrc? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

vim?~/.bashrc??

按shift+0開始編輯,在末尾找空位添加

然后esc,按:后輸入wq 回車保存并退出? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? source?~/.bashrc

這樣就能實行import tello了

  • UBUNTU雙網(wǎng)卡上網(wǎng)

上一步我們已經(jīng)能import tello了,但是再次運行程序 發(fā)現(xiàn)永遠(yuǎn)卡在me.connect()

原因是,盡管jetson已經(jīng)連上了tello的wifi信號,但是UBUNTU同時使用有線網(wǎng)卡和無線網(wǎng)卡的話 有線的優(yōu)先級會更高,所以無法與tello的IP 192.168.10.1建立連接,ping不通? ? ? ? ? ? ? ? ? ?jetson對局域網(wǎng)進(jìn)行掃描,找不到tello的192..168.10.1

kero@kero-desktop:~$ nmap -sP 192.168.10.0/24

Starting Nmap 7.60 (?https://nmap.org?) at 2021-08-08 17:56 JST
Nmap scan report for kero-desktop (192.168.10.2)
Host is up (0.00072s latency).
Nmap scan report for aterm.me (192.168.10.8)
Host is up (0.0034s latency).
Nmap scan report for 192.168.10.101
Host is up (0.00059s latency).
Nmap scan report for 192.168.10.102
Host is up (0.029s latency).
Nmap scan report for kero-desktop (192.168.10.104)
Host is up (0.00033s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 2.44 seconds

在筆記本W(wǎng)IN10上進(jìn)行掃描,192.168.10.1就大晃晃坐在那

想要ping通的話首先得拔掉網(wǎng)線 只留無線網(wǎng)卡進(jìn)行工作,不過因為我主要用筆記本通過SSH,X11?和VNC來對jetson進(jìn)行操縱,拔網(wǎng)線的話挺難受

或者開啟tello的AP模式,讓其不再發(fā)射無線信號 而是連接到特定無線路由。然后jetson通過網(wǎng)線 路由器來與tello進(jìn)行通信。不過AP模式下tello并不能進(jìn)行視頻推流,只能控制飛行的話意義不大(https://github.com/dji-sdk/Tello-Python/blob/master/TelloPython_FAQ(CH).txt)


參考一些博文想要實現(xiàn)有線無線同時使用,比如https://blog.csdn.net/hellohake/article/details/112212580

但是最終都沒有完美解決,仍然是有線工作時無法與tello建立通信。原因可能是我的有線無線IP地址都在192.168.10.*下

但是現(xiàn)在一旦建立通信成功的話 再把網(wǎng)線插回來的話 有線和無線可以同時工作。

總之比較折衷的笨辦法就是和tello建立通信 打開視頻推流的前后手動拔插一下網(wǎng)線。也許也可以在python代碼中加入關(guān)閉打開有線網(wǎng)卡eth0的指令 不過方法還在摸索


ROS

ROS的編譯安裝網(wǎng)上文章也不少了,基本看http://wiki.ros.org/cn/ROS/Installation就能搞定。不過之前在WSL上因為UBUNTU版本是20.4 所以我選擇安裝的是支持python3的ROS Noetic

而jetson的訂制UBUNTU系統(tǒng)目前只到18.04,所以只能安裝基于python2的ROS Melodic。NVIDA官方好像有通過docker來實現(xiàn)安裝ROS Noetic的方法(https://github.com/dusty-nv/jetson-containers)不過對我來說docker還是未知領(lǐng)域 所以暫且先來安裝Melodic 之后深度學(xué)習(xí)部分遇到兼容性問題的話再試別的方法

按照http://wiki.ros.org/cn/melodic/Installation/Ubuntu安裝好后,用pip3安裝以下項目,因為我默認(rèn)PIP是3 所以代碼只是pip

pip install trollius rosdep rospkg rosinstall_generator rosinstall wstool vcstools catkin_pkg

pip install git+https://github.com/catkin/catkin_tools


然后在創(chuàng)建工作空間步驟時,手動指定python版本

mkdir -p ~/catkin_ws/src

cd ~/catkin_ws

catkin_make -DPYTHON_EXECUTABLE={你的python地址}

source devel/setup.sh



這樣就能暫且實現(xiàn)對python3的支持,當(dāng)然在之后寫的python代碼開頭別忘了加上#!/usr/bin/env python3

  • ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)

當(dāng)然通過這種方法來使用python3會有很多兼容性問題,目前我遇到的是在使用把opencv圖像格式轉(zhuǎn)換成ROS格式的CvBridge時馬上就會報錯

from cv_bridge import CvBridge

ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)

這種情況需要自己手動編譯一次cvbridge,并且給python3添加變量具體解決辦法參考

https://huazhe1995.github.io/2020/03/14/ros-diao-yong-cv-bridge-wen-ti/

https://qiita.com/Hiroaki-K4/items/01945ecea97c26ff8324


可以預(yù)見之后的使用過程中肯定會有更多的兼容性問題,也許趁工作還沒開始放棄這個版本是最好的


ORB_SLAM3

jetson編譯ORB_SLAM3的大致流程和別的設(shè)備一樣,就是編譯的時候會跑出很多小報錯

主要參考的是這篇博文https://zhaoxuhui.top/blog/2020/09/30/orb-slam3-cmake-ros-compilation-and-test.html

搭配上不停Google

值得一提的首先是OPENCV的部分。jetson的系統(tǒng)自帶了OPENCV4.X 非CUDA版本的。

為了接下來編譯ORB_SLAM3 以及一些使用到CUDA加速的SLAM 比如ORB_SLAM2 CUDA(https://github.com/thien94/ORB_SLAM2_CUDA)

有必要刪除自帶的OPENCV 然后重新編譯一個支持CUDA的OPENCV 3.X

首先刪除

sudo apt-get purge libopencv*

sudo apt autoremove

sudo apt-get update

然后重新編譯一個3的,編譯方法上面文章有提到

jetson上編譯OPENCV報錯比較少,可能得益于系統(tǒng)本身一開始就安裝好了所需要的依賴項。之前在WIN10還從來沒成功編譯好CUDA版本

不過CUDA版本編譯的過程也出奇的長,在jetson NX上花了我80分鐘左右。

查看一下版本

其二就是到了ORB_SLAM3編譯,也就是make這一步時 記得不要使用make -j指令

jetson NX 6個核心一起編譯的話吃掉的內(nèi)存會暴漲,瞬間超過8GB 接著機(jī)器直接卡死。ORB的編譯對內(nèi)存需求比較高,之前在WSL上CPU 8核心編譯 筆記本的16G內(nèi)存也完全吃不消 關(guān)了其他所有軟件才勉強(qiáng)進(jìn)行下去

也試著用swap弄了8GB物理內(nèi)存 不過效果不大,可能物理內(nèi)存要放到外接的SSD上面才能有好的效果

最好直接使用make指令單核心編譯是最保險的? ?就是過程有點慢 但是總比死機(jī)強(qiáng)。

我最后是用的 make -j4? 勉勉強(qiáng)強(qiáng)在內(nèi)存溢出的邊緣完成了編譯

或者你可以切換jetson的功耗模式 只留4顆核心出來

測試

ORB_SLAM3, ?ROS,Tello

這三樣都搞好后我們就可以來測試了

用ROS來測試很簡單,運行ROB_SLAM3的ROS版本之后 他會啟動ORB_SLAM3 并且作為一個subscriber不停監(jiān)聽指定話題的數(shù)據(jù)

我們只需要用python來編寫一個publisher,將我們想要測試的數(shù)據(jù),電腦里的圖片文件也好 tello的視頻流也好? 持續(xù)向指定話題發(fā)布就能進(jìn)行測試

可以參考這個視頻的教學(xué)https://youtu.be/vY18hw11vOU

不過在開始運行之前先要寫一個參數(shù)配置,ORB_SLAM3自帶的示例里面已經(jīng)提供了KITTI之類數(shù)據(jù)集的相機(jī)參數(shù),具體可以點開一個來查看,比如單目下的KITTI00-02.yaml(https://github.com/UZ-SLAMLab/ORB_SLAM3/blob/master/Examples/Monocular/KITTI00-02.yaml)

配置文件分成三個部分,重要的其實就是前面兩個 相機(jī)參數(shù)和ORB參數(shù)? ORB參數(shù)我們可以測試之后根據(jù)效果來調(diào)整 直接這么留著使用問題也不大,主要是來修改相機(jī)參數(shù)

新建一個tello.txt文檔 把上面參數(shù)文件的內(nèi)容全部復(fù)制進(jìn)去

然后將相機(jī)參數(shù)照著自己的相機(jī)內(nèi)參進(jìn)行修改

相機(jī)內(nèi)參是通過相機(jī)標(biāo)定來獲得,關(guān)于相機(jī)標(biāo)定搜一下的話就就有很多文章 已經(jīng)有很多軟件 拍幾張照片就能輕松標(biāo)定,之前搗鼓單目測距之類的時候已經(jīng)用GML Camera Calibration標(biāo)定好了,所以這里直接對著修改

然后保存,將后綴名改成yaml 放入單目文件夾下。

然后

roscore

啟動ROS

rosrun ORB_SLAM3 Mono ~/ORB_SLAM3/Vocabulary/ORBvoc.txt? ~/ORB_SLAM3/Examples/Monocular/tello.yaml

啟動ORB_SLAM3不帶IMU的單目模式

其實是想試試IMU的 不過tello的IMU數(shù)據(jù)處理和發(fā)布還沒弄好 暫且先來試試純視覺導(dǎo)航

啟動好了彈開兩個窗口,說明ORB_SLAM3開始待機(jī)了 并且在監(jiān)聽/camera/image_raw這個topic

我們來寫個python的publisher來發(fā)布,一開始調(diào)試為了不每次都連接tello 的wifi這么麻煩,先用自己采集的數(shù)據(jù)來進(jìn)行,事先我用python錄了一段tello拍到的畫面 并且按1秒10幀分割成圖片保存,模仿KITTI數(shù)據(jù)集的形式 方便來做測試

這種形式的數(shù)據(jù)按照上面視頻教程的步驟,輕松發(fā)布

ORB_SLAM3監(jiān)聽到話題有數(shù)據(jù)之后就開始計算了 效果不錯 和在WSL上一樣

確認(rèn)用到的代碼都沒什么問題之后我們來改寫上面的pubulisher代碼,這次我們不是發(fā)布已經(jīng)存好的圖片 而是實時從tello傳回來的視頻流


不過方法是一樣的,就是稍微結(jié)合djitellopy,輕松秒殺。

哦 記得運行的時候要拔插一下網(wǎng)線好讓和tello建立通訊


Jetson Xavier NX 踩坑筆記1(Jetson,ROS,TELLO,ORB_SLAM3)的評論 (共 條)

分享到微博請遵守國家法律
诸城市| 福泉市| 闵行区| 舟山市| 介休市| 武城县| 洪江市| 双牌县| 张家口市| 吉隆县| 沛县| 余姚市| 体育| 玉环县| 乾安县| 蓬溪县| 黑水县| 香港 | 新巴尔虎右旗| 兴城市| 和政县| 彩票| 健康| 岳阳县| 板桥市| 凤翔县| 禹城市| 玛曲县| 黑山县| 馆陶县| 鄂伦春自治旗| 砚山县| 称多县| 北川| 汶川县| 同仁县| 三江| 芦山县| 三门县| 牡丹江市| 兴业县|