Multibeam color filter as a lookup table - #278
Merged
Merged
Conversation
jp-pino
force-pushed
the
jp-pino/multibeam-color-filter
branch
from
July 7, 2026 13:45
3fc4d29 to
981a200
Compare
jp-pino
force-pushed
the
jp-pino/multibeam-color-filter
branch
from
September 7, 2026 12:30
d70c503 to
2b46427
Compare
jp-pino
marked this pull request as ready for review
September 7, 2026 12:32
The app sends the color filter used to render the multibeam sonar fan as a 768-byte lookup table (256 R,G,B triplets indexed by echo intensity). The drone keeps the last one received and applies it to the sonar RTSP stream; grayscale is used until one is set.
jp-pino
force-pushed
the
jp-pino/multibeam-color-filter
branch
from
September 7, 2026 12:33
2b46427 to
7494737
Compare
follesoe
approved these changes
Sep 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replace
MultibeamConfig.color_filter(an index into palettes compiled into the fan renderer) with aMultibeamColorFiltermessage —bytes rgb, 768 bytes of R,G,B triplets indexed by echo intensity — plusSetMultibeamColorFilterReq/RepandGetMultibeamColorFilterReq/Rep. The app can send a filter at any time; the drone keeps the last one in memory and uses grayscale until one is set (Getreturns an emptyrgbthen).Linked PRs (multibeam color filter — merge in dependency order)
MultibeamColorFilter+ Set/Get requestsMultibeamColorFilter.msg)node_commrepliers publishing/multibeam/color_filter(ROS + tyndall IPC)main) — elements read the IPC slot and follow changesThe recorded-fan overlay (
OverlayParameters.multibeam_enabled) is a separate set: #298, BluEye-Robotics/p2_msgs#54, BluEye-Robotics/p2_drone#1066, BluEye-Robotics/gst_rtsp_record#297.mbezoverlaypicks the filter up from the same IPC slot once both have landed.Design note: the renderer reads the slot through the generated
p2_msgsstructThe first cut mirrored the message with a local
struct { uint8_t rgb[768]; }in the renderer to avoid a p2_msgs dependency. That cannot work: tyndall tags every shared-memory slot with a hash of the storage type name (typeinfo_hash(seq_lock<T>)) andasserts on mismatch when a second opener arrives, and the cross build has asserts on. The renderer therefore includesp2_msgs/msg/detail/multibeam_color_filter__struct.hpp(header-only, no ROS runtime linked) so both sides use the samep2_msgs::msg::MultibeamColorFiltertype. Consequence: the message must stay trivially copyable and exactlyuint8[768](static_asserted in the renderer).