SMACC2
Loading...
Searching...
No Matches
cb_follow_waypoints.cpp
Go to the documentation of this file.
1// Copyright 2025 Robosoft Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
18
19namespace cl_px4_mr
20{
21
23 std::vector<std::array<float, 4>> waypoints, float xyTol, float zTol)
24: waypoints_(std::move(waypoints)), xyTol_(xyTol), zTol_(zTol)
25{
26}
27
29{
30 if (waypoints_.empty())
31 {
32 RCLCPP_WARN(getLogger(), "CbFollowWaypoints: no waypoints provided - posting success");
33 this->postPx4Success();
34 return;
35 }
36
37 RCLCPP_INFO(getLogger(), "CbFollowWaypoints: following %zu waypoints", waypoints_.size());
38
39 currentIndex_ = 0;
41}
42
44
46{
47 const auto & wp = waypoints_[currentIndex_];
48 float x = wp[0];
49 float y = wp[1];
50 float z = wp[2];
51 float yaw = wp[3];
52
53 RCLCPP_INFO(
54 getLogger(), "CbFollowWaypoints: commanding waypoint %zu/%zu [%.2f, %.2f, %.2f] yaw=%.2f",
55 currentIndex_ + 1, waypoints_.size(), x, y, z, yaw);
56
58 goalChecker_->setGoal(x, y, z, xyTol_, zTol_);
59}
60
62{
64
65 if (currentIndex_ >= waypoints_.size())
66 {
67 RCLCPP_INFO(
68 getLogger(), "CbFollowWaypoints: all %zu waypoints reached - posting success",
69 waypoints_.size());
70 this->postPx4Success();
71 }
72 else
73 {
75 }
76}
77
79{
80 if (goalChecker_ != nullptr)
81 {
84 }
85 else
86 {
87 RCLCPP_WARN(
88 getLogger(), "CbFollowWaypoints: completion component missing, no completion signal wired");
89 }
90}
91
92} // namespace cl_px4_mr
CbFollowWaypoints(std::vector< std::array< float, 4 > > waypoints, float xyTol=0.5f, float zTol=0.3f)
std::vector< std::array< float, 4 > > waypoints_
void setGoal(float x, float y, float z, float xy_tolerance=0.5f, float z_tolerance=0.3f)
smacc2::SmaccSignal< void()> onGoalReached_
void setPositionNED(float x, float y, float z, float yaw=std::numeric_limits< float >::quiet_NaN())
virtual rclcpp::Logger getLogger() const
smacc2::SmaccSignalConnection createSignalConnection(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object)