3.7 linux系統下串口設備和串口號系結
3.7.1 問題由來
?在ROS小車的開發程序中,需要使用ROS通信串口模塊、激光雷達的串口模塊、IMU的串口模塊等,為了防止每次開機這些設備的串口號發生變動,所以需要對串口號與串口設備系結;為了更好的識別串口,我們也可以對串口號進行設定靜態名稱;為了更好的使用串口,我們也可以對串口進行權限設定,
? 一次設定,終身受益,
3.7.2 原理
在linux系統下,雖然每一個固定的埠可能由于外接設備啟動的時間差異分配的ttyUSB*不同,但是對于每一個固定的埠,都有固定的 KERNELS、idProduct、idVendor,并且每一個埠的KERNELS都不相同,
所以,我們只要固定串口設備的安裝位置,還是可以從埠物理性質的不同解決這個問題,
3.7.3 方法
第一步:如何查詢每一個埠的KERNELS、idProduct、idVendor?
這里需要使用下面這條命令
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
并且當每次獨立插入一個串口設備時,串口號總為/dev/ttyUSB0,若不放心,可以使用下面命令查詢
ls /dev | grep ttyUSB
使用第一條命令,視窗將列印一堆設備資訊,我們只需要KERNELS、idProduct、idVendor,我們向下滑找到類似下圖的部分找到該埠的資訊,

注意:查詢埠資訊時,請單獨插入串口設備,
第二步:在/etc/udev/rules.d/目錄下創建自己的99-*.rules檔案
比如這里創建99-robot-usb.rules檔案,使用如下命令
sudo vim /etc/udev/rules.d/99-robot-usb.rules
填入如下內容,保存,根據自己設備的資訊填寫
KERNELS=="3-2", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="robot",MODE:="0777"
對上述的解釋
“==”:比較鍵、值,若等于,則該條件滿足;
“+=”:為一個表示多個條目的鍵賦值,
“:=”:對一個鍵賦值,并拒絕之后所有對該鍵的改動,目的是防止后面的規則檔案對該鍵賦值,
第三步:重啟并查看配置是否生效
重啟
sudo reboot
等待開機,查看埠
ll /dev | grep ttyUSB
中斷列印出如下資訊,設定成功
lrwxrwxrwx 1 root root 7 Sep 20 22:30 robot -> ttyUSB0
crwxrwxrwx 1 root dialout 188, 0 Sep 20 22:30 ttyUSB0
之后我們再使用該物理位置的埠時,它的串口號就固定為 /dev/robot,并且具有可讀可寫可執行的權限,
注意事項:
以上只是對一個埠設定的流程,大家在多數情況下都是多個設備,聰明的你,一定知道怎么舉一反三,
每次獨立插入一個串口設備,獲得它的KERNELS、idProduct、idVendor值,記錄下來;在/etc/udev/rules.d/目錄下創建自己的99-*.rules檔案,一次性填入這些設備的資訊以及你需要的映射的名字;然后重啟即可,
以往鏈接,點擊訪問,
上一篇:搭建ROS小車撰寫啟動功能包
下一篇:ROS機器人開機自啟動設定
系列文章:從零搭建ROS機器人
如果你感覺,我的文章比較適合你,關注我,點個贊,給你不一樣的驚喜,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/104521.html
標籤:其他
