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 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

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