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

入門指南 (Smart blaze)#

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

如需有關 Smart blaze 相機初始設定與 IP 配置的資訊,請參閱 相機安裝 (blaze) 主題。

資訊

在本說明文件中,請將 ${cameraip} 替換為您使用 pylon IP Configurator所設定的 IP 位址。為求便利,您可以將下列行新增至電腦上的 ~/.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 之前,您必須在彈出的訊息對話方塊中手動確認啟動。

為 VM 指派 IP 位址#

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

  1. 在「IP 位址」輸入欄位中輸入IP 位址以進行手動 IP 位址設定時,請使用以下格式:
    a.b.c.d/掩碼位元
    末尾的掩碼位元值定義了子網掩碼中被設定的位元數。 範例:
    當輸入192.168.1.127/24 時,系統會對虛擬機器套用以下設定:
    IP 位址:192.168.1.127
    子網遮罩:255.255.255.0

  2. 請以以下格式輸入用於手動 IP 設定的主域名伺服器與次域名伺服器(DNS ),或留空:
    a.b.c.d

  3. 請以以下格式輸入閘道,或留空:
    a.b.c.d
    若將此欄位留空,系統將使用DHCP 提供的閘道;若輸入值,則該閘道將用於手動 IP 設定。

顯示當前 IP 位址以進行DHCP 設定#

如果您已設定好可正常運作的DHCP 環境,虛擬機器會自動從DHCP 伺服器取得 IP 位址。若要確認已指派的 IP 位址,您可以採取以下幾種方式:

若虛擬機器上已安裝qemu-guest-agent套件,Smart Blaze VM Control 網頁介面即可自動顯示該虛擬機器的當前 IP 位址。qemu-guest-agent 是一個在客體虛擬機器內部運行的輔助守護程式,負責向主機系統提供有關客體虛擬機器的資訊,包括網路設定。

資訊

若虛擬機器上已安裝並執行 qemu-guest-agent,則可透過 Smart Blaze VM Control 網頁介面顯示該 IP 位址。若未安裝該代理程式,網頁介面僅能在虛擬機器透過網路與 Blaze 主機系統通訊時,才能擷取虛擬機器的當前 IP 位址。

qemu-guest-agent 套件已設定為在虛擬機器建置過程中一併安裝。此設定載於blazevm.xml檔案中。該檔案位於預設安裝目錄:/opt/pylon/share/pylon/Samples/blaze/smartblaze/vm/elbe/blazevm.xml

如果您正在建立自訂虛擬機器映像檔,請確保配置檔案中的套件清單已包含 qemu-guest-agent。

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

檢查路由器設定#

要查明虛擬機器被指派了哪個 IP 位址,另一種方法是查看路由器的「DHCP 」客戶端清單或設定介面。

透過 Telnet 連線至虛擬機器開機主控台#

若未安裝qemu-guest-agent,或您偏好直接存取,請連線至虛擬機器的開機主控台。要啟用此功能,請確保在網頁介面中勾選了「啟用序列主控台 Telnet 埠」核取方塊。之後,您即可透過 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 連線至虛擬機器#

資訊

與 ${cameraip} 變數, ${vmip} 在本文件中,將使用此術語來指稱在攝影機上運行的虛擬機器(VM)的 IP 位址。請在您的 ~/.bashrc 為方便起見,請參閱此檔案(請依實際情況調整 IP 位址):

export vmip=192.168.1.127

取得虛擬機器 (VM) 的 IP 位址後,即可使用使用者名稱透過 SSH 連線至該虛擬機器 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. 將您的公開金鑰複製到虛擬機器中。
    您必須最後一次使用 root 密碼進行確認。

    ssh-copy-id root@${vmip}
    

現在,您可以在不需每次輸入密碼的情況下,從這台電腦連線至您的虛擬機器。

透過此驗證方式,您亦可使用 scp 工具。一種更有效的替代方案是 rsync 該實用程式已安裝在虛擬機器上。

為 Smart blaze VM 開發軟體#

為了開發適用於 Smart blaze VM 的軟體,Smart blaze SDK 提供了兩種跨平台開發環境選項:

  • ELBE SDK:ELBE(嵌入式Linux 建置環境)包含跨平台開發工具鏈,以及根據目標根檔案系統所需的所有開發套件。
  • Docker 容器:內含跨平台開發工具鏈及所有必需的套件。

建立 C++ 範例#

pylon Supplementary Package for blaze 包含數個 C++ 範例程式,展示如何使用 Basler pylon SDK 控制相機。

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

您可以從以下建置環境中進行選擇:

使用 ELBE SDK 建立範例#

若您尚未執行此步驟,請依照「使用 ELBE SDK 進行跨平台建置」一節中的說明,建立並安裝 ELBE SDK。

要建置範例並將其複製到相機虛擬機器中,請執行以下指令:

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/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 容器建立範例#

若您尚未執行此步驟,請建立 dockerDo 別名,如以下所述 在 Docker 容器中執行指令.

要建置範例並將其複製到相機虛擬機器中,請執行以下指令。該容器已定義了環境變數 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. 開啟通往虛擬機器的 SSH 終端機:

    ssh root@${vmip}
    
  2. 在該終端視窗中,執行此範例:
    。您應會看到類似以下的輸出:

    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 指令列,您必須設定 GENICAM_GENTL64_PATH 環境變數:

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

網路轉發#

若將相機直接連接至電腦,相機上的虛擬機器將無法連上網。若您需要在虛擬機器中存取網際網路(例如,要使用 apt-get),您需要在電腦上設定 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 轉發會耗費額外時間,導致擷取迴圈變慢,進而造成畫面遺漏。透過設定較低的幀率,即可避免此問題。

如需了解如何降低幀率,請參閱「控制幀率」。

另一種運作模式,即使在 X11 轉發期間也能避免掉幀的風險,就是利用軟體觸發功能,確保只有在當前幀的處理完成後,才會觸發下一幀。由於應用程式會先等待一段時間才請求下一幀,因此會導致幀率降低。

執行 Blaze Python 範例#

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

  1. 開啟具有 X11 轉發功能的 SSH 命令列介面:

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

    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.