ubuntu20.04 ROS 環境下使用velodyne鐳射雷達與 Flir 工業相機

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第12天,點選檢視活動詳情

ROS 環境下使用velodyne鐳射雷達

系統版本:ubuntu 20.04 ROS版本:noetic 鐳射雷達型號:velodyne VLP-16

系統環境配置

安裝ROS依賴

cpp sudo apt install ros-noetic-velodyne 成功提示: 在這裡插入圖片描述 安裝驅動

cpp git clone http://github.com/ros-drivers/velodyne.git 成功提示: 在這裡插入圖片描述 將功能包考在ros 的工作空間下面,然後進行編譯。 cpp catkin_make

硬體連線

找個電源介面卡,9-18v給雷達供電。雷達連線其聯結器,網口接到ROS的工控機上即可 在這裡插入圖片描述

網口配置

將工控機的網口配置為

ipv4,方式設定為手動 ip地址、掩碼以及閘道器設定成下圖 在這裡插入圖片描述 其中地址 不能為 192.168.1.201 ,這個是雷達的地址

執行驅動程式

cpp roslaunch velodyne_pointcloud VLP16_points.launch

通過rostopic list檢視當前訊息名稱

cpp rostopic list 在這裡插入圖片描述 其中 /velodyne_points 就是 鐳射雷達釋出的點雲訊息。

通過rviz視覺化點雲

終端輸入rviz,開啟該軟體 cpp rviz

Fiex Frame 寫入 velodyne

新增 PointCloud2

Topic 選擇 /velodyne_points

之後即可看到點雲

在這裡插入圖片描述

ROS 環境下使用Flir Blackfly S 工業相機

系統版本:ubuntu 20.04 ROS版本:noetic 工業相機型號:BFS-U3-16S2C-CS

Flir Blackfly 官網:網址 Spinnaker C++ API 網址

Flir Blackfly S USB3 產品介紹

Blackfly S 採用業內先進的冰塊外形感測器。 具有強大功能,可以輕鬆生成所需的精確影象,並加速應用程式開發。 包括對影象捕獲和相機預處理的自動和精確手動控制。 Blackfly S 提供GigE、USB3、套裝和板級版本。 精確影象 索尼CMOS感測器中的選擇包括:全域性快門、偏振和高靈敏度BSI感測器。

實物圖如下: 在這裡插入圖片描述 使用的型號為:BFS-U3-16S2C-CS

其主要引數如下: 在這裡插入圖片描述

安裝 Spinnaker

Spinnaker SDK的下載地址: 地址

但是隻能找到2.x版本的

Spinnaker2及以上,安裝後不再系統include資料夾中新增標頭檔案,影響驅動“”對檔案的索引。

注意安裝完畢後,檔案是在 /opt 資料夾中

如果用 flir_adk_ethernet 功能包 怎會出現 找不到標頭檔案的情況。 如果能找到 Spinnaker1.x 版本的,這個功能包則可以用。

安裝Spinnaker 在下載的資料夾找到install_spinnaker.sh這個檔案,然後在其路徑下開啟終端,輸入 cpp sudo sh install_spinnaker.sh 安裝提示安裝即可。

安裝 spinnaker_sdk_camera_driver 功能包

由於安裝的 2.x版本的 Spinnaker 所以 最好 選擇 這個功能包 ,省去配置路徑的很多麻煩。

該功能包對於 x86_64 的電腦 需要 安裝如下依賴 - unwind-dev - ros-noetic-cv-bridge - ros-noetic-image-transport

通過如下指令安裝 依賴 cpp sudo apt install libunwind-dev ros-noetic-cv-bridge ros-noetic-image-transport

從github上下載功能包

cpp git clone http://github.com/neufieldrobotics/spinnaker_camera_driver.git 放到ros的工作空間編譯

cpp catkin_make 好了,如果是 ubuntu 18.04 之前的版本應該沒問題

但是我的是 ubuntu 20.04 版本的,編譯報錯了

提示 ,在 std_include.h 檔案中找不到 cv.h檔案

原因就是 ubuntu 20.04 的opencv版本是 v4的,版本不匹配造成的。

此時需要對功能包原始碼進行一定修改

開啟 std_include.h 檔案,刪掉 第 9行

cpp 9 - #include <cv.h> 開啟 capture.cpp 檔案 ,修改 第 1000 行

cpp if (LIVE_)namedWindow("Acquisition", CV_WINDOW_NORMAL | CV_WINDOW_KEEPRATIO); cpp if (LIVE_)namedWindow("Acquisition", WINDOW_NORMAL | WINDOW_KEEPRATIO); 將上面的改為下面的

修改 第 1049 行

cpp int key = cvWaitKey(1);

cpp int key = waitKey(1); 將上面的改為下面的

修改 第 1073 行 cpp cvDestroyAllWindows(); cpp destroyAllWindows(); 將上面的改為下面的

修改 第 1101 行 cpp cvDestroyAllWindows(); cpp destroyAllWindows(); 將上面的改為下面的

然後再編譯即可成功!

增加USB3.0的頻寬限制

預設的,在Linux系統中,USB-FS 僅有16MB的頻寬對於所有的USB裝置。對於高幀率相機來說這個頻寬就太少了,並且如果相機的解析度很高,或者同時接多個相機,那麼都需要增大其頻寬限制。

在安裝 Spinnaker 的時候 會 自動的 設定 頻寬。 如果想確定成功沒有,可以開啟 /etc/rc.local檔案,如果沒有這個檔案,肯定沒有設定成功。 有這個檔案的話,開啟,看最後有沒有下面這句話:

sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'

如果有,那麼設定應該成功了。還可以通過如下指令檢視

cat /sys/module/usbcore/parameters/usbfs_memory_mb 設定成功,終端如下: 在這裡插入圖片描述 如果沒有成功,可以執行

sudo sh configure_usbfs.sh 這個指令碼。

也可以手動設定這個頻寬,方法如下: 首先 新增 rc.local 檔案,並附權 $ sudo touch /etc/rc.local $ sudo chmod 744 /etc/rc.local 在最後新增下面這個句 sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb' 然後儲存,重啟裝置。用上面的檢測方法檢查下,失敗的話用下面的

$ sudo sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb' 如果用多個相機的話,那麼可能要超過1000

硬體連線

在這裡插入圖片描述

修改相機id號

相機本身自己有一個8位的id號,在相機的下部。這個id號要填到 test_params.yaml 檔案中 cam_ids: master_cam: 改這兩個值

啟動驅動

roslaunch spinnaker_sdk_camera_driver acquisition.launch 然後可以檢視當前 訊息 名稱

rostopic list 在這裡插入圖片描述

/camera_array/cam0/image_raw 就是影象的訊息

rostopic hz /camera_array/cam0/image_raw 可以檢視其頻率 在這裡插入圖片描述

rviz檢視影象

啟動rviz

rviz

新增 image 功能選單,然後Image Topic 選擇/camera_array/cam0/image_raw

即可出現畫面,如下: 在這裡插入圖片描述