在ROS小車的開發過程中,需要使用ROS通訊串列埠模組、鐳射雷達的串列埠模組、IMU的串列埠模組等,為了防止每次開機這些裝置的串列埠號發生變動,所以需要對串列埠號與串列埠裝置繫結;為了更好的識別串列埠,我們也可以對串列埠號進行設定靜態名稱;為了更好的使用串列埠,我們也可以對串列埠進行許可權設定。
一次設定,終身受益。
在linux系統下,雖然每一個固定的埠可能由於外接裝置啟動的時間差異分配的ttyUSB*不同,但是對於每一個固定的埠,都有固定的 KERNELS、idProduct、idVendor,並且每一個埠的KERNELS都不相同。
所以,我們只要固定串列埠裝置的安裝位置,還是可以從埠物理性質的不同解決這個問題。
這裡需要使用下面這條命令
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
並且當每次獨立插入一個串列埠裝置時,串列埠號總為/dev/ttyUSB0,若不放心,可以使用下面命令查詢
ls /dev | grep ttyUSB
使用第一條命令,視窗將列印一堆裝置資訊,我們只需要KERNELS、idProduct、idVendor,我們向下滑找到類似下圖的部分找到該埠的資訊。
注意:查詢埠資訊時,請單獨插入串列埠裝置。
比如這裡建立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機器人
如果你感覺,我的文章比較適合你,關注我,點個贊,給你不一樣的驚喜。