在ROS下使用EAI的鐳射雷達YDLIDAR-X4
在ROS下使用EAI的鐳射雷達YDLIDAR-X4
1、系統環境
ROS2GO的U盤 系統:Ubuntu16.04 + ROS Kinetic
鐳射雷達:EAI的YDLIDAR X4
主要參考文件:
推薦: EAI官方 《YDLIDAR X4 使用手冊》
[介紹EAI的YDLIDAR-X4鐳射雷達在ROS下使用方法
於2018-05-17由corvin_zhang釋出](http://www.corvin.cn/686.html)
[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、下載原始碼、編譯並配置環境
(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
(2)進入目錄
cd ~/lidar_ws/src
(3)下載ROS驅動包
方法一、先下載再複製檔案
官網下載X4雷達對應的ROS驅動包,複製到/home/tianbot/lidar_ws/src/ydlidar資料夾下
到百度上輸入EAI,找到EAI玩智商官網:
http://www.eaibot.com/
下載ROS驅動包
將下載好ROS雷達驅動包在windows下解壓並重命名為ydlidar放到src裡,
方法二、直接聯網下載(可能不識別是X4的,聽說驅動可能更新)
從github下載ydlidar x4的ROS下驅動原始碼,該原始碼需要放在ros工作空間下的src目錄下進行編譯,下載命令如下:
git clone https://github.com/EAIBOT/ydlidar.git
(4)編譯程式碼
切換工作空間根目錄 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
(5)新增環境變數
cd ~/lidar_ws
source devel/setup.bash
echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
新增 ydlidar 環境變數到~/.bashrc 檔案中,並使其生效,重新整理配置
永久新增配置,輸入以下命令就可以不用一直重複source:
echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bash
重新整理配置:source ~/.bashrc
以防萬一還是再source當前環境:source ~/lidar_ws/devel/setup.bash
“直接使用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系統中的,利用包的名字直接切換到相應的檔案目錄下。
(6)新增udev規則(非必須)
cd ~/lidar_ws/src/ydlidar/startup
sudo ./initenv.sh
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)
os專案使用usb介面串列埠通訊的感測器時,我們都希望有個固定的裝置名供程式呼叫。
由於usb為即插即用裝置,節點註冊的ID不同,會導致裝置名稱會不同。
linux系統下如何讓系統繫結固有的usb裝置,使用設定好的裝置名稱?如何永久修改裝置許可權?
解決辦法:編寫規則檔案,放到系統配置路徑下,進行設定後,即可一勞永逸。
[ros使用usb硬體,呼叫固定裝置名修改裝置許可權的設定方法](https://blog.csdn.net/qq_38288618/article/details/77839305)
(7)建立別名,執行指令碼
為 X4 的串列埠增加一個裝置別名 /dev/ydlidar
方法一、直接用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 才生效
(8)開啟lidar.launch檔案,更改雷達對應波特率為128000
備註:官方手冊說要改,lidar.launch檔案路徑在 /home/tianbot/lidar_ws/src/ydlidar/launch開啟 lidar.launch,
修改<param name="baudrate" type="int" value="128000"
樹莓派的地址如下:
/home/corvin/lidar_ws/src/ydlidar/launch
修改lidar.launch檔案後,先另存到其它目錄,再拷貝過來(貌似不能直接替換)
其它方法:ubuntu中呼叫VIM命令直接修改(未測試成功)
命令列修改(按insert修改,esc退出,:wq 儲存,未成功)
cd ~/lidar_ws/src/ydlidar/launch
vim lidar.launch
以下
<param name="baudrate" type="int" value="128000"
備註 1: 雷達型號對應波特率: G4 : 230400 X4 : 128000 F4 : 153600
3、執行鐳射雷達
電腦Ubuntu系統中,執行雷達並用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、問題及解決
錯誤問題1:供電不足
EAI的X4資料口在一般情況下可以當做供電和資料同時使用,這是我們使用者比較期望的,但是X4對於某些主控比如樹莓派就不行,必須單獨供電,也就是說如果你拿樹莓派跑的話,需要一條單獨供電的線和一條資料線
錯誤問題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/
樹莓派使用問題
- 供電問題
現象:雷達不轉, 雷達轉幾下停了,雷達正常轉,但是啟動 lidar.launch過程中有提示
錯誤提示[ERROR] [1543845072.458324094]: start YDLIDAR is failed! Exit!!
解決方法:充電寶好像不行(自動斷電?),要找個比較穩定的電源介面卡。
https://github.com/EAIBOT/ydlidar/issues/12
2、RViz不顯示點雲圖像
啟動鐳射雷達EAI YDLIDAR X4後,查詢有資料(rosrun ydlidar ydlidar_client),但是在RViz中沒有影象,解決辦法是改變顯示方式:把Style 從Squares改成 Points,就顯示了。
問題解決:把Style 從Squares改成 Points就顯示
5、查詢鐳射雷達資料及其釋出的訊息
rosmsg show sensor_msgs/LaserScan
查詢雷達輸出話題:rostopic echo -n1 /scan
(下面這個命令少了 –n1,會不停地重新整理資料)
[ROS中釋出鐳射掃描訊息]( https://www.cnblogs.com/21207-iHome/p/7840129.html)
通過 rostopic hz /scan 命令檢視鐳射資料釋出頻率
插入USB後在終端中輸入以下命令檢視USB轉串列埠裝置:ls /dev/tty*