Skip to content

Commit c4ab95d

Browse files
authored
Add API call to configure beam divergence (#283)
* Add API call to configure beam divergence * Review fixes
1 parent 01ea29b commit c4ab95d

File tree

6 files changed

+42
-5
lines changed

6 files changed

+42
-5
lines changed

include/rgl/api/core.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,16 @@ RGL_API rgl_status_t rgl_node_raytrace_configure_non_hits(rgl_node_t node, float
713713
*/
714714
RGL_API rgl_status_t rgl_node_raytrace_configure_mask(rgl_node_t node, const int8_t* rays_mask, int32_t rays_count);
715715

716+
/**
717+
* Modifies RaytraceNode to set beam divergence.
718+
* Beam divergence is used to calculate the beam width at the distance of hit point.
719+
* Setting beam divergence > 0.0f is required to use query for multi-return results.
720+
* Setting beam divergence == 0.0f disables multi-return.
721+
* @param node RaytraceNode to modify.
722+
* @param beamDivergence Beam divergence in radians.
723+
*/
724+
RGL_API rgl_status_t rgl_node_raytrace_configure_beam_divergence(rgl_node_t node, float beam_divergence);
725+
716726
/**
717727
* Creates or modifies FormatPointsNode.
718728
* The Node converts internal representation into a binary format defined by the `fields` array.

src/api/apiCore.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -922,8 +922,8 @@ void TapeCore::tape_node_raytrace_configure_non_hits(const YAML::Node& yamlNode,
922922
RGL_API rgl_status_t rgl_node_raytrace_configure_mask(rgl_node_t node, const int8_t* rays_mask, int32_t rays_count)
923923
{
924924
auto status = rglSafeCall([&]() {
925-
RGL_API_LOG("rgl_node_raytrace_configure_mask(node={}, rays_mask={}, rays_count={})", repr(node), repr(rays_mask, rays_count),
926-
rays_count);
925+
RGL_API_LOG("rgl_node_raytrace_configure_mask(node={}, rays_mask={}, rays_count={})", repr(node),
926+
repr(rays_mask, rays_count), rays_count);
927927
CHECK_ARG(node != nullptr);
928928
CHECK_ARG(rays_mask != nullptr);
929929
CHECK_ARG(rays_count > 0);
@@ -941,6 +941,26 @@ void TapeCore::tape_node_raytrace_configure_mask(const YAML::Node& yamlNode, Pla
941941
rgl_node_raytrace_configure_mask(node, state.getPtr<const int8_t>(yamlNode[1]), yamlNode[2].as<int32_t>());
942942
}
943943

944+
RGL_API rgl_status_t rgl_node_raytrace_configure_beam_divergence(rgl_node_t node, float beam_divergence)
945+
{
946+
auto status = rglSafeCall([&]() {
947+
RGL_API_LOG("rgl_node_raytrace_configure_beam_divergence(node={}, divergence={})", repr(node), beam_divergence);
948+
CHECK_ARG(node != nullptr);
949+
CHECK_ARG(beam_divergence >= 0.0f);
950+
RaytraceNode::Ptr raytraceNode = Node::validatePtr<RaytraceNode>(node);
951+
raytraceNode->setBeamDivergence(beam_divergence);
952+
});
953+
TAPE_HOOK(node, beam_divergence);
954+
return status;
955+
}
956+
957+
void TapeCore::tape_node_raytrace_configure_beam_divergence(const YAML::Node& yamlNode, PlaybackState& state)
958+
{
959+
auto nodeId = yamlNode[0].as<TapeAPIObjectID>();
960+
rgl_node_t node = state.nodes.at(nodeId);
961+
rgl_node_raytrace_configure_beam_divergence(node, yamlNode[1].as<float>());
962+
}
963+
944964
RGL_API rgl_status_t rgl_node_points_format(rgl_node_t* node, const rgl_field_t* fields, int32_t field_count)
945965
{
946966
auto status = rglSafeCall([&]() {

src/graph/NodesCore.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ struct RaytraceNode : IPointsNode
129129
void enableRayDistortion(bool enabled) { doApplyDistortion = enabled; }
130130
void setNonHitDistanceValues(float nearDistance, float farDistance);
131131
void setNonHitsMask(const int8_t* maskRaw, size_t maskPointCount);
132+
void setBeamDivergence(float divergence) { beamHalfDivergence = divergence / 2.0f; }
132133

133134
private:
134135
IRaysNode::Ptr raysNode;
@@ -140,6 +141,7 @@ struct RaytraceNode : IPointsNode
140141

141142
float nearNonHitDistance{std::numeric_limits<float>::infinity()};
142143
float farNonHitDistance{std::numeric_limits<float>::infinity()};
144+
float beamHalfDivergence = 0.0f;
143145

144146
DeviceAsyncArray<int8_t>::Ptr rayMask;
145147

@@ -646,8 +648,7 @@ struct RadarTrackObjectsNode : IPointsNodeSingleInput
646648

647649
RadarTrackObjectsNode();
648650

649-
void setParameters(float distanceThreshold, float azimuthThreshold, float elevationThreshold,
650-
float radialSpeedThreshold);
651+
void setParameters(float distanceThreshold, float azimuthThreshold, float elevationThreshold, float radialSpeedThreshold);
651652

652653
// Node
653654
void validateImpl() override;

src/graph/RaytraceNode.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ void RaytraceNode::enqueueExecImpl()
123123
.elevation = getPtrTo<ELEVATION_F32>(),
124124
.normal = getPtrTo<NORMAL_VEC3_F32>(),
125125
.incidentAngle = getPtrTo<INCIDENT_ANGLE_F32>(),
126-
.beamHalfDivergence = 0.0f, // TODO: provide API to set externally
126+
.beamHalfDivergence = beamHalfDivergence,
127127
.mrSamples = mrSamples.getPointers(),
128128
};
129129

src/tape/TapeCore.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class TapeCore
5454
static void tape_node_raytrace_configure_distortion(const YAML::Node& yamlNode, PlaybackState& state);
5555
static void tape_node_raytrace_configure_non_hits(const YAML::Node& yamlNode, PlaybackState& state);
5656
static void tape_node_raytrace_configure_mask(const YAML::Node& yamlNode, PlaybackState& state);
57+
static void tape_node_raytrace_configure_beam_divergence(const YAML::Node& yamlNode, PlaybackState& state);
5758
static void tape_node_points_format(const YAML::Node& yamlNode, PlaybackState& state);
5859
static void tape_node_points_yield(const YAML::Node& yamlNode, PlaybackState& state);
5960
static void tape_node_points_compact(const YAML::Node& yamlNode, PlaybackState& state);
@@ -107,6 +108,8 @@ class TapeCore
107108
TAPE_CALL_MAPPING("rgl_node_raytrace_configure_distortion", TapeCore::tape_node_raytrace_configure_distortion),
108109
TAPE_CALL_MAPPING("rgl_node_raytrace_configure_non_hits", TapeCore::tape_node_raytrace_configure_non_hits),
109110
TAPE_CALL_MAPPING("rgl_node_raytrace_configure_mask", TapeCore::tape_node_raytrace_configure_mask),
111+
TAPE_CALL_MAPPING("rgl_node_raytrace_configure_beam_divergence",
112+
TapeCore::tape_node_raytrace_configure_beam_divergence),
110113
TAPE_CALL_MAPPING("rgl_node_points_format", TapeCore::tape_node_points_format),
111114
TAPE_CALL_MAPPING("rgl_node_points_yield", TapeCore::tape_node_points_yield),
112115
TAPE_CALL_MAPPING("rgl_node_points_compact", TapeCore::tape_node_points_compact),

test/src/TapeTest.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,9 @@ TEST_F(TapeTest, RecordPlayAllCalls)
233233
float farNonHitDistance = 2.0f;
234234
EXPECT_RGL_SUCCESS(rgl_node_raytrace_configure_non_hits(raytrace, nearNonHitDistance, farNonHitDistance));
235235

236+
float beamDivergence = 0.1f;
237+
EXPECT_RGL_SUCCESS(rgl_node_raytrace_configure_beam_divergence(raytrace, beamDivergence));
238+
236239
rgl_node_t format = nullptr;
237240
std::vector<rgl_field_t> fields = {RGL_FIELD_XYZ_VEC3_F32, RGL_FIELD_DISTANCE_F32};
238241
EXPECT_RGL_SUCCESS(rgl_node_points_format(&format, fields.data(), fields.size()));

0 commit comments

Comments
 (0)