|
| | CbPx4PathFollowerBase (PathFollowerParams params={}) |
| |
| virtual | ~CbPx4PathFollowerBase () |
| |
| void | setFollowerParams (const PathFollowerParams ¶ms) |
| |
| const PathFollowerParams & | followerParams () const |
| |
| void | onEntry () override |
| |
| void | onExit () override |
| |
| void | update () override |
| |
| template<typename TOrthogonal , typename TSourceObject > |
| void | onStateOrthogonalAllocation () |
| |
| virtual | ~CbPx4ClientBehaviorBase () |
| |
| void | setTimeout (std::chrono::milliseconds timeout) |
| |
| bool | hasTimeout () const |
| |
| template<typename TOrthogonal , typename TSourceObject > |
| void | onStateOrthogonalAllocation () |
| |
| virtual | ~SmaccAsyncClientBehavior () |
| |
| template<typename TCallback , typename T > |
| smacc2::SmaccSignalConnection | onSuccess (TCallback callback, T *object) |
| |
| template<typename TCallback , typename T > |
| smacc2::SmaccSignalConnection | onFinished (TCallback callback, T *object) |
| |
| template<typename TCallback , typename T > |
| smacc2::SmaccSignalConnection | onFailure (TCallback callback, T *object) |
| |
| void | requestForceFinish () |
| |
| void | executeOnEntry () override |
| |
| void | executeOnExit () override |
| |
| void | waitOnEntryThread (bool requestFinish) |
| |
| template<typename TCallbackMethod , typename T > |
| smacc2::SmaccSignalConnection | onSuccess (TCallbackMethod callback, T *object) |
| |
| template<typename TCallbackMethod , typename T > |
| smacc2::SmaccSignalConnection | onFinished (TCallbackMethod callback, T *object) |
| |
| template<typename TCallbackMethod , typename T > |
| smacc2::SmaccSignalConnection | onFailure (TCallbackMethod callback, T *object) |
| |
| | ISmaccClientBehavior () |
| |
| virtual | ~ISmaccClientBehavior () |
| |
| ISmaccStateMachine * | getStateMachine () |
| |
| std::string | getName () const |
| |
| template<typename SmaccClientType > |
| void | requiresClient (SmaccClientType *&storage) |
| |
| template<typename SmaccComponentType > |
| void | requiresComponent (SmaccComponentType *&storage, ComponentRequirement requirementType=ComponentRequirement::SOFT) |
| |
| template<typename SmaccComponentType > |
| void | requiresComponent (std::string name, SmaccComponentType *&storage, ComponentRequirement requirementType=ComponentRequirement::SOFT) |
| |
| | ISmaccUpdatable () |
| |
| | ISmaccUpdatable (rclcpp::Duration duration) |
| |
| void | executeUpdate (rclcpp::Node::SharedPtr node) |
| |
| void | setUpdatePeriod (rclcpp::Duration duration) |
| |
| void cl_px4_mr::CbPx4PathFollowerBase::onEntry |
( |
| ) |
|
|
overridevirtual |
Reimplemented from smacc2::ISmaccClientBehavior.
Definition at line 34 of file cb_px4_path_follower_base.cpp.
35{
37 {
38 RCLCPP_ERROR(
39 getLogger(),
"%s: local position / trajectory setpoint component missing - posting failure",
42 return;
43 }
45 {
46 RCLCPP_ERROR(
49 return;
50 }
51
52 NedPoint current;
58
59 std::vector<NedPoint> raw =
buildPath(current);
60 if (raw.empty())
61 {
62 RCLCPP_ERROR(
65 return;
66 }
67
70 {
71 NedPoint start = current;
72 start.yaw = std::numeric_limits<float>::quiet_NaN();
73 path_.push_back(start);
74 }
75 for (const NedPoint & v : raw)
76 {
78 {
79
80 path_.back().yaw = std::isnan(v.yaw) ?
path_.back().yaw : v.yaw;
81 continue;
82 }
84 }
85
90
92 const float lag = speed / 0.95f;
94 {
95 RCLCPP_WARN(
97 "%s: leash %.1f m is below 1.2x the expected tracking lag (%.1f m at %.1f m/s) - effective "
98 "speed will be throttled to ~%.1f m/s",
100 }
101
103 {
105 this->
setTimeout(std::chrono::milliseconds(
static_cast<int64_t
>(seconds * 1000.0f)));
107 }
108
109 RCLCPP_INFO(
111 "%s: following %zu vertices, %.1f m at %.1f m/s (leash %.1f m) from NED (%.1f, %.1f, %.1f) "
112 "to (%.1f, %.1f, %.1f)",
116
121}
CpVehicleLocalPosition * localPosition_
CpTrajectorySetpoint * trajectorySetpoint_
void setTimeout(std::chrono::milliseconds timeout)
std::chrono::steady_clock::time_point lastUpdateTime_
NedPoint commandFor(float s)
std::atomic< bool > active_
virtual std::vector< NedPoint > buildPath(const NedPoint ¤t)=0
virtual void onPathStarted(const std::vector< NedPoint > &)
virtual const char * behaviorName() const
void setPositionNED(float x, float y, float z, float yaw=std::numeric_limits< float >::quiet_NaN())
virtual rclcpp::Logger getLogger() const
float nedDistance(const NedPoint &a, const NedPoint &b)
std::vector< float > cumulativeLengths(const std::vector< NedPoint > &path)
bool prependCurrentPosition
References active_, cl_px4_mr::PathFollowerParams::autoTimeoutFactor, behaviorName(), buildPath(), commandFor(), cumLen_, cl_px4_mr::cumulativeLengths(), entryHeading_, followerParams_, cl_px4_mr::CpVehicleLocalPosition::getHeading(), smacc2::ISmaccClientBehavior::getLogger(), cl_px4_mr::CpVehicleLocalPosition::getX(), cl_px4_mr::CpVehicleLocalPosition::getY(), cl_px4_mr::CpVehicleLocalPosition::getZ(), cl_px4_mr::PathFollowerParams::groundSpeed, cl_px4_mr::CbPx4ClientBehaviorBase::hasTimeout(), cl_px4_mr::CpVehicleLocalPosition::isValid(), lastCmd_, lastProgressDecile_, lastUpdateTime_, cl_px4_mr::PathFollowerParams::leash, cl_px4_mr::CbPx4ClientBehaviorBase::localPosition_, cl_px4_mr::PathFollowerParams::minSegmentLength, cl_px4_mr::nedDistance(), onPathStarted(), path_, cl_px4_mr::CbPx4ClientBehaviorBase::postPx4Failure(), cl_px4_mr::PathFollowerParams::prependCurrentPosition, sCarrot_, cl_px4_mr::CpTrajectorySetpoint::setPositionNED(), cl_px4_mr::CbPx4ClientBehaviorBase::setTimeout(), totalLen_, cl_px4_mr::CbPx4ClientBehaviorBase::trajectorySetpoint_, cl_px4_mr::NedPoint::x, cl_px4_mr::NedPoint::y, cl_px4_mr::NedPoint::yaw, and cl_px4_mr::NedPoint::z.
| void cl_px4_mr::CbPx4PathFollowerBase::update |
( |
| ) |
|
|
overridevirtual |
Reimplemented from cl_px4_mr::CbPx4ClientBehaviorBase.
Definition at line 136 of file cb_px4_path_follower_base.cpp.
137{
139
141 {
142 return;
143 }
144
145 const auto now = std::chrono::steady_clock::now();
146 float dt = std::chrono::duration<float>(now -
lastUpdateTime_).count();
148 dt = std::clamp(dt, 0.0f, 0.5f);
149
151 {
152
153 return;
154 }
155
156 NedPoint vehicle;
160
161
165 {
167 }
168
171
174 {
176 RCLCPP_INFO(
178 }
179
180
182 {
183 const NedPoint & end =
path_.back();
185 const float dz = std::fabs(vehicle.z - end.z);
187 {
189 RCLCPP_INFO(
190 getLogger(),
"%s: path complete (xy err %.2f m, z err %.2f m) - posting success",
194 }
195 }
196}
virtual void onPathCompleted()
float nedDistanceXY(const NedPoint &a, const NedPoint &b)
References active_, cl_px4_mr::PathFollowerParams::arrivalXyTol, cl_px4_mr::PathFollowerParams::arrivalZTol, behaviorName(), commandFor(), cumLen_, followerParams_, smacc2::ISmaccClientBehavior::getLogger(), cl_px4_mr::CpVehicleLocalPosition::getX(), cl_px4_mr::CpVehicleLocalPosition::getY(), cl_px4_mr::CpVehicleLocalPosition::getZ(), cl_px4_mr::PathFollowerParams::groundSpeed, cl_px4_mr::CpVehicleLocalPosition::isValid(), lastCmd_, lastProgressDecile_, lastUpdateTime_, cl_px4_mr::PathFollowerParams::leash, cl_px4_mr::CbPx4ClientBehaviorBase::localPosition_, cl_px4_mr::nedDistance(), cl_px4_mr::nedDistanceXY(), onPathCompleted(), path_, cl_px4_mr::CbPx4ClientBehaviorBase::postPx4Success(), progressFraction(), cl_px4_mr::sampleAtArcLength(), sCarrot_, cl_px4_mr::CpTrajectorySetpoint::setPositionNED(), totalLen_, cl_px4_mr::CbPx4ClientBehaviorBase::trajectorySetpoint_, cl_px4_mr::CbPx4ClientBehaviorBase::update(), cl_px4_mr::NedPoint::x, cl_px4_mr::NedPoint::y, cl_px4_mr::NedPoint::yaw, and cl_px4_mr::NedPoint::z.