樹莓派&ROS:驅動EAI的激光雷達YDLIDAR-X4
【目錄】
- 2.3、編譯代碼
- 3、運行激光雷達
- 4、問題及解決
1、硬件環境與背景介紹
1.1、硬件配置環境
ROS2GO的U盤 系統:Ubuntu16.04 + ROS Kinetic
激光雷達:EAI的YDLIDAR X4
樹莓派:系統 Raspbian Stretch系統的ROS Kinetic版
參考【發佈v1.0版本基於Stretch的ROS Kinetic完整版樹莓派3B+鏡像】
1.2、激光雷達:YDLIDAR-X4
(1)基本參數
激光雷達候選:
1)EAI YDLIDAR X4 :
安裝:數據線接口是水平方向,方便接線;
電源:轉接板有專門的電源接口(一個USB口接數據,一個USB口接電源)。
2)思嵐科技 RPLIDAR A1
安裝:數據和電源接口,朝向爲向下,安裝時要注意,容易卡住。
電源:供電和數據線是在一個usb口裏面,如果供電不足,會影響雷達工作。
3)參數對比
掃描頻率:電機轉速可調,Hz。
(2)激光雷達的固定
雷達原來的固定支柱,塑料,螺紋孔不通用(好像是M2.5)
被我改成了M3的螺柱(雖然不是塑料絕緣的,但影響不大),這樣後期把底座固定在打孔的木板上,選擇螺絲更方便。
1.3、主要參考文檔:
推薦: 《EAI官方 《YDLIDAR X4 使用手冊》
[介紹EAI的YDLIDAR-X4激光雷達在ROS下使用方法]
[ROS與激光雷達入門教程-ROS中使用激光雷達(EAI F4)]
https://www.ncnynl.com/archives/201702/1362.html
[EAI激光雷達X4使用hector_slam建圖(一)]
https://blog.csdn.net/zhu751191958/article/details/78969825
《EAI官方文檔《YDLIDAR ROS 使用手冊.pdf》
[ROS與SLAM入門教程-激光雷達(EAI F4)gmapping構建地圖]
https://www.ncnynl.com/archives/201702/1363.html
2、下載源碼、編譯並配置環境
2.1、建立工作空間
mkdir -p ~/lidar_ws/src
注意: 一個工作空間不要放太多驅動,否則編譯時可能會系統卡死。
新建一個lidar_ws的工作空間: mkdir -p ~/lidar_ws/src
自動生成文件夾目錄 /home/tianbot/lidar_ws/src
如果用eai的多種不同雷達,工作空間命名還可以更加細化,如建立X4激光雷達的制定工作空間 eaix4_ws : mkdir -p ~/eaix4_ws/src
建立通用的工作空間 catkin_ws: mkdir -p ~/catkin_ws/src
參考:
http://www.cnblogs.com/peida/archive/2012/10/25/2738271.html
進入進入工作空間目錄下
cd ~/lidar_ws/src
2.2、下載ROS驅動包
方法一、先下載再複製文件
官網下載X4雷達對應的ROS驅動包,複製到/home/tianbot/lidar_ws/src/ydlidar文件夾下
到百度上輸入EAI,找到EAI玩智商官網:
下載ROS驅動包
將下載好ROS雷達驅動包在windows下解壓並重命名爲ydlidar放到src裏,
方法二、直接聯網下載(可能不識別是X4的)
從github下載ydlidar x4的ROS下驅動源碼,該源碼需要放在ros工作空間下的src目錄下進行編譯,下載命令如下:
git clone https://github.com/EAIBOT/ydlidar.git
2.3、編譯代碼
切換工作空間根目錄 cd ~/lidar_ws
編譯整個工作空間 catkin_make
注意:編譯時候,注意目錄下src文件中是否有其他代碼,若代碼太多,容易編譯失敗,系統司機卡住
方法二、編譯生成 ydlidar_node 和 ydlidar_client。
$catkin_make --pkg ydlidar
參考:
首先切換到自己的ROS工作空間: $ cd ~/catkin_ws
如果你想編譯整個工作空間裏面的包:$ catkin_make
如果你只想編譯工作空間某一個包:$ catkin_make -DCATKIN_WHITELIST_PACKAGES= "包名"
例如:$ catkin_make -DCATKIN_WHITELIST_PACKAGES="beginner_tutorials"
原文: https://blog.csdn.net/qingdu007/article/details/51483065
2.4、添加環境變量
添加 ydlidar 環境變量到~/.bashrc 文件中,並使其生效,刷新配置。
(切換目錄 cd ~/lidar_ws)
(1)永久添加配置,以後就不用重複source刷新配置。
方法一(推薦)、使用echo命令 和 >>指令向文件追加內容,原內容將保存:
$ echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bash
方法二、打開文件,在~/.bashrc最後,手動添加添加一行以下內容:
source ~/lidar_ws/devel/setup.bash
(2)刷新配置
$ source ~/.bashrc
或 $ rospack profile
以防萬一還是再source當前環境:
source ~/lidar_ws/devel/setup.bash
打開文件 source devel/setup.bash
添加一行配置 echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bashrc
刷新配置 source ~/.bashrc
操作步驟(方法二)、直接使用roscd指令切換到自己的程序包目錄
cd ~/lidar_ws
source devel/setup.bash(是否需要?)
echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
roscd ydlidar(是否需要?)
參考:
【ROS學習筆記-roscd指令】
https://blog.csdn.net/jimjarry/article/details/78983675
備註:cd命令和roscd命令都是切換到指定目錄的命令。
不同的是,cd是Linux系統的命令,在使用時必須指定目標目錄的完整路徑;
而roscd是ros系統中的,利用包的名字直接切換到相應的文件目錄下。
2.5、爲USB設備創建別名
爲 X4 的串口增加一個設備別名 /dev/ydlidar,添加udev規則
方法一、直接用roscd命令進入目錄
$roscd ydlidar/startup
備註:注意觀察目錄是否錯誤
使腳本文件獲得權限
$sudo chmod 0777 *
運行腳本文件
$sudo sh initenv.sh
方法二、
#進入驅動包的startup目錄下:
#cd ~/lidar_ws/src/ydlidar/startup
使.sh腳本文件獲得權限:
sudo chmod +x initenv.sh
直接運行腳本文件:
sudo sh initenv.sh
注意:創建別名後, 重新插拔 USB 才生效
插入USB後,在終端中輸入以下命令,查看USB轉串口設備:
ls /dev/tty*
列出USB設備:
ls -l /dev/ttyUSB*
ls -l /dev/ydlidar
原理:
以後就不用來看雷達掛載點是ttyUSB0還是ttyUSB1這些了,因爲每次開機時usb設備的加載順序是隨機的,這樣就導致掛載點也隨機,爲了保證我們的啓動雷達的代碼統一,因此就需要爲該設備配置一個別名,該udev配置規則腳步放在ydlidar/startup目錄下名字是initenv.sh
參考資料:
Udev是Linux的設備管理器,動態地創建和刪除節點的硬件設備。簡而言之,它有助於你的電腦很容易找到你的機器人。
【原ROS 簡單的udev rules】
https://blog.csdn.net/u011118482/article/details/52442403
Ros項目使用usb接口串口通訊的傳感器時,我們都希望有個固定的設備名供程序調用。
由於usb爲即插即用設備,節點註冊的ID不同,會導致設備名稱會不同。
linux系統下如何讓系統綁定固有的usb設備,使用設定好的設備名稱?如何永久修改設備權限?
解決辦法:編寫規則文件,放到系統配置路徑下,進行設置後,即可一勞永逸。
【ros使用usb硬件,調用固定設備名修改設備權限的設置方法】
https://blog.csdn.net/qq_38288618/article/details/77839305
2.6、修改波特率
打開lidar.launch文件,更改雷達對應波特率爲128000
備註:官方手冊說要改,其它文檔沒看到,lidar.launch文件路徑在 /home/tianbot/lidar_ws/src/ydlidar/launch
打開 lidar.launch,更改不同型號雷達對應的波特率,以下爲 X4 的配置。
命令行修改(按insert修改,esc退出,:wq 保存,未成功)
cd ~/lidar_ws/src/ydlidar/launch
vim lidar.launch
以下
備註 1: 雷達型號對應波特率: G4 : 230400 X4 : 128000 F4 : 153600
3、運行激光雷達測試
新終端,運行roscore
$ roscore
新終端,運行雷達X4並用Rviz將數據可視化:
$ roslaunch ydlidar lidar_view.launch
或者,打開一個終端,啓動雷達掃描測距:roslaunch ydlidar lidar.launch
再打開新終端,查看激光雷達的數據:rosrun ydlidar ydlidar_client
樹莓派Raspbian 系統中,好像也沒必要先運行 lidar.launch,直接運行lidar_view.launch就可以了。
備註:先保證 roscd運行在正確目錄下 roscd ydlidar,然後再啓動roslauch
4、問題及解決
4.1、供電不足導致雷達無法正常運行
EAI的X4數據口在一般情況下可以當做供電和數據同時使用,這是我們用戶比較期望的,但是X4對於某些主控比如樹莓派就不行,必須單獨供電,也就是說如果你拿樹莓派跑的話,需要一條單獨供電的線和一條數據線
樹莓派使用問題
供電問題
現象:雷達不轉, 雷達轉幾下停了,雷達正常轉,但是啓動 lidar.launch過程中有提示
錯誤提示[ERROR] [1543845072.458324094]: start YDLIDAR is failed! Exit!!
解決方法:充電寶好像不行(自動斷電?),要找個比較穩定的電源適配器。
https://github.com/EAIBOT/ydlidar/issues/12
4.2、無法加載ydlidar節點
ERROR: cannot launch node of type [ydlidar/ydlidar_node]:
can't locate node [ydlidar_node] in package [ydlidar]
無法加載節點的原因,可能是多次編譯,ros命令尋找文件位置時發生錯誤。
解決方法:“直接使用roscd指令切換到自己的程序包目錄”
cd ~/lidar_ws
source devel/setup.bash
echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
先保證 roscd運行在正確目錄下
roscd ydlidar
然後再啓動roslauch
roslaunch ydlidar lidar_view.launch
參考:
https://answers.ros.org/question/145801/cant-locate-node-in-package/
4.3、RViz不顯示點雲圖像
啓動激光雷達EAI YDLIDAR X4後,查詢有數據(rosrun ydlidar ydlidar_client),但是在RViz中沒有圖像,解決辦法是改變顯示方式:把Style 從Squares改成 Points,就顯示了。
問題解決:把Style 從Squares改成 Points就顯示
4.4、USB不識別
現象:[ERROR] [1553706336.319141339]: YDLIDAR Cannot bind to the specified serial port /dev/ydlidar
查詢:查看USB轉串口設備:ls /dev/tty*,無 ttyUSB*
連接Windows電腦,不識別COM口
原因: USB線質量太差,換一根好點的(粗一點),就能識別USB了
5、查詢激光雷達數據及其發佈的消息
rosmsg show sensor_msgs/LaserScan
查詢雷達輸出話題:rostopic echo -n1 /scan
(下面這個命令睡少了 –n1,會不停地刷新數據)
[ROS中發佈激光掃描消息]( https://www.cnblogs.com/21207-iHome/p/7840129.html)
通過 rostopic hz /scan 命令查看激光數據發佈頻率