其他操作
工控機如何連wifi
當我們工控機從一個環境移動到另一個環境,且新的環境的wifi我們沒有連接過,我們沒有屏幕如何讓工控機連上網呢?
進入工控機的硬盤目錄,進入/etc/netplan/,底下有很多yaml,找到一個最符合下方格式的yaml:
network:
version: 2
wifis:
NM-6f414fe0-2658-48ff-89ee-c7981b87bc96:
renderer: NetworkManager
match:
name: "wlan0"
dhcp4: true
dhcp6: true
access-points:
"EMIS_Vinci_Robocon_5G":
auth:
key-management: "psk"
password: "vinci666"
networkmanager:
uuid: "6f414fe0-2658-48ff-89ee-c7981b87bc96"
name: "EMIS_Vinci_Robocon_5G"
passthrough:
wifi-security.auth-alg: "open"
ipv6.addr-gen-mode: "default"
ipv6.ip6-privacy: "-1"
proxy._: ""
networkmanager:
uuid: "6f414fe0-2658-48ff-89ee-c7981b87bc96"
name: "EMIS_Vinci_Robocon_5G"
將其改為新wifi的名和密碼:
network:
version: 2
wifis:
wlan0:
dhcp4: true
dhcp6: true
access-points:
"EMIS_Vinci_Robocon_5G":
password: "vinci666"
工控機開機即可連上網。
SSH遠程開發
環境準備
1.硬件準備
首先要有一臺工控機(X86小型電腦,專業工控機,樹莓派等等)。
控制系統的硬件載體是具有多樣性的,常用的多是基於ARM、x86等架構的處理器,比如:PC、工控機、樹莓派、NVIDIA Jetson...。不同的處理器都存在一定的優缺點,PC和工控機,處理器性能強大,但是功耗高、體積大、靈活性差,嵌入式系統則反之。對於我們而言,可以根據機器人平臺的電氣、載重、空間以及用途等諸多要素自主選擇合適的控制系統。
無論選用何種處理器,只要是要進行機器人的開發,安裝了ROS或者ROS2,那麼對於開發人員而言,在使用上,沒有任何本質的區別,或者換言之,作為軟件工程師,部分場景下無需關注於硬件的選型。
2.設置固定IP
遠程連接時,不管使用何種工具,需要根據IP地址定位到被連接的主機,再通過賬號和密碼登錄該主機,因此,我們需要先獲取該IP地址。並且每次連接時,都需要使用到IP,為了保證連接的便利性和穩定性,最好將被連接主機的IP地址設置為固定IP,具體操作如下。
1.進入設置界面
啟動被連接的主機(啟動時需要連接顯示器或使用HDMI採集卡,並且配置完SSH遠程訪問之後,可以不再使用顯示器或HDMI採集卡),並進入設置界面。

2.配置所連接的網絡

3.設置固定IP
查看當前IP地址。

設置固定IP。

至此,IP配置完畢。
環境搭建
概念
SSH(Secure Shell)是一種通用的、功能強大的、基於軟件的網絡安全解決方案。計算機每次向網絡發送數據時,SSH都會自動對其進行加密。數據到達目的地時,SSH自動對加密數據進行解密。整個過程都是透明的,使用OpenSSH工具將會增進你的系統安全性。SSH安裝容易、使用簡單。
實現
SSH實現架構上分為客戶端和服務器端兩大部分,客戶端是數據的發送方,服務端是數據的接收方,當前場景下,我們需要從本地主機發送數據到遠程主機,那麼本地主機需要安裝並啟動SSH客戶端,而遠程主機則需要安裝並啟動SSH服務端,整個實現具體流程如下:
- 本地主機安裝SSH客戶端,遠程主機安裝SSH服務端;
- 遠程主機啟動SSH服務;
- 本地主機登陸遠程主機;
- 實現數據傳輸。
1.安裝SSH客戶端與服務端
默認情況下,Ubuntu系統已經安裝了SSH客戶端,因此只需要在遠程主機安裝SSH服務端即可,安裝命令如下:
sudo apt install openssh-server
如果SSH客戶端需要自行安裝,那麼調用如下命令:
sudo apt install openssh-client
2.遠程主機啟動SSH服務
遠程主機啟動 ssh 服務命令如下:
sudo /etc/init.d/ssh start
啟動後可使用如下命令查看服務是否正常運行:
ps -e | grep ssh
如果啟動成功,會包含 sshd 程序。
以後需要頻繁的使用ssh遠程登錄,為了簡化實現,可以將遠程主機的ssh服務設置為開機自啟動,命令如下:
sudo systemctl enable ssh
3.本地遠程登錄
登錄遠程主機可以調用如下命令:
ssh -X 用户名@ip地址
然後根據提示,錄入登陸密碼,即可成功登錄。
如果退出,可以調用exit命令:
exit
4.實現數據傳輸
通過SSH在本地主機只需調用相關指令,便可方便的實現與遠程主機的數據上傳或下載,指令格式如下所示:
上傳文件指令格式如下:
scp 本地文件路径 账号@ip:路径
上傳文件夾指令格式如下:
scp -r 本地文件夹路径 账号@ip:路径
下載文件指令格式如下:
scp 账号@ip:路径 本地文件夹路径
下載文件夾指令格式如下:
scp -r 账号@ip:路径 本地文件夹路径
優化
每次遠程登錄時,都需要輸入密碼,使用不方便,可以藉助密鑰簡化登錄過程,實現免密登錄,提高操作效率。實現思想是:生成一對公鑰私鑰,私鑰存儲在本地,公鑰上傳至服務器,每次登錄時,本地直接上傳私鑰到服務器,服務器有匹配的公鑰就認為是合法用戶,直接創建SSH連接即可。具體實現步驟只有兩步:
- 本地生成密鑰對;
- 將公鑰上傳至遠程主機。
1.生成密鑰對
本地客戶端生成公私鑰:(一路回車默認即可)
ssh-keygen
上面這個命令會在用戶目錄.ssh文件夾下創建公私鑰:
- id_rsa (私鑰);
- id_rsa.pub (公鑰)。
2.公鑰上傳
上傳指令如下:
ssh-copy-id -i ~/.ssh/id_rsa.pub 账号@ip
上面這條指令是將本地公鑰上傳到遠程主機的ssh目錄下,該目錄下有文件authorized_keys保存了公鑰內容。
以後再遠程登錄就無需錄入密碼了。
使用VScode優化
上一節,我們介紹了ssh遠程連接的使用,但是如果只是純粹使用ssh也存在一些不足,比如:編輯文件內容時,需要使用vi編輯器,且在一個終端內,無法同時編輯多個文件。本節將介紹一更為實用的功能——VSCode結合插件實現遠程開發,這使我們可以以圖形化的方式實現遠程開發,比ssh的使用更方便快捷,可以大大的提高程序開發效率。
1.準備工作
VScode遠程開發依賴於ssh,請首先按照上一節內容配置ssh遠程連接。
2.為VScode安裝遠程開發插件
啟動VScode,首先點擊側邊欄的擴展按鈕,然後在扩展:商店的搜索欄輸入Remote Development並點擊同名插件,最後在右側顯示區中點擊安装。

3.配置遠程連接
步驟1:使用快捷鍵ctrl + shift + p打開命令輸入窗口,並輸入Remote-SSH:Connect to Host...,彈出列表中選擇與之同名的選項。

步驟2:步驟1完成將彈出一個新的命令窗口如下,選擇下拉列表中的 Add New SSH Host。

步驟3:步驟2完成又將彈出一個新的命令窗口,在其中輸入:ssh -X ubuntu@192.168.43.164,其中,ubuntu需要替換為你的登錄用戶名,192.18.43.164 則替換為被遠程連接主機的ip地址。

步驟4:選擇步驟3完成後的彈窗列表中的第一個選項(或直接回車),即可完成配置,配置成功後會有提示信息。


4.使用
步驟1:繼續使用快捷鍵ctrl + shift + p打開命令輸入窗口,並輸入Remote-SSH:Connect to Host...,此時列表中將顯示步驟3中配置的ip地址,直接選擇,選擇後,VScode將打開一個新的窗口。

或者,也可以點擊側邊欄的远程资源管理器,在彈出的服務器列表中選擇要連接的服務器,並右擊,選擇在本窗口或新窗口中實現遠程連接。

步驟2:選擇菜單欄的文件下的打开文件夹,在彈窗列表中選擇需要打開的文件夾並點擊確定即可。

最終,我們就可以像操作本地文件一樣實現遠程開發了。
遠程桌面
因為用X11轉發效率太低太低,所以還是要選用遠程訪問桌面的形式來看Rviz2和Gazebo等等(如果有需求的話)
我們選擇使用VNC來看。
- 安裝VNC服務器:
這裡以TigerVNC為例進行安裝:
sudo apt install tigervnc-standalone-server tigervnc-common
- 設置VNC密碼:
為VNC用戶設置密碼,運行以下命令:
vncpasswd
- 配置VNC啟動腳本:
創建VNC配置文件,在用戶家目錄內的.vnc文件夾中創建啟動文件:
mkdir -p ~/.vnc
nano ~/.vnc/xstartup
在打開的編輯器裡面輸入以下內容(以GNOME為例):
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
gnome-session
保存並退出(在nano中按Ctrl + O保存,然後按Ctrl + X退出)。
- 給予執行權限:
為xstartup文件設置執行權限:
chmod +x ~/.vnc/xstartup
- 啟動VNC服務器:
vncserver -geometry 1920x1080 -localhost=0
geometry 選項指定窗口大小,localhost 選項設為 0 以開放連接。(設為1是隻允許本地連接)
你將看到類似於:1的輸出,這表示VNC會話的顯示編號。例如,如果輸出為:1,則VNC監聽的端口為5901(5900 + 顯示編號)。
- 查看已開啟的VNC服務器:
vncserver -list

- 連接到VNC服務器:
使用VNC客戶端(如vncviewer)連接到VNC服務器,輸入你的服務器IP和端口。例如,如果服務器IP為192.168.31.10,且顯示編號為1,你應該連接到192.168.31.10:1,或者直接輸入192.168.31.10:5901。
- 停止VNC服務器:
如果需要停止VNC服務器,可以使用以下命令:
vncserver -kill :1
將:1替換為你實際使用的顯示編號。


USB端口設置
首先先配置好權限
# 将用户权限提高
sudo usermod -aG dialout $USER
newgrp dialout
# 查看下面命令是否输出dialout(若输出才正常)
groups
因為我們插拔USB設備,他的端口號可能會一直變,所以我們要給他的tty起一個固定的別名。
根據USB設備綁定端口(多個不同設備)
需求: Ubuntu系統中現接入雷達和智能小車,請為二者綁定端口。
實現原理: 可以通過USB設備本身的“標識”實現端口綁定。
流程如下:
(1).查找設備idVendor和idProduct
接入兩個USB設備,在終端調用指令lsusb查看顯示系統中以及連接到系統的USB設備信息。

如上圖所示,紅色方框內數據為USB設備,ID後面的1a86:7523分別為USB的idVendor和idProduct(兩個參數之間使用”:“分隔)。
另外:可以通過重新插拔比較的方式確定哪些數據對應接入的USB設備。
(2).編寫映射規則
在/etc/udev/rules.d目錄下新建文件xxx.rules(文件名自定義)
sudo vim /etc/udev/rules.d/xxx.rules
輸入如下內容:
KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="mylidar"
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="mycar"
代碼解釋:
- KERNEL是內核固定名稱,這裡統一是“ttyUSB*”;
- MODE是節點權限,通常改為“0777”,表示可讀寫可運行;
- SYMLINK是符號連接,即綁定的別名;
- ATTRS是設備廠商的唯一標識,idVendor和idProduct正好組成上面通過lsusb查找到的設備ID。
***小提示:***一般的USB設備供應商都會提供類似的腳本文件,對於調用者而言,直接複製該文件到/etc/udev/rule.d目錄即可。
| 設備類型 | 內核名稱示例 | 說明 |
|---|---|---|
| USB 串口設備 | ttyUSB* | USB 轉串口設備,如 /dev/ttyUSB0 |
| 串口設備 | ttyS* | 物理串口設備,如 /dev/ttyS0 |
| 存儲設備 | sd* | SCSI 磁盤設備,如 /dev/sda |
| 網絡設備 | eth* | 以太網設備,如 /dev/eth0 |
| 輸入設備 | event* | 輸入事件設備,如 /dev/input/event0 |
| 藍牙設備 | rfcomm* | 藍牙串口設備,如 /dev/rfcomm0 |
(3).使規則生效
在終端下輸入如下指令:
# Ubuntu用下方命令
sudo service udev reload
sudo service udev restart
#Fedora用下方命令
sudo udevadm control --reload
sudo udevadm trigger
再重新插拔設備即可。
(4).測試
終端下輸入如下指令
ll /dev | grep ttyUSB
運行結果如下:


也可以多次插拔USB設備,會發現設備端口ttyUSBn中的n編號會變動,但是別名是始終可以指向對應的USB設備的。至此,就可以使用別名來關聯所需使用的USB設備了。
缺點:
上述實現也存在一定的侷限性,當Ubuntu接入兩臺或多臺相同型號的USB設備時,由於設備ID是一樣的,該種實現方式只會對其中的一臺設備生效,這種情況下,就需要通過第二種策略來實現端口的綁定了。
根據主機硬件綁定端口(多個相同設備)
需求: 無人車中現接入一前一後兩臺相同型號的雷達,請為二者綁定端口。
實現原理: USB設備所連接主機的USB接口也是有其“標識”的,可以通過這個標識實現端口綁定。
流程如下:
(1).查看所連接的主機USB接口的KERNELS
調用如下指令查看第一臺雷達的USB信息:
udevadm info --attribute-walk --name=/dev/ttyUSB0 | grep KERNELS
udevadm info --attribute-walk --name=/dev/ttyACM0 | grep KERNELS

調用如下指令查看第二臺雷達的USB信息:
udevadm info --attribute-walk --name=/dev/ttyUSB1 | grep KERNELS
運行結果相比較不同的KERNELS,第一臺雷達端口地址為KERNELS==1-1.3:1.0,第二個雷達端口地址為KERNELS==1-1.4:1.0。可以使用此數據作為不同端口的“唯一性標識”。
(2).編寫映射規則
在/etc/udev/rules.d目錄下新建文件xxx.rules(文件名自定義),輸入如下內容:
sudo vim /etc/udev/rules.d/xxx.rules
KERNEL=="ttyUSB*", KERNELS=="1-1.3:1.0", MODE:="0777", SYMLINK+="rplidar_front"
KERNEL=="ttyUSB*", KERNELS=="1-1.4:1.0", MODE:="0777", SYMLINK+="rplidar_back"
(3).使規則生效
在終端下輸入如下指令:
# Ubuntu用下方命令
sudo service udev reload
sudo service udev restart
#Fedora用下方命令
sudo udevadm control --reload
sudo udevadm trigger
再重新插拔設備即可。
(4).測試
終端下輸入如下指令,運行結果如下:
ll /dev | grep ttyUSB

至此,就可以使用別名來關聯所需使用的USB設備了。
缺點: USB設備必須連接在主機的指定端口上,否則,會導致端口綁定失敗,或產生邏輯錯誤。(而且增加新設備可能會導致端口改變)
根據其他屬性綁定端口
(1).查看所連接的主機USB接口的信息
udevadm info -a -p $(udevadm info -q path -n /dev/ttyACM0)
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)

這些數據都是不會變的,所以可以拿這些數據來做標識
(2).編寫映射規則
在/etc/udev/rules.d目錄下新建文件xxx.rules(文件名自定義),輸入如下內容:
sudo vim /etc/udev/rules.d/xxx.rules
KERNEL=="ttyACM*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d4", ATTRS{serial}=="0001", MODE:="0777", SYMLINK+="ttyACM_Lidar"
KERNEL=="ttyACM*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d4", ATTRS{serial}=="0002", MODE:="0777", SYMLINK+="ttyACM_MCU"
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="ttyUSB_IMU"
(3).使規則生效
在終端下輸入如下指令:
# Ubuntu用下方命令
sudo service udev reload
sudo service udev restart
#Fedora用下方命令
sudo udevadm control --reload
sudo udevadm trigger
再重新插拔設備即可,或者 直接重啟系統。
(4).測試
終端下輸入如下指令ll /dev | grep ttyUSB,運行結果如下:

至此,就可以使用別名來關聯所需使用的USB設備了。
缺點: 一些設備可能沒有串口號等。
其他注意事項
並非所有的USB設備端口號都是ttyUSBn的格式,比如Arduino的端口號可能是ttyACMn,而對於USB攝像頭而言,一臺設備則對應兩個端口號,分別是videon和video(n+1),並且啟用攝像頭設備一般使用的是videon端口,綁定時需要關聯的也是該接口。
但是無論是外接何種USB設備,也不管採用上述兩種方案的哪一種進行端口綁定,其原理都是類似的,只是實現細節不同而已。如果是外接的Arduino設備,那麼需要在rules文件中的將KERNEL=="ttyUSB*"修改為KERNEL=="ttyACM*",如果外接的是USB攝像頭,那麼則需要在rules文件中的將KERNEL=="ttyUSB*"修改為類似於KERNEL=="video[0,2,4,6]"的格式,其中video[0,2,4,6]表示可以綁定的端口為video0或video2或video4或video6。
Linux分區Gui工具
sudo apt install gparted
sudo dnf install gparted
掛載內網網頁
可以把本地的網頁掛載到路由器端,或者同內網段其他設備上,甚至可以掛載在本地。
下面以安卓設備為例子,由於安卓設備暫時不能直接打開html,所以我們可以把html掛載到本地服務器,再通過瀏覽器查看。
由於安卓系統基於Linux內核,所以我們可以下載一個叫termux的app來敲一些Linux命令:
https://github.com/termux/termux-app
首先打開app後,先更新軟件緩存:
pkg update
然後換源
nano $PREFIX/etc/apt/sources.list
將該文件內容替換為下面:
deb https://mirrors.bfsu.edu.cn/termux/termux-packages-24 stable main
- 如果你使用的是
nano編輯器:- 按
Ctrl+O保存文件。 - 按
Enter確認文件名。 - 按
Ctrl+X退出編輯器。
- 按
- 如果你使用的是
vim編輯器:- 按
Esc退出編輯模式。 - 輸入
:wq保存並退出。
- 按
接下來重新更新軟件源:
pkg update && pkg upgrade
安裝python:
pkg install python3
通過Termux訪問設備存儲 :
如果文件在安卓設備上,可以使用Termux的文件管理器訪問設備的存儲:
termux-setup-storage
- 進入HTML文件所在的目錄 :
- 使用
cd命令進入HTML文件所在的目錄:
- 使用
cd ~/your_html_folder
- 啟動Python HTTP服務器 :
- 運行以下命令啟動一個簡單的HTTP服務器:
python3 -m http.server 8000- 這會在端口
8000上啟動一個Web服務器。
- 啟動服務器後,Termux會顯示日誌信息,例如:
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
- 這表示服務器已成功啟動。
在瀏覽器中訪問HTML文件
- 在同一設備上訪問 :
- 打開安卓設備上的瀏覽器(如Chrome),輸入以下地址:
http://localhost:8000- 如果HTML文件中有
index.html,它會自動加載;否則,你需要手動點擊文件鏈接。
RustDesk
RustDesk無人值守遠程控制
目前rustdesk還沒辦法進行無人值守在wayland下,所以我們需要把登陸密碼,鎖屏和休眠待機全部關掉.
設置 KDE6 自動登錄
- 可以先查自己的sddm類型
ls /usr/share/xsessions/
ls /usr/share/wayland-sessions/
看哪個會輸出東西,輸出東西的文件夾就是你擁有的sddm,比如xsessions輸出內容的話,那就是x11的sddm,如果wayland-sessions輸出內容的話你就是wayland的sddm.
- 編輯 SDDM 配置:
sudo nano /etc/sddm.conf
在文件最上面有個Autologin,在這個底下加入下面的內容:
[Autologin]
User=你的用户名
Session=plasma.desktop # 或 plasma.desktop(X11),方案一可用 Wayland
- 保存退出後重啟 SDDM:
sudo systemctl restart sddm
✅ 開機後自動進入桌面,無需輸入密碼
關閉鎖屏在 KDE6 系統設置裡:
打開 系統設置 → 屏幕鎖定(Screen Locking) 關閉自動鎖定 關閉屏幕關閉 / 屏幕保護鎖定 這樣 RustDesk 可以開機後直接控制桌面,不會被鎖屏阻擋
關閉休眠系統設置 → 電源管理(Power Managerment)
禁用“休眠”或“自動掛起” 保證電腦開機一直在線,RustDesk 可隨時遠控 如果必須休眠,可在 BIOS 設置裡禁用休眠,保證開機即聯網
RustDesk自建服務器
在服務器端安裝
命令行方式

- 用ssh訪問你需要安裝RustDesk的服務器
ssh tungchiahui@10.0.0.4

- 使用方法二的命令

wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/install.sh
chmod +x install.sh
./install.sh
./install.sh的設置看下一節
- 配置與查看KEY
這裡如果你是想直接用公網ip則選擇1)IP,如果你是DDNS等用域名綁定了IP地址,則選擇2).

這個選2)No

這個是KEY,要複製下來,等後面軟件配置的時候要用.

- 配置防火牆
- 如果你是Debian系 安裝防火牆
sudo apt install ufw
配置防火牆sudo ufw allow 22 ufw allow 21114:21119/tcp ufw allow 21116/udp sudo ufw enable- 如果你是RHEL系 安裝防火牆
# 如果你是RHEL系 sudo dnf install firewalld sudo systemctl enable --now firewalld
配置防火牆sudo firewall-cmd --add-port=22/tcp --permanent sudo firewall-cmd --reload sudo firewall-cmd --add-port=21114-21119/tcp --permanent sudo firewall-cmd --reload sudo firewall-cmd --add-port=21116/udp --permanent sudo firewall-cmd --reload sudo systemctl enable --now firewalld
1Panel方式
- 在面板裡搜RustDesk並安裝

- 配置防火牆

添加幾個端口



- 查看KEY

複製KEY

自建服務器後配置RustDesk軟件
- PC端


出現就緒就是配置成功了

- 移動端


注意的問題
如果你是家庭的內網服務器,則需要讓路由器也放行對應端口
找到openwrt防火牆設置,點擊添加



這樣才可以讓你的服務器端口被真正成功放行.