運行Linux的機器人啟動緩慢

運行Linux的機器人啟動緩慢

我正在使用一個機器人平台(用於 RoboCup 競賽),我們運行 Ubuntu Server 13.10。在比賽期間,我們的機器人能夠盡快啟動至關重要。更重要的是,如果機器人在跌倒時重新啟動,那麼機器人在被帶離場地之前有 10 秒的時間恢復活力。

目前啟動時間約為 15 秒,我想知道如何縮短該時間。希望我也能學到一些東西。

這是完整的輸出dmesg我認為這有助於分解每個時間步驟中發生的情況。輸出中存在一些差距:

  • 0.41 時約有 0.8 秒的間隙
  • 3.64 時有大約 2.8 秒的差距
  • 9.67 時有大約 0.8 秒的差距
  • 12.9 時有大約 1.4 秒的差距

eth雖然不是必需的wlan

任何人都可以將其解碼為可操作的建議,以了解如何更快地啟動該機器人嗎?如果這些訊息中沒有足夠的信息,我還可以嘗試進一步調查什麼?


編輯我修改了我的二進位(它作為新貴作業自動啟動)以寫入系統日誌。它顯示,從通電後第一筆記錄的訊息開始:

Oct 30 12:51:52 darwin6 kernel: imklog 5.8.11, log source = /proc/kmsg started.
....
Oct 30 12:52:12 darwin6 kernel: [   34.276716] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Oct 30 12:52:13 darwin6 dhclient: Internet Systems Consortium DHCP Client 4.2.4
Oct 30 12:52:13 darwin6 dhclient: Copyright 2004-2012 Internet Systems Consortium.
Oct 30 12:52:13 darwin6 dhclient: All rights reserved.
Oct 30 12:52:13 darwin6 dhclient: For info, please visit https://www.isc.org/software/dhcp/
Oct 30 12:52:13 darwin6 dhclient: 
Oct 30 12:52:13 darwin6 dhclient: Listening on LPF/wlan0/00:0d:f0:95:0d:4d
Oct 30 12:52:13 darwin6 dhclient: Sending on   LPF/wlan0/00:0d:f0:95:0d:4d
Oct 30 12:52:13 darwin6 dhclient: Sending on   Socket/fallback
Oct 30 12:52:13 darwin6 dhclient: DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 3 (xid=0x3cd422f3)
Oct 30 12:52:13 darwin6 dhclient: DHCPREQUEST of 192.168.0.3 on wlan0 to 255.255.255.255 port 67 (xid=0x3cd422f3)
Oct 30 12:52:13 darwin6 dhclient: DHCPOFFER of 192.168.0.3 from 192.168.0.1
Oct 30 12:52:13 darwin6 avahi-daemon[833]: Joining mDNS multicast group on interface wlan0.IPv6 with address fe80::20d:f0ff:fe95:d4d.
Oct 30 12:52:13 darwin6 avahi-daemon[833]: New relevant interface wlan0.IPv6 for mDNS.
Oct 30 12:52:13 darwin6 avahi-daemon[833]: Registering new address record for fe80::20d:f0ff:fe95:d4d on wlan0.*.
Oct 30 12:52:14 darwin6 dhclient: DHCPACK of 192.168.0.3 from 192.168.0.1
Oct 30 12:52:14 darwin6 avahi-daemon[833]: Joining mDNS multicast group on interface wlan0.IPv4 with address 192.168.0.3.
Oct 30 12:52:14 darwin6 avahi-daemon[833]: New relevant interface wlan0.IPv4 for mDNS.
Oct 30 12:52:14 darwin6 avahi-daemon[833]: Registering new address record for 192.168.0.3 on wlan0.IPv4.
Oct 30 12:52:14 darwin6 dhclient: bound to 192.168.0.3 -- renewal in 41314 seconds.
Oct 30 12:52:21 darwin6 ntpdate[1294]: adjust time server 91.189.94.4 offset -0.243167 sec
Oct 30 12:52:46 darwin6 kernel: [   68.451644] perf samples too long (2504 > 2500), lowering kernel.perf_event_max_sample_rate to 50000
Oct 30 12:53:49 darwin6 boldhumanoid[1455]: Starting boldhumanoid process

奇怪的是我還用秒錶計時。從開啟電源到我的進程啟動(機器人啟動)只花了 35 秒。根據時間戳,似乎有什麼原因導致系統日誌寫入進一步延遲 100 秒。

答案1

我不確定 Ubuntu 的伺服器安裝是否真的是正確的方法,因為你所描述的聽起來像是 archlinux 的工作或與我類似。

您將需要對系統進行大量自定義,此時「採用基本系統並添加所需的任何內容」方法比「使用成熟的安裝並刪除任何不必要的內容(例如 apport、apparmor、dhcp)更容易.. .)“ 一。

但無論如何,實際上有一個 wiki 條目是關於減少啟動時間的。這些命令可能無法為您的 Ubuntu 系統進行 1to1 轉換,但此條目可能會為您指明正確的方向:

https://wiki.archlinux.org/index.php/Improve_boot_performance

抱歉,但是減少特定於設備的啟動時間並不是 askubuntu 上一個簡單的答案所能解決的,您必須查看啟動例程中的每個項目,並決定是否有必要,並相應地禁用系統組件。

答案2

這是您基本上開始減法的應用程式之一,直到破壞某些東西然後退出。例如,我認為您的機器人可能不會使用 Zeroconf(即 avahi 守護程式),因此請將其卸載。你真的需要網路嗎?或者更好的是,啟動到單一使用者模式(將 1 附加到核心命令列),然後查看在應用程式開始工作之前必須打開多少服務。

答案3

您屬於哪個尺寸組?我意識到這可能不是您在這裡尋找的答案,但對於時間關鍵的事情,例如在 10 秒內站起來,我會選擇嵌入式平台。

如果您有空間/功率預算,您應該考慮在機器人上安裝諸如 arduino 之類的東西,並編寫一些開環站立行為。主機板上還是可以用ubuntu的。我建議這樣的事情:

  • 有一個 arduino(或類似的)從 ubuntu 伺服器接收定期心跳訊號
  • 如果超過 X 個心跳間隔,arduiono 就會接手控制權,並重新啟動伺服器
  • arduino 可以直接驅動馬達(或透過您正在使用的任何馬達控制器)並發出站立命令,這允許機器人在主系統啟動時「恢復」並且不會被取消資格
    • 預先編程一些站立行為,可能基於機器人面向的方向,然後根據加速度計選擇其中之一
    • 如果你不屬於有腿的部門之一,那麼只需在 ardiuno 上編寫一些俗氣的程式碼,使其看起來像是機器人在伺服器啟動時正在做某事
  • 一旦系統啟動,它會發送另一個心跳,arduino可以釋放控制權

這裡有一些答案可以幫助您縮短啟動時間(基本上將其關閉,直到損壞為止),但即使如此,如果斷電是一個足夠常見的問題,那麼類似的事情可能會非常有幫助。

答案4

嘗試將儲存緩衝區減少到 4 MB。在/etc/sysctl.conf中寫入:

vm.dirty_bytes = 4194304 vm.dirty_background_bytes = 1048576

也可能將寫入時間減少到 3 秒

vm.dirty_expire 厘秒 = 300 vm.dirty_writeback_centisecs = 300

如果這有幫助或沒有幫助,請發表評論。謝謝。

相關內容