在旭日X3派开发板上使用Intel Realsense深度相机
在前文《多方位玩轉“地平線新發布AIoT開發板——旭日X3派(Sunrise x3 Pi)” 插電!開機!輕松秒殺!》中,我們已經成功了使用了這個開發板。
深度相機目前在多個應用得到了廣泛的應用,如果能在上面運行起來深度相機的話,那這個開發板豈不是能應用在更多的場景上😃。
我在這個板子上對深度相機所需的SDK進行了編譯,SDK版本為:Intel? RealSense? SDK 2.0 (v2.50.0)。
📣📣📣2022-7-2日更新:利用預編譯包,成功獲取D435的RGBD圖像!!!
總結下遇到的問題:
- 軟鏈接似乎不能直接復制粘貼,在新的環境下要手動配置下,所以在百度云里我刪除了軟連接的文件。
- 部分相機需要99-realsense-libusb.rules文件支持。
一 預編譯包
我編譯這個SDK花費了5.6個小時,為了方便各位后續使用,各位可以直接下載編譯好的文件,包含C++和Python的庫,相關文件我已經上傳至百度云(提取碼:awe4 )。
在提供的這些文件中,壓縮包built_realsense.zip為這些文件夾的集合,99-realsense-libusb.rules為相機規則文件,在源碼包的config文件夾中。
①頭文件、庫文件、bin文件配置。 文件夾lib、include和bin的內容都要放在/usr/local文件夾下,假設,這些文件的下載根目錄為downpath,則具體操作如下(建議移動前check下路徑):
## 復制文件 sudo cp -r downpath/bin/* /usr/local/bin/ sudo cp -r downpath/include/* /usr/local/include/ sudo cp -r downpath/lib/* /usr/local/lib/## 創建庫的軟鏈接 sudo ln -s /usr/local/lib/librealsense2-gl-so.2.50.0 /usr/local/lib/librealsense2-gl.so.2.50 sudo ln -s /usr/local/lib/librealsense2-gl-so.2.50 /usr/local/lib/librealsense2-gl.so sudo ln -s /usr/local/lib/librealsense2.so.2.50.0 /usr/local/lib/librealsense2.so.2.50 sudo ln -s /usr/local/lib/librealsense2.so.2.50 /usr/local/lib/librealsense2.so② Python包配置。 文件夾python3的內容注意要放在/usr/lib/python3/dist-packages/里面(建議移動前check下路徑)。
## 復制文件 sudo cp -r downpath/python3/dist-packages/pyrealsense2 /usr/lib/python3/dist-packages/ ## 創建庫的軟鏈接 sudo ln -s /usr/lib/python3/dist-packages/pyrealsense2/pybackend2.cpython-38-aarch64-linux-gnu.so.2.50.0 /usr/lib/python3/dist-packages/pyrea lsense2/pybackend2cpython-38-aarch64-linux-nu.so.2.50 sudo ln -s /usr/lib/python3/dist-packages/pyrealsense2/pybackend2.cpython-38-aarch64-linux-gnu.so.2.50 /usr/lib/python3/dist-packages/pyrea lsense2/pybackend2cpython-38-aarch64-linux-nu.so sudo ln -s /usr/lib/python3/dist-packages/pyrealsense2/pyrealsense2.cpython-38-aarch64-linux-gnu.so.2.50.0 /usr/lib/python3/dist-packages/pyrealsense2.cpython-38-aarch64-linux-gnu.so.2.50 sudo ln -s /usr/lib/python3/dist-packages/pyrealsense2/pyrealsense2.cpython-38-aarch64-linux-gnu.so.2.50 /usr/lib/python3/dist-packages/pyrealsense2.cpython-38-aarch64-linux-gnu.so③ bin文件配置。 可執行文件,拷貝過后不存在執行屬性。需要sudo chmod +x **來賦予執行權限
④ rules文件配置。 測試中發現部分文件需要rules文件支持,系統中有兩個放置rules文件的地方,安全起見,在文件夾/usr/lib/udev/rules.d/和文件夾/usr/lib/udev/rules.d/下都存一份99-realsense-libusb.rules文件。
這樣就可以愉快的使用啦(? ?_?)?,下圖為D435檢測情況。
歡迎給位來測試哦!!o( ̄▽ ̄)ブ
本次測試發現,開發板似乎存在USB3.0接口不穩的問題,多重試重啟幾次?_?
二 自己編譯SDK
編譯所需要的文件已經放在百度云(提取碼:li0f )中,在編譯前請提前下載
編譯前需要注意以下幾點:
- 由于編譯過程需要聯網,然而開發板的有線網默認為靜態地址,因此要強行關掉有線網的連接,關閉指令為sudo nmcli device disconnect eth0,eth0為網絡名,可以利用sudo nmcli dev查看。
- 依賴一些包,在安裝前要安裝上sudo apt-get install libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libusb-dev。
- 所需SDK依賴GLFW庫,源碼包已放在上述的百度云中,也可以從https://github.com/glfw/glfw/releases/download/3.3.7/glfw-3.3.7.zip中下載,之后參考博客《Ubuntu18.04安裝glfw3.3》的方式進行安裝。
以上內容是我編譯過程中記錄的一些筆記,可能對丟失一些庫,但是這些都會在系統上提示,根據需求安裝即可。
下面開始編譯Realsense的SDK,下面是操作步驟:
本方法編譯的結果包含C++庫和Python函數包👏
三 使用Realsense
在使用前,一定要輸入sudo rs-enumerate-devices查看設備支持的分辨率以及連接信息。
下面為設備連接信息,可以看到,當前設備識別的USB接口為3.2接口,這樣就可以獲取更大分辨率的RGBD圖像了。
Device info:Name : Intel RealSense L515Serial Number : f0211269Firmware Version : 01.05.08.01Recommended Firmware Version : 01.05.08.01Physical Port : 2-1-2Debug Op Code : 15Product Id : 0B64Camera Locked : YESUsb Type Descriptor : 3.2Product Line : L500Asic Serial Number : 0003a9d3dadaFirmware Update Id : 0003a9d3dada同時記錄,彩色相機和深度相機支持的配置,方便后續相機分辨率的設置。
下面提供獲取RGBD數據的python代碼
from hobot_vio import libsrcampy as srcampy import cv2 import numpy as np import time import pyrealsense2.pyrealsense2 as rs# 這里把前面的HDMI可視化部分的代碼貼上 # 復制類class ImageShow(object)pipeline = rs.pipeline() config = rs.config() ## 這里根據前面sudo rs-enumerate-devices的輸出進行配置 config.enable_stream(rs.stream.depth, 1024, 768, rs.format.z16, 30) config.enable_stream(rs.stream.color, 1920, 1080, rs.format.rgb8, 30) align_to = rs.stream.color alignedFs = rs.align(align_to) profile = pipeline.start(config)####################################### ## 下面是獲取內參的方式 frames = pipeline.wait_for_frames() depth = frames.get_depth_frame() color = frames.get_color_frame() # 獲取內參 depth_profile = depth.get_profile() print('depth_profile:', depth_profile) # <pyrealsense2.video_stream_profile: 1(0) 640x480 @ 30fps 1> print(type(depth_profile)) # <class 'pyrealsense2.pyrealsense2.stream_profile'> print('fps:', depth_profile.fps()) # 30 print(depth_profile.stream_type()) # stream.depth print('', depth_profile.unique_id) # <bound method PyCapsule.unique_id of <pyrealsense2.video_stream_profile: 1(0) 640x480 @ 30fps 1>> color_profile = color.get_profile() print(depth_profile.fps()) print(depth_profile.stream_index()) color_intrin = cvsprofile.get_intrinsics() print(color_intrin) # width: 640, height: 480, ppx: 318.482, ppy: 241.167, fx: 616.591, fy: 616.765, model: 2, coeffs: [0, 0, 0, 0, 0] depth_intrin = dvsprofile.get_intrinsics() print(depth_intrin) extrin = depth_profile.get_extrinsics_to(color_profile) print(extrin)depth_sensor = profile.get_device().first_depth_sensor() depth_scale = depth_sensor.get_depth_scale() print('depth scale: ', depth_scale)#################### # 視頻流展示 im_show = ImageShow() while True:# 獲取圖片幀frameset = pipeline.wait_for_frames()aligned_frames = alignedFs.process(frameset)color_frame = aligned_frames.get_color_frame()depth_frame = aligned_frames.get_depth_frame()if not depth_frame or not color_frame:continuedepth_img = np.asanyarray(depth_frame.get_data())color_img = np.asanyarray(color_frame.get_data())color_img = cv2.cvtColor(color_img, cv2.COLOR_RGB2BGR)depth_bgr = cv2.applyColorMap(cv2.convertScaleAbs(depth_img, alpha=0.03), cv2.COLORMAP_JET)show_img = np.hstack([color_img, depth_bgr])im_show.show(show_img) im_show.close()跑起來之后,在顯示屏上的展示效果如下,能夠有效地獲取目標的RGBD數據。
但是,比較危險的一點,在整體的展示過程中,內存耗用200M,CPU幾乎占滿,這樣很難繼續做其他的工作(這也與RGBD分辨率為1920*1080有關,而且獲取數據這個過程存在大量的線程)。希望后續這個板子能從硬件上對這個SDK進行一個適配,以騰出更多的計算空間給下游算法。
四 小結
花費億點時間,終于完成了realsense的SDK編譯與使用,這意味著這個新板子可應用在更多的場景。希望后續能夠對這個問題進行適配,降低CPU占用,給核心算法留點計算空間→_→。
總結
以上是生活随笔為你收集整理的在旭日X3派开发板上使用Intel Realsense深度相机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java设计一个排队叫号系统_一个简易的
- 下一篇: 【STM32】LED初始化基础以及基本使