首頁 > 軟體

ubuntu開機後ROS程式自啟動問題

2022-12-17 14:01:41

平時有用到一些機器人或者帶有ubuntu系統的移動裝置,比如NVIDIA TX2,NVIDIA XAVIA, JetsonNANO,秒算,工控機等等,寫好了程式後,如果想要執行,開機之後還得連線鍵盤滑鼠,顯示器,等程式執行之後還需要重新拔掉鍵盤滑鼠顯示器等等,步驟繁瑣是一部分,還有可能因為反應不及時發生危險,尤其對於無人機等,因此需要設定程式開機自啟動。

一、ubuntu免密開機

路徑:系統設定–使用者設定

二、程式指令碼啟動

可以建立test.sh檔案,將程式所需要執行的指令全部加入sh檔案中。

例如:

#! /bin/bash
gnome-terminal -- bash -c "cd /home/xxx/Desktop/CSDN/test_demo/build;mkdir helloworld" & sleep 5
wait
exit 0

說明:

  • gnome-terminal --bash -c:會開啟一個新的bash終端並執行c後面的語句。linux bash是一個命令處理器,通常執行於文字視窗中,並能執行使用者直接輸入的命令;Bash還能從檔案中讀取命令,這樣的檔案稱為指令碼。語句用’;;’,隔開,最後的sleep 5表示延遲5秒退出,這樣就可以在新的終端看到執行效果,新增這個延時是為了方便驗證是否啟動程式或者節點
  • 如果是ubuntu 18.04以前的系統:gnome-terminal -x bash -c;ubuntu18.04以後的系統輸入:gnome-terminal – bash -c
  • gnome-terminal --tab:同一終端視窗中開啟一個新索引標籤。而是開啟一個新視窗。

三、檔案賦予許可權

chmod指令詳細說明,請參考:【ubuntu】chmod命令

chmod 777 test.sh

四、開機啟動項管理器

gnome-session-properties是ubuntu的開機啟動項管理器。如果之前編寫的sh檔案,不需要sudo許可權,即可將sh檔案加入gnome-session-properties自啟動管理器中即可。

終端輸入:gnome-session-properties

新增執行專案。其中command為你編寫的指令碼路徑,name和comment可以隨意設定。

五、需要SUDO許可權的指令碼開機自啟動

有的時候,我們的裝置連線外部裝置,需要開啟串列埠,甚至是gpio口,這需要使用到許可權,串列埠可以通過新增rules來設定為普通使用者,但是之前在DJIManifold產品上需要程式對GPIO口進行設定,這個時候就需要用到sudo許可權了,因為在進入sudo許可權需要輸入密碼,這就不好完成開機自啟動。

此時就需要利用shell指令碼自動輸入密碼

指令:echo 'password' | sudo -S "./test.sh"

後續還需要做三步操作:

給檔案執行許可權

sudo chmod 777 start.sh

設定指令碼自啟動

gnome-session-properties

保持gnome-terminal視窗執行後不立刻關閉

在測試中會發現,gnome-terminal命令執行完會一閃而過,自行關閉。需要新增read命令,read命令是等待使用者按下回車後使視窗關閉。

gnome-terminal -x bash -c "echo "OK now"; read"  

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com