跳至內容
測試伺服器
開發伺服器

入門指南 (Smart blaze)#

本主題說明如何安裝與設定 Smart blaze 相機。

有關 Smart blaze 相機的初始設定與 IP 設定資訊,請參閱 Camera Installation (blaze) 主題。

資訊

在本說明文件中,請將 ${cameraip} 替換為您使用以下項目設定的 IP 位址: pylon IP Configurator。為求便利,您可以將以下行新增至 ~/.bashrc 電腦上的檔案(請將 IP 位址替換為您的實際 IP 位址):

export cameraip=192.168.1.123

這可讓您直接從本主題複製並貼上指令至終端機中,而無需進行修改。新增此行後,別忘了重新載入您的設定:

source ~/.bashrc

相機設定與 IP 配置#

存取 Smart blaze VM 網頁介面#

Smart blaze 出廠時隨附一個基於 Debian Trixie 的預設虛擬機器。

您可以使用 Smart blaze VM Control 網頁介面來控制 VM 並檢查其狀態。若要存取網頁介面,請在終端機中輸入以下命令:

xdg-open http://${cameraip}

這應該會開啟您的預設網頁瀏覽器並顯示 Smart blaze VM Control 登入網頁介面。請輸入預設密碼以登入。預設密碼可以在相機上的標籤找到。基於安全考量,Basler 建議在首次登入後變更密碼。請按一下網頁介面中的 Change Password 按鈕來執行此操作。

輸入目前密碼後,將顯示 Smart blaze VM Control 網頁介面:

Smart blaze VM Control 網頁介面

在 VM 執行時,狀態資訊應顯示 kvm_machine.service 已載入且為啟用狀態。資訊區域應包含字串 Active: active (running)。

首次使用預設 VM 之前,您必須在彈出的訊息對話方塊中手動確認啟動。

指派 IP 位址給 VM#

根據預設,VM 會嘗試透過 DHCP 取得 IP 位址。如果相機直接連接到您的電腦且沒有可用的 DHCP 伺服器,此操作將會失敗。在這種情況下,請使用 Smart blaze VM Control 網頁介面手動設定靜態 IP 位址。

  1. 在手動設定 IP 位址時,請在 IP Address 輸入欄位中使用以下格式輸入 IP 位址:
    a.b.c.d/maskbits
    結尾的遮罩位數位值定義了子網路遮罩中設定的位元數。範例:
    當輸入 192.168.1.127/24 時,會對 VM 套用以下設定:
    IP 位址:192.168.1.127
    子網路遮罩:255.255.255.0

  2. 若要手動設定 IP,請以以下格式輸入主要和次要網域名稱伺服器 (DNS),或者將其留空:
    a.b.c.d

  3. 請以以下格式輸入閘道,或者將其留空:
    a.b.c.d
    如果您將欄位留空,則會使用由 DHCP 提供的閘道。如果您輸入數值,則會將該閘道用於手動 IP 設定。

顯示用於 DHCP 設定的目前 IP 位址#

如果您有運作正常的 DHCP 設定,VM 會自動從 DHCP 伺服器取得 IP 位址。若要確定指派的 IP 位址,您有多種選項:

如果在 VM 上安裝了 qemu-guest-agent 套件,Smart blaze VM Control 網頁介面便能自動顯示 VM 目前的 IP 位址。qemu-guest-agent 是一個在客端 VM 內執行的輔助精靈常駐程式,可為主機系統提供有關客端 VM 的資訊,包括網路設定。

資訊

如果 qemu-guest-agent 已安裝並在 VM 上執行,則 Smart blaze VM Control 網頁介面可以顯示 IP 位址。如果未安裝該代理程式,則只有在 VM 透過網路與 blaze 主機系統進行通訊時,網頁介面才能擷取 VM 目前的 IP 位址。

qemu-guest-agent 套件已設定為在 VM 建置程序期間安裝。這是在 blazevm.xml 檔案中指定的。此檔案可在預設安裝目錄中找到:/opt/pylon/share/pylon/Samples/blaze/smartblaze/vm/elbe/blazevm.xml

如果您正在建置自訂 VM 映像檔,請確保設定檔的套件清單中包含 qemu-guest-agent。

安裝並啟動代理程式後,Smart blaze VM Control 網頁介面會自動在狀態資訊區域中顯示 VM 目前的 IP 位址。

檢查路由器設定#

尋找指派給 VM 之 IP 位址的另一種方法是檢查路由器的 DHCP 用戶端清單或設定介面。

透過 Telnet 連線至 VM 開機主控台#

如果未安裝 qemu-guest-agent,或者如果您偏好直接存取,請連線至 VM 的開機主控台。若要啟用此功能,請確保在網頁介面中勾選Enable the serial console telnet port核取方塊。之後,您可以透過 Telnet 存取主控台:

telnet ${cameraip} 4446

請使用使用者名稱登入 root 並輸入印在相機標籤上的密碼。透過輸入以下指令來檢查 IP 位址:

$ ip address

輸出應類似於以下內容(實際的 IP 位址會有所不同):

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 3e:41:20:7e:d2:ba brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.127/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever

透過 SSH 連線至 VM#

資訊

與 ${cameraip} 變數類似, ${vmip} 將在本文檔中用於指代在相機上執行的 VM 的 IP 位址。為了方便起見,請將以下行新增至您的 ~/.bashrc 檔案中(請相應調整 IP 位址):

export vmip=192.168.1.127

取得 VM 的 IP 位址後,您可以使用使用者名稱透過 SSH 連線至該 IP root 以及印在相機標籤上的密碼:

ssh root@${vmip}

您可以執行 htop 用於查看虛擬機器內部運行情況的命令:

$ htop
    0[|                                   0.7%] Tasks: 15, 2 thr, 66 kthr; 1 running
    1[|                                   0.6%] Load average: 0.00 0.00 0.00
    2[|                                   2.0%] Uptime: 17:37:58
    3[|                                   0.6%]
  Mem[|||||||                      71.5M/5.79G]
  Swp[                                   0K/0K]

  [Main] [I/O]
    PID USER       PRI  NI  VIRT   RES   SHR S  CPU%-MEM%   TIME+  Command
    643 root        20   0  4740  3156  2428 R   2.6  0.1  0:00.16 htop -M
      1 root        20   0  164M 11032  8308 S   0.0  0.2  1:06.60 /sbin/init
    141 root        20   0 33368 10308  9300 S   0.0  0.2  0:01.34 /lib/systemd/systemd-journal
    162 root        20   0 24824  5752  4108 S   0.0  0.1  0:01.34 /lib/systemd/systemd-udevd
    163 systemd-ti  20   0 90448  6804  5924 S   0.0  0.1  1:44.70 /lib/systemd/systemd-timesyn
    179 systemd-ti  20   0 90448  6804  5924 S   0.0  0.1  0:58.75 /lib/systemd/systemd-timesyn
    193 avahi       20   0  7224  3172  2820 S   0.0  0.1  0:00.13 avahi-daemon: running [Blaze
    194 messagebus  20   0  8304  3436  3000 S   0.0  0.1  0:00.24 /usr/bin/dbus-daemon --syste
    198 root        20   0 16876  6852  5940 S   0.0  0.1  0:01.25 /lib/systemd/systemd-logind
    200 avahi       20   0  7116   308     0 S   0.0  0.0  0:00.00 avahi-daemon: chroot helper
    203 root        20   0  2640   764   688 S   0.0  0.0  0:00.00 /sbin/agetty -o -p -- \u --n
    205 root        20   0  2684   812   736 S   0.0  0.0  0:00.01 /sbin/agetty -o -p -- \u --k
    208 root        20   0 16280  8776  7488 S   0.0  0.1  0:00.09 sshd: /usr/sbin/sshd -D [lis
F1Help  F2Setup F3SearchF4FilterF5Tree  F6SortByF7Nice -F8Nice +F9Kill  F10Quit

為了獲得更安全、更便捷的訪問體驗,請設定用於身份驗證的金鑰對。如果您尚未在 ~/.ssh/id_rsa 上建立金鑰,可以透過以下步驟建立金鑰對:

  1. 執行以下命令並確認所有提示:

    ssh-keygen
    
  2. 將您的公鑰複製到 VM。
    您必須最後一次確認 root 密碼。

    ssh-copy-id root@${vmip}
    

現在,您可以從這台機器連接到您的 VM,而無需每次都輸入密碼。

使用此身份驗證,您還可以使用 scp 工具將檔案傳輸至 VM。一個更有效率的替代方案是 rsync 公用程式,它已經安裝在 VM 上。

為 Smart blaze VM 開發軟體#

為了開發 Smart blaze VM 的軟體,Smart blaze SDK 提供了兩個交叉開發環境選項:

  • ELBE SDK:ELBE (Embedded Linux Build Environment) 包含交叉開發工具鍊以及根據目標根檔案系統所需的全部開發套件。
  • Docker container:包含交叉開發工具鍊以及所有需要的套件。

建置 blaze C++ 範例#

pylon Supplementary Package for blaze 包含多個 C++ 範例,演示瞭如何使用 Basler pylon SDK 控制相機。

如果您尚未安裝,請在您的開發電腦上安裝最新的 pylon SDK 以及適用於 Linux 的 pylon Supplementary Package for blaze。您可以從 Basler 網站取得這些套件。

您可以選擇以下建置環境:

使用 ELBE SDK 建置範例#

如果您尚未操作,請按照Cross-Building Using ELBE SDK中的說明建立並安裝 ELBE SDK。

若要建置範例並將其複製到相機 VM,請執行以下命令:

cp -r /opt/pylon/share/pylon/Samples/blaze/cpp ./blaze_samples
cd blaze_samples
. /opt/elbe-sdk-aarch64-linux-gnu-BlazeVM-1.2/environment-setup-elbe-aarch64-linux-gnu-BlazeVM-1.2
# Adjust the path for the CMake toolchain file from the Smart blaze SDK as needed.
export CMAKE_TOOLCHAIN_FILE=/opt/pylon/share/pylon/Samples/blaze/smartblaze/vm/elbe/cross-toolchain.cmake
cmake -B build .
cmake --build build -j$(nproc)
ssh root@${vmip} mkdir -p samples
scp $(find build/ -type f -executable | egrep -w -v "ColorAndDepth|CMakeFiles") root@${vmip}:samples

使用 Docker Container 建置範例#

如果您尚未操作,請建立 dockerDo 別名,如 在 Docker 容器中執行指令.

中所述。若要建置範例並將其複製到相機 VM,請執行以下命令。容器已定義環境變數 CMAKE_TOOLCHAIN_FILE,該變數指示 CMake 使用 ARM64 交叉編譯器工具鍊。

dockerDo cp -r /opt/pylon/share/pylon/Samples/blaze/cpp ./blaze_samples
cd blaze_samples
dockerDo cmake -B build .
dockerDo cmake --build build -j$(nproc)
ssh root@${vmip} mkdir -p samples
scp $(find build/ -type f -executable | egrep -w -v "ColorAndDepth|CMakeFiles") root@${vmip}:samples

執行 blaze C++ 範例#

第一個範例只是開啟找到的第一個 blaze 相機,擷取 10 個影格,並列印一些像素值。若要執行範例:

  1. 開啟指向 VM 的 SSH Shell:

    ssh root@${vmip}
    
  2. 在該 Shell 中,啟動範例。
    您應該會看到類似以下的輸出:

    root@BlazeCustomerVM:~# ./samples/FirstSample
    Connected to camera Basler blaze-102S (40560199)
    User-defined name:
    Serial Number: 40560199
    x=  11.9 y=  27.4 z=1753.7
    intensity=51091 confidence=25577
    x=  11.9 y=  27.4 z=1754.9
    intensity=51006 confidence=25471
    x=  11.9 y=  27.4 z=1755.7
    intensity=51011 confidence=25478
    x=  11.9 y=  27.4 z=1756.5
    intensity=50728 confidence=25126
    x=  11.9 y=  27.4 z=1757.1
    intensity=50965 confidence=25420
    x=  11.9 y=  27.5 z=1757.7
    intensity=50963 confidence=25417
    x=  11.9 y=  27.5 z=1758.3
    intensity=50963 confidence=25417
    x=  11.9 y=  27.5 z=1758.9
    intensity=50859 confidence=25289
    x=  11.9 y=  27.5 z=1759.5
    intensity=50820 confidence=25240
    x=  11.9 y=  27.5 z=1760.1
    intensity=50803 confidence=25219
    
    Press Enter to exit.
    

若要直接執行範例而不需要開啟互動式 SSH Shell,您必須設定 GENICAM_GENTL64_PATH 環境變數:

ssh root@${vmip} GENICAM_GENTL64_PATH=:/opt/pylon/lib/gentlproducer/gtl ./samples/FirstSample

網路轉發#

如果您將相機直接連接到電腦,相機上的虛擬機器將無法連線至網際網路。如果您需要在虛擬機器中使用網際網路存取權(例如,使用 apt-get從 Debian 封存檔安裝額外的套件),您需要在電腦上設定 NAT 轉發規則:

function setIptables() {
    echo "iptables: $@"
    if ! sudo iptables -C "$@"; then
        sudo iptables -A "$@";
    fi
}
DEVICE_WITH_CAMERA=eth0   # The network device on your PC to which the camera is connected
DEVICE_WITH_INTERNET=eth1 # The network device on your PC which provides the internet connection
OWN_IP=192.168.1.2        # Your PC's IP address on $DEVICE_WITH_CAMERA
VM_NET_PREFIX=24

setIptables FORWARD -s ${vmip} -o $DEVICE_WITH_INTERNET -i $DEVICE_WITH_CAMERA -j ACCEPT
setIptables FORWARD -i $DEVICE_WITH_INTERNET -d ${vmip} -m state --state RELATED,ESTABLISHED -j ACCEPT
setIptables POSTROUTING -t nat -o $DEVICE_WITH_INTERNET -j MASQUERADE

ssh root@${vmip} ip r add default via $OWN_IP dev eth0
ssh root@${vmip} bash -c "'echo nameserver 8.8.8.8 >> /etc/resolv.conf'"

完成這些設定後,您應該就能安裝額外的套件:

ssh root@${vmip} apt-get update
ssh root@${vmip} apt-get install chocolate-doom
ssh -X root@${vmip} /usr/games/chocolate-doom

X11 轉發#

部分程式設計範例會使用 OpenCV 視覺化視窗來顯示相機擷取的影像。在開發期間將擷取或處理的影像視覺化非常有用。這可以透過 X11 轉發來實現,但代價是效能會降低。X11 轉發允許在虛擬機器上執行的應用程式將其圖形使用者介面顯示在您本機的顯示器上。

若要啟用 X11 轉發:

  1. 請使用 -X 或 -Y 透過 SSH 連線時的選項:

    ssh -X root@${vmip}
    
  2. 啟動會開啟影像視窗的範例:

    ./samples/GrabDepthMap
    

    您應該會看到電腦上開啟了一個視窗,顯示來自相機的灰階深度影像。

資訊

您可能會在終端機中看到類似以下的錯誤:

grab loop: Buffer grabbed but no user input buffer available , block ID = 435.

這是因為 X11 轉發需要額外時間,會拖慢抓取迴圈並導致遺失影格。這可以透過設定較低的影格率來避免。

若要了解如何降低影格率,請參閱 Controlling the Frame Rate。

另一種運作模式即使在進行 X11 轉發時也能正常運作而不會有遺失影格的風險,那就是使用軟體觸發功能,以便只有在目前影格處理完成後才觸發下一個影格。由於應用程式在請求下一個影格之前會先等待,因此這會導致較低的影格率。

執行 blaze Python 範例#

Python 範例使用 OpenCV 或 Open3D。若要執行 Python 範例:

  1. 開啟具有 X11 轉發功能的 SSH Shell:

    ssh -X root@${vmip}
    
  2. 在該 Shell 中,切換至範例目錄:

    cd /opt/pylon/share/pylon/Samples/blaze/Python/pypylon
    
  3. 執行範例。您應該會看到類似以下的輸出以及 OpenCV 或 Open3D 視覺化視窗:

    python3 SimpleGrab/simple_grab.py
    
    Using device  blaze-102S
    OperatingMode:  LongRange
    FastMode:  False
    FilterSpatial:  True
    FilterTemporal:  True
    FilterStrength:  220
    OutlierRemoval:  True
    ConfidenceThreshold:  320
    GammaCorrection:  True
    Min. Depth [mm]:  0
    Max. Depth [mm]:  9990
    To exit, press ESC in one of the image windows
    
    $ python3 ShowPointCloud/show_point_cloud.py
    Using device  blaze-102S
    [Open3D DEBUG] GLFW init.
    To exit, press ESC in one of the image windows.
    To save a point cloud as .pcd file, press S in one of the image windows.
    [Open3D DEBUG] Add geometry and update bounding box to [(-1565.8367, -1279.5530, 0.0000) - (1694.7946, 50.7543, 2803.0823)]
    [Open3D DEBUG] Global colormap init.