1. 程式人生 > >在ROS下使用EAI的鐳射雷達YDLIDAR-X4

在ROS下使用EAI的鐳射雷達YDLIDAR-X4

ROS下使用EAI的鐳射雷達YDLIDAR-X4

1、系統環境

ROS2GOU盤 系統:Ubuntu16.04 + ROS Kinetic

鐳射雷達:EAIYDLIDAR X4

 

主要參考文件:

推薦: EAI官方 《YDLIDAR X4 使用手冊》

 

[介紹EAIYDLIDAR-X4鐳射雷達在ROS下使用方法

2018-05-17corvin_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

[ROSSLAM入門教程-鐳射雷達(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

參考:

每天一個linux命令(4):mkdir命令

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 x4ROS下驅動原始碼,該原始碼需要放在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命令都是切換到指定目錄的命令。

不同的是,cdLinux系統的命令,在使用時必須指定目標目錄的完整路徑;

roscdros系統中的,利用包的名字直接切換到相應的檔案目錄下。

 

(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

 

參考資料:

UdevLinux的裝置管理器,動態地建立和刪除節點的硬體裝置。簡而言之,它有助於你的電腦很容易找到你的機器人。

[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:供電不足

EAIX4資料口在一般情況下可以當做供電和資料同時使用,這是我們使用者比較期望的,但是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/

 

樹莓派使用問題

  1. 供電問題
    現象:雷達不轉, 雷達轉幾下停了,雷達正常轉,但是啟動 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*