ubuntu20.04 ROS 環境下使用velodyne鐳射雷達與 Flir 工業相機
持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第12天,點選檢視活動詳情
ROS 環境下使用velodyne鐳射雷達
系統版本:ubuntu 20.04 ROS版本:noetic 鐳射雷達型號:velodyne VLP-16
系統環境配置
安裝ROS依賴
cpp
sudo apt install ros-noetic-velodyne
成功提示:
安裝驅動
cpp
git clone https://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 https://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
即可出現畫面,如下: