Skip to content

Commit 92c77ec

Browse files
committed
Client files for Qb2 Firmware v1.12.2 (22.01.2024)
1 parent 616630c commit 92c77ec

File tree

159 files changed

+2844
-509
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

159 files changed

+2844
-509
lines changed

doc/antora.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
display_version: v1.11
1+
display_version: v1.12
22
name: Qb2
33
nav:
44
- modules/ROOT/nav.adoc
@@ -8,4 +8,4 @@ nav:
88
- modules/developer/nav.adoc
99
- modules/service_and_maintenance/nav.adoc
1010
title: Qb2
11-
version: v1.11
11+
version: v1.12

doc/modules/ROOT/pages/index.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ The integrated compute module allows Blickfeld Percept software stack to run on
1010

1111
[IMPORTANT]
1212
====
13-
These documentation pages are a supplement to the Quick Start Manual (Blickfeld Publ. #49039) that is shipped with each unit. The instructions and safety information contained in this printed document apply at all times and take precendence over the present documentation pages.
13+
These documentation pages are a supplement to the xref:attachment$qb2_quick_start_manual_and_safety_information.pdf[Quick Start Manual (Blickfeld Publ. #49039)] that is shipped with each unit. The instructions and safety information contained in this printed document apply at all times and take precendence over the present documentation pages.
1414
User must familiarize with the safety instructions contained in the manual shipped with the device. If you have lost the document, please contact support@blickfeld.com for a digital copy.
1515
====
1616

17-
(C) Blickfeld GmbH, 2023-present
17+
(C) Blickfeld GmbH, 2024-present

doc/modules/developer/images/architecture.svg

Lines changed: 373 additions & 0 deletions
Loading

doc/modules/developer/nav.adoc

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,17 @@
77
**** xref:developer:modules/percept/processing/index.adoc[]
88
***** xref:developer:modules/percept/processing/stream.adoc[]
99
**** xref:developer:modules/percept/pipeline.adoc[]
10+
**** xref:developer:modules/percept/toolkit.adoc[]
11+
*** xref:developer:modules/push/index.adoc[]
12+
**** xref:developer:modules/push/push_configuration.adoc[]
1013
*** xref:developer:modules/flow.adoc[]
1114
** Guides
1215
*** xref:guides:core_processing_point_cloud.adoc[]
13-
*** xref:guides:firmware_networking.adoc[]
16+
*** xref:guides:core_processing_point_cloud_o3d.adoc[]
17+
*** xref:guides:diagnostics_health.adoc[]
18+
*** xref:guides:system_firmware_update.adoc[]
19+
*** xref:guides:system_network_configuration.adoc[]
20+
*** xref:guides:system_scan_pattern.adoc[]
1421
** xref:protocol:index.adoc[]
1522
*** blickfeld
1623
**** base
@@ -35,9 +42,11 @@
3542
****** xref:protocol:blickfeld/beam_deflection_control/data/health.adoc[Health]
3643
***** services
3744
****** xref:protocol:blickfeld/beam_deflection_control/services/health.adoc[Health]
45+
**** config
46+
***** data
47+
****** xref:protocol:blickfeld/config/data/watch_event.adoc[Watch Event]
3848
**** core_processing
3949
***** config
40-
****** xref:protocol:blickfeld/core_processing/config/demo_recording.adoc[Demo Recording]
4150
****** xref:protocol:blickfeld/core_processing/config/health.adoc[Health]
4251
****** xref:protocol:blickfeld/core_processing/config/point_cloud.adoc[Point Cloud]
4352
***** data
@@ -68,7 +77,6 @@
6877
****** xref:protocol:blickfeld/diagnostics/services/log.adoc[Log]
6978
****** xref:protocol:blickfeld/diagnostics/services/report.adoc[Report]
7079
****** xref:protocol:blickfeld/diagnostics/services/self_test.adoc[Self Test]
71-
***** xref:protocol:blickfeld/diagnostics/options.adoc[Options]
7280
**** flow
7381
***** config
7482
****** xref:protocol:blickfeld/flow/config/flow.adoc[Flow]
@@ -139,6 +147,20 @@
139147
****** xref:protocol:blickfeld/push/services/destination.adoc[Destination]
140148
****** xref:protocol:blickfeld/push/services/health.adoc[Health]
141149
****** xref:protocol:blickfeld/push/services/push.adoc[Push]
150+
**** secure
151+
***** config
152+
****** xref:protocol:blickfeld/secure/config/account.adoc[Account]
153+
****** xref:protocol:blickfeld/secure/config/application_key.adoc[Application Key]
154+
****** xref:protocol:blickfeld/secure/config/certificate.adoc[Certificate]
155+
****** xref:protocol:blickfeld/secure/config/device_credentials.adoc[Device Credentials]
156+
****** xref:protocol:blickfeld/secure/config/private_key.adoc[Private Key]
157+
****** xref:protocol:blickfeld/secure/config/public_key.adoc[Public Key]
158+
***** services
159+
****** xref:protocol:blickfeld/secure/services/account.adoc[Account]
160+
****** xref:protocol:blickfeld/secure/services/application_key.adoc[Application Key]
161+
****** xref:protocol:blickfeld/secure/services/authentication.adoc[Authentication]
162+
****** xref:protocol:blickfeld/secure/services/device_credentials.adoc[Device Credentials]
163+
****** xref:protocol:blickfeld/secure/services/session.adoc[Session]
142164
**** system
143165
***** config
144166
****** xref:protocol:blickfeld/system/config/device.adoc[Device]

doc/modules/developer/pages/client_libraries/python.adoc

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,47 +21,45 @@ $ pip3 install blickfeld_qb2
2121
----
2222

2323
== Connecting to Qb2
24-
To interact with a Qb2 device, a gRPC connection has to be established. For that we use the gRPC ```Channel``` from the ```blickfeld_qb2``` library.
25-
An IP address or a hostname of a Qb2 device can be used to establish a connection. The connection is by default encrypted and authenticated.
24+
To interact with a Qb2 device, a gRPC connection must be established. For this purpose, the gRPC ```Channel``` from the ```blickfeld_qb2``` library is used.
25+
Either the IP address or the hostname of the Qb2 device can be used to establish a connection. The connection is encrypted and authenticated by default.
2626

27-
.Simple example which imports the blickfeld_qb2 python library and creates communication channel to a Qb2
27+
.Simple example which imports the blickfeld_qb2 python library and creates a communication channel to Qb2
2828
[source,python]
2929
----
3030
import blickfeld_qb2
31-
# open secure connection to Qb2
31+
# Open a secure connection to Qb2
3232
with blickfeld_qb2.Channel(fqdn_or_ip="qb2-xxxxxxxxx") as channel:
3333
# Call methods of services
3434
# ..
3535
----
3636

37-
NOTE: The ```serial_number``` can be passed additionally to authenticate a particular device. If it is not supplied, the authentication only checks if it is a Blickfeld device.
37+
NOTE: The ```serial_number``` can be passed additionally to authenticate a particular device. If not supplied, the authentication only checks if it is a Blickfeld device.
3838

3939
== Simple API Requests
4040

41-
The code snippet below shows an example of connecting to Qb2 with a hostname ```qb2-xxxxxxxxx``` and fetching information about its firmware version.
42-
For that we use the ```Firmware``` service from ```blickfeld_qb2.system.services``` namespace over the gRPC channel and make a
43-
request ```get_status()``` to get a response with information about the currently installed firmware.
41+
The code snippet below provides an example of connecting to Qb2 with the hostname ```qb2-xxxxxxxxx``` and retrieving information about its firmware version.
42+
In this case, the ```Firmware``` service from ```blickfeld_qb2.system.services``` namespace is used over the gRPC channel making a request ```get_status()``` to receive a response containing information about the currently installed firmware.
4443

4544
[source,python]
4645
----
4746
import blickfeld_qb2
4847
49-
# open secure connection to Qb2
48+
# Open a secure connection to Qb2
5049
with blickfeld_qb2.Channel(fqdn_or_ip="qb2-xxxxxxxxx") as channel:
51-
# request firmware status
50+
# Request the firmware status
5251
response = blickfeld_qb2.system.services.Firmware(channel).get_status()
53-
# extract firmware version
52+
# Extract the firmware version
5453
firmware_version = response.status.installed_firmware_info
55-
# print firmware version
54+
# Print the firmware version
5655
print(firmware_version)
5756
5857
# NOTE: A channel can be reused for other requests. It is not required to create a channel per request.
5958
----
6059

61-
Every response to the service call is an object that usually consists of several nested objects according to the protocol schema defined in the corresponding sections of the documentation. In this scenario we can get information about firmware version installed via the
62-
field ```response.status.installed_firmware_info```.
60+
Every response to the service call is an object that typically comprises several nested objects following the protocol schema defined in the corresponding sections of the documentation. In this scenario, the information about the installed firmware version can be obtained via the field ```response.status.installed_firmware_info```.
6361

64-
The output of the print should look similar to the one shown below:
62+
The print output should resemble the example shown below:
6563

6664
[source,bash]
6765
----
@@ -70,21 +68,21 @@ FirmwareInfo(label='JAKOB v1.5.0', version=Version(major=1, minor=5, revision='e
7068

7169
== Asynchronous Requests
7270

73-
If needed, the Blickfeld library can be also used in a fully asynchronous mode. In the example shown below we introduce a coroutine ```get_firmware_version()```, which opens an asynchronous gRPC channel and makes use of an asynchronous request ```async_get_status()``` to get the same information about the Qb2 firmware status.
71+
If necessary, the Blickfeld library can also be used in a fully asynchronous mode. In the example shown below we introduce a coroutine ```get_firmware_version()```, which opens an asynchronous gRPC channel and utilizes an asynchronous request ```async_get_status()``` to obtain the same information about the Qb2 firmware status.
7472

7573
[source,python]
7674
----
7775
import asyncio
7876
import blickfeld_qb2
7977
8078
async def main():
81-
# open secure asynchronous connection to Qb2
79+
# Open a secure asynchronous connection to Qb2
8280
async with blickfeld_qb2.Channel(fqdn_or_ip="qb2-xxxxxxxxx") as channel:
83-
# request firmware status asynchronously and await for the response
81+
# Request the firmware status asynchronously and await for the response
8482
response = await blickfeld_qb2.system.services.Firmware(channel).async_get_status()
85-
# get firmware version from the response
83+
# Get the firmware version from the response
8684
firmware_version = response.status.installed_firmware_info
87-
# print firmware version
85+
# Print the firmware version
8886
print(firmware_version)
8987
9088
# NOTE: A channel can be reused for other requests. It is not required to create a channel per request.
@@ -96,9 +94,9 @@ asyncio.run(main())
9694

9795
NOTE: To make an asynchronous request over the asynchronous channel, the desired method name should be prefixed with ```async_```.
9896

99-
This coroutine can be further executed on the event loop. The output of the print should look similar to the one shown below:
97+
This coroutine can be further executed on the event loop. The print output resemble the example shown below:
10098

10199
[source,bash]
102100
----
103101
FirmwareInfo(label='JAKOB v1.5.0', version=Version(major=1, minor=5, revision='e87dfda0', is_release=True), allowed_downgrade_version=Version(minor=26))
104-
----
102+
----
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
= Flow (BETA)
1+
= Blickfeld Flow (BETA)
22

3-
CAUTION: This feature is currently in the testing phase and not yet completed. Changes in upcoming firmware releases may cause behaviourals and APIs created with Flow to break.
3+
CAUTION: This feature is currently in the testing phase and not yet completed. Changes in upcoming firmware releases may cause behaviours and APIs created with Flow to break.
44

5-
Blickfeld Flow is a low-code prototyping and integration tool for customizing and extending the functionality of a Qb2 sensor.
5+
Blickfeld Flow is a low-code prototyping and integration tool for customizing and extending the functionality of the Qb2 sensor.
66
It is based on the open-source tool https://nodered.org[Node-Red], an efficient and state-of-the-art flow-based programming tool for event-driven applications.
7-
It is seamlessly integrated in the Blickfeld sensor while maintaining the flexibility and the https://flows.nodered.org/[library] provided by the open source community.
7+
The tool is seamlessly integrated in the Blickfeld sensor while maintaining the flexibility and the https://flows.nodered.org/[library] provided by the open-source community.
88

9-
== Key Features
9+
== Key features
1010

1111
* Simple access to the Blickfeld Qb2 API through built-in nodes
1212
* Browser-based wiring and editing of flows with the WebGUI
1313
* Support for various input and output interfaces such as REST, Websocket, MQTT, Kafka, ..
1414
* Live deployment of changes with status and debug messages
15-
* Deployment of custom Javscript methods
15+
* Deployment of custom Javascript methods
1616
* Import, export and library support to re-use flows
17-
* Fully integrated and on-device execution (the flows can be configured to start automatically with the power-up of the Qb2)
17+
* Fully integrated and on-device execution (flows can be configured to start automatically with the power-up of Qb2)
1818

1919
== How to get started?
2020

21-
NOTE: Ensure that the Qb2 sensor is running a firmware version that is at least v1.8 or higher. If it is not, please proceed to download the most recent release from https://github.com/Blickfeld/blickfeld-qb2/releases[Github] and then upload it to the sensor using the firmware page.
21+
NOTE: Ensure that the sensor is running the firmware version v1.8 or higher. If it is not, please proceed to download the most recent release from https://github.com/Blickfeld/blickfeld-qb2/releases[Github] and then upload it to the sensor using the firmware page.
2222

2323
Blickfeld Flow is available in the WebGUI under Configuration / Flow.
24-
With Blickfeld Flow, users have the ability to generate new flows by simply dragging nodes into the workspace and establishing connections between them.
24+
With Blickfeld Flow, users can generate new flows by simply dragging nodes into the workspace and establishing connections between them.
2525

26-
Overall, it is highly recommended to follow the https://nodered.org/docs/[Node-Red documentation] with its https://nodered.org/docs/tutorials/first-flow[tutorials].
26+
Overall, it is highly recommended to follow the https://nodered.org/docs/[Node-Red documentation] and its https://nodered.org/docs/tutorials/first-flow[tutorials].
2727

2828
== Qb2 API access
2929

@@ -36,32 +36,32 @@ Additionally, built-in flows are available for reference.
3636

3737
== Limitations
3838

39-
=== Compute Power
39+
=== Compute power
4040

41-
The Qb2 devices leverage a quad-core ARM Cortex-A72 processor for on-device processing tasks.
41+
Qb2 devices leverage a quad-core ARM Cortex-A72 processor for on-device processing tasks.
4242
Only a fraction of this computational capacity is allocated to Blickfeld flows.
4343
Consequently, resource-intensive flows might exhibit reduced performance.
4444
It is worth highlighting that this adjustment does not significantly impact the fundamental operations of the core device. This is because Blickfeld Flows are executed with a lower process priority, ensuring the stability of core device functionalities.
4545

46-
Simple recommended optimizations:
46+
Here are some simple recommended optimizations:
4747

4848
* https://cookbook.nodered.org/basic/rate-limit-messages[Slow down messages passing through a flow]
4949
* Dive into https://nodered.org/docs/user-guide/messages[Message Guides] to understand the potential compute & memory impact
5050

51-
=== Point Cloud Processing
51+
=== Point cloud processing
5252

53-
At the moment, it is not recommended to process point clouds with Blickfeld flows.
53+
At the moment, processing point clouds with Blickfeld flows is not recommended.
5454
It's a resource-intensive operation that usually requires optimizations to run in real-time.
5555

5656
Please approach the Blickfeld Support with the corresponding use-case where point cloud processing is required.
57-
We can probably provide a suitable solution.
57+
We can likely provide a suitable solution.
5858

5959
=== Storage
6060

61-
The custom packages are installed on a 2GB large data partition.
61+
Custom packages are installed on a 2GB large data partition.
6262
Depending on the dependencies, the storage limit may be reached.
6363

6464
=== Maintainability of complex flows
6565

66-
Even though it is very easy to get started with Blickfeld Flows, large and complex flows can lead to higher maintainability efforts in the future.
66+
Even though it is straightforward to get started with Blickfeld Flow, large and complex flows can lead to higher maintainability efforts in the future.
6767
It is highly recommended to carefully read through the https://nodered.org/docs/developing-flows/[Developing Flows] guide of Node-Red.

doc/modules/developer/pages/modules/percept/processing/index.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ The xref:protocol:blickfeld/percept_processing/services/pipeline.adoc[Pipeline s
4444

4545
=== Data Retrieval
4646

47-
The xref:protocol:blickfeld/percept_processing/services/point_cloud.adoc[Point Cloud] and
47+
The xref:protocol:blickfeld/percept_processing/services/point_cloud.adoc[Point Cloud],
4848
xref:protocol:blickfeld/percept_processing/services/states.adoc[States] and
4949
xref:protocol:blickfeld/percept_processing/services/volume_map.adoc[Volume Map]
5050
services enable the client to retrieve data of the corresponding types. You can find more information about this in the
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
= Blickfeld Percept Toolkit
2+
3+
The Blickfeld Percept Toolkit module provides a gRPC interface to perform on-demand geometric processing tasks.
4+
5+
== Services
6+
7+
Blickfeld Percept Toolkit provides the following services:
8+
9+
* Geometry
10+
* Health
11+
12+
=== Geometry
13+
14+
This service offers the capability to perform on-demand computations, including:
15+
16+
17+
* Ground alignment: Aligning a point cloud with the ground plane.
18+
* Registration refinement: Improving the registration of a set of point clouds by refining their transformations.
19+
20+
See xref:protocol:blickfeld/percept_toolkit/services/geometry.adoc[the service definition] for more information.
21+
22+
=== Health
23+
24+
The xref:protocol:blickfeld/percept_toolkit/services/health.adoc[Health service] can be utilized to obtain or stream information regarding the current status of the module itself.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
= Blickfeld Percept Push
2+
3+
The Blickfeld Push module provides a gRPC interface for subscribing to streams from the xref:developer:modules/percept/processing/index.adoc[Blickfeld Percept Processing] service and "pushing" the data to a desired destination.
4+
5+
== Architecture
6+
7+
The following image shows an overview of the Blickfeld Push data flow architecture.
8+
9+
image::architecture.svg[Blickfeld Push Data Flow Architecture]
10+
11+
12+
* Blickfeld Percept Processing gRPC Client
13+
+
14+
The Blickfeld Push module acts as a client to xref:developer:modules/percept/processing/index.adoc[Blickfeld Percept Processing] to access data streams and push it to configured destinations.
15+
16+
* Push API gRPC Server
17+
+
18+
To serve its own API, the module runs a gRPC server that manages all API calls defined in the xref:protocol:blickfeld/push/services/push.adoc[Push] service.
19+
20+
[NOTE]
21+
====
22+
For further details on various push configurations, you can refer to the: xref:developer:modules/push/push_configuration.adoc[Push Configuration Overview]
23+
====
24+
25+
== Services
26+
27+
Blickfeld Push offers the following services:
28+
29+
* Push
30+
* Destination
31+
* Health
32+
33+
=== Push
34+
35+
Provides services for storing, deleting, enabling, and disabling one or multiple push configurations. When a push configuration is enabled, Blickfeld Push will automatically publish the data stream provided by Blickfeld Percept Processing to the configured destination.
36+
See xref:protocol:blickfeld/push/services/push.adoc[Push] for the service definition.
37+
38+
=== Destination
39+
40+
A service to validate the push configuration, e.g. if the destination is correct, see xref:protocol:blickfeld/push/services/destination.adoc[Destination].
41+
42+
=== Health
43+
44+
The xref:protocol:blickfeld/push/services/health.adoc[Health service] can be used to obtain or stream information regarding the current status of the push configurations and the module itself.

0 commit comments

Comments
 (0)