讀取多超聲波傳感器
該模塊是一個開源模塊,并提供了配套的ROS節(jié)點,接收串口上傳的數(shù)據(jù)并發(fā)布到指定的Topic上面。
目前支持 HC-SR04 、HY-SRF05和US-015這幾個型號超聲波模塊。主要功能如下:
同時讀取12個超聲波模塊數(shù)據(jù),通過串口打包上傳,頻率為20Hz。
提供配套ROS節(jié)點程序,可將測量數(shù)據(jù)發(fā)布到ROS Topic上。
開源ROS節(jié)點程序[3],并提供單片機端hex文件下載,使用其他單片機開發(fā)板也可以輕易使用。
背景
在制作智能小車、自主導航小車的過程中我們通常會使用超聲波來彌補小車的測量盲區(qū),或者直接設計基于超聲波的避障小車。
這其中都涉及到多個超聲波模塊的讀取。一方面我們可以選取市面上已有的串行超聲波模塊通過IIC或者485總線實現(xiàn)多個超聲波級聯(lián)。
但是如下面表格1所示,市面上級聯(lián)的超聲波模塊最便宜的也需要100元一個,這樣12個成本約為1200元。如果使用其他模塊則更貴。
另一方面超聲波在讀取的時候需要頻繁調(diào)用定時器中斷函數(shù)測量回波電平的寬度實現(xiàn)距離的測量。
而這個過程會占用大量的cpu資源,因此我們將這部分功能獨立出來為一個模塊,單獨使用一個單片機去讀取超聲波模塊的數(shù)據(jù)并通過串口轉(zhuǎn)發(fā)出去。
使用教程
2.1 接線說明
如下圖所示,使用模塊時需連接超聲波模塊
P1-P12 為超聲波連接1-12通道
電源輸入電壓為直流5-12V DC-DC圓孔2.5mm
綠色燈為電源指示燈
紅色燈閃爍頻率大約為20Hz 表示正常測量過程
SWD下載接口線序如下圖所示
超聲波接線說明:目前支持 HC-SR04 超聲波模塊
HC-SR04模塊接線如下圖所示:
- 紅色--VCC
- 黑色--GND
- 黃色--Trig
- 綠色--Echo
板子安裝孔位置和外形尺寸如下:
2.2 上傳協(xié)議
數(shù)據(jù)格式為:幀頭+數(shù)據(jù)長度+命令類型+數(shù)據(jù)+校驗+幀尾。數(shù)據(jù)上傳頻率為20Hz,波特率使用115200。
幀頭:固定為兩個字節(jié):0xAE, 0xEE
數(shù)據(jù)長度:為所有字節(jié)的和(包含了幀頭和幀尾)
命令類型:固定為:0xA1
數(shù)據(jù)位:包含12個通道的超聲波測量值,每個通道占用2個字節(jié),共計24字節(jié),采用高位在前方式(大端數(shù)據(jù)模式)發(fā)送,測量數(shù)據(jù)的單位為mm。即為:[CH1_HSB CH1_LSB … CH12_HSB CH12_LSB]
校驗位:所有數(shù)據(jù)位的加和取低八位(包括幀頭和幀尾)
幀尾:固定為兩個字節(jié) 0xEF,0xFE
ROS節(jié)點使用
3.1 下載與配置
安裝依賴項
sudo apt-get install ros-melodic-rosserialcd catkin_ws/srcgit clone https://github.com/RuPingCen/ultrasonic-ros.git
2.編譯代碼
cd catkin_make
3.啟動ROS節(jié)點
roslaunch ultrasonic_ros ultrasonic_ros.launch
啟動節(jié)點以后可以看到終端打印輸出的數(shù)據(jù)
4.使用 echo 命令打印查看超聲波的數(shù)據(jù)
rostopic echo /ultrasonic/data
5.使用 hz 命令查看話題發(fā)布的頻率
rostopic hz /ultrasonic/data
3.3 常見問題-無串口權限
啟動節(jié)點時候提示沒有串口設備或者沒有啟動權限,這時候需要修改串口權限。
step1: 檢查是否識別到USB轉(zhuǎn)串口驅(qū)動
查看設備的ID號 ls /dev/ttyUSB*
這里我們可以通過一個簡單的方式來修改串口權限
sudo chmod 766 /dev/ttyUSB0
上述的方式每次拔插串口以后都需要執(zhí)行修改權限的命令比較麻煩,可以使用我們的腳本文件把串口權限寫入rule文件中。
step2: 用記事本打開“ultrasonic-ros/scripts/ultrasonic.rules” 目錄下的文件,會看到如下內(nèi)容
cd ultrasonic-ros/scriptsgedit ultrasonic.rules
step3: 這里的1a86和7523 就是上面圖中我設備的ID號,這里修改成為你自己的ID號以后,把文件拷貝到/etc/udev/rules.d目錄下就可以使用 /dev/ultrasonic 替代 /dev/ttyUSB0 來訪問模塊了
sudo cp ultrasonic.rules /etc/udev/rules.d/
更新程序
為了使得沒有購買這個板子的小伙伴使用我們的程序,我們提供了Hex文件下載。
通過STLink進行燒寫程序,對照我們提供的原理圖接線也可以實現(xiàn)多個超聲波的讀?。ㄐ枰欢ǖ膭邮帜芰Γ?。板載芯片為STM32F103C8T6。
SWD下載接口線序如下圖所示:
從ST官方的下載燒寫軟件:STM32 ST-LINK uTIlity 4.5.0 安裝時候一直下一步默認即可,安裝完成以后打開軟件,使用STLink連接到STM32板子。
接下來點擊這個插頭一樣的東西(如果沒有識別到就拔插一下STLink下載器)
成功以后就可以看到芯片的信息
接下來選中github網(wǎng)頁中目錄 ultrasonic-ros/reference/hex目錄下的hex文件 ultrasonic_V1.0.0.hex
成功打開以后這兩個地方會有信息提示成功打開文件
接下來點擊燒寫程序
程序下載完成以后扳子上的紅色LED開始閃爍表示程序下載成功了
參考資料:
[1]https://github.com/RuPingCen/ultrasonic-ros/tree/master/reference/hex
[2]https://www.st.com/en/development-tools/stsw-link004.html
[3]https://github.com/RuPingCen/ultrasonic-ros
更多信息可以來這里獲取==>>電子技術應用-AET<<