跳转到内容
STAGING SERVER
DEVELOPMENT SERVER

入门指南 (Smart blaze)#

本主题介绍如何设置和配置 Smart blaze 相机。

有关 Smart blaze 相机的初始设置和 IP 配置的信息,请参阅 Camera Installation (blaze) 主题。

信息

在本文档中,将 ${cameraip} 替换为您使用 pylon IP Configurator配置的 IP 地址。为了方便起见,您可以将以下行添加到计算机上的 ~/.bashrc 文件中(将 IP 地址替换为您实际的 IP 地址):

export cameraip=192.168.1.123

这使您可以直接将本主题中的命令复制并粘贴到终端中,而无需对其进行修改。添加此行后,不要忘记重新加载您的配置:

source ~/.bashrc

相机设置与 IP 配置#

访问 Smart blaze VM Web Interface#

Smart blaze 出厂时预装了基于 Debian Trixie 的默认虚拟机。

您可以使用 Smart blaze VM Control Web Interface 控制虚拟机并检查其状态。要访问该 Web 界面,请在终端中输入以下命令:

xdg-open http://${cameraip}

这应该会打开您的默认网页浏览器并显示 Smart blaze VM Control 登录网页界面。输入默认密码即可登录。默认密码可在相机上的标签上找到。出于安全原因,Basler 建议在首次登录后更改密码。请点击网页界面中的 Change Password 按钮来进行更改。

输入当前密码后,将显示 Smart blaze VM Control 网页界面:

Smart blaze VM Control 网页界面

在虚拟机运行期间,状态信息应指示 kvm_machine.service 已加载并处于活动状态。信息区域应包含字符串 Active: active (running)。

首次使用默认 VM 之前,您必须在弹出的消息对话框中手动确认启动。

为 VM 分配 IP 地址#

默认情况下,VM 会尝试通过 DHCP 获取 IP 地址。如果相机直接连接到您的计算机且没有可用的 DHCP 服务器,此操作将失败。在这种情况下,请使用 Smart blaze VM Control Web 界面手动配置静态 IP 地址。

  1. 在用于手动 IP 地址配置的 IP Address 输入框中输入 IP 地址时,请使用以下格式:
    a.b.c.d/maskbits
    尾随的掩码位数(mask bits)用于定义子网掩码中置 1 的位数。示例:
    当输入 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 Web 界面可以自动显示 VM 的当前 IP 地址。qemu-guest-agent 是一个运行在客户机 VM 内部的辅助守护进程,它向宿主机系统提供有关客户机 VM 的信息,包括网络配置。

信息

如果 qemu-guest-agent 已在 VM 上安装并运行,则可以通过 Smart blaze VM Control Web 界面显示 IP 地址。如果未安装该代理,则只有当 VM 通过网络与 blaze 宿主机系统进行通信时,Web 界面才能检索到 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 Web 界面会自动在状态信息区域显示 VM 的当前 IP 地址。

检查路由器配置#

了解分配给 VM 的 IP 地址的另一种方法是检查路由器的 DHCP 客户端列表或配置界面。

通过 Telnet 连接到 VM Boot Console#

如果未安装 qemu-guest-agent,或者您更喜欢直接访问,请连接到 VM 的引导控制台。为启用此功能,请确保在 Web 界面中勾选了复选框 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 连接到它 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(Embedded Linux Build Environment)包含交叉开发工具链以及根据目标根文件系统所需的所有开发包。
  • Docker 容器:包含交叉开发工具链和所有必需的软件包。

构建 blaze 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
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 容器中运行命令.

要构建示例并将它们复制到相机 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

网络转发#

如果将相机直接连接到计算机,相机上的 VM 将无法连接互联网。如果您需要 VM 中的互联网访问权限(例如,用于从 Debian 归档安装额外的软件包,使用 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 转发需要额外的时间,从而减慢了抓取循环并导致丢帧。可以通过配置较低的帧率来避免这种情况。

要了解如何降低帧率,请参阅 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.