SMACC2
Loading...
Searching...
No Matches
cl_px4_mr::CbSpiralUp Class Reference

#include <cb_spiral_up.hpp>

Inheritance diagram for cl_px4_mr::CbSpiralUp:
Inheritance graph
Collaboration diagram for cl_px4_mr::CbSpiralUp:
Collaboration graph

Public Member Functions

 CbSpiralUp (SpiralUpParams params={})
 
void onEntry () override
 
void onExit () override
 
void update () override
 
const SpiralUpParams & params () const
 
- Public Member Functions inherited from cl_px4_mr::CbPx4ClientBehaviorBase
template<typename TOrthogonal , typename TSourceObject >
void onStateOrthogonalAllocation ()
 
virtual ~CbPx4ClientBehaviorBase ()
 
void setTimeout (std::chrono::milliseconds timeout)
 
bool hasTimeout () const
 
- Public Member Functions inherited from smacc2::SmaccAsyncClientBehavior
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)
 
- Public Member Functions inherited from smacc2::ISmaccClientBehavior
 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)
 
- Public Member Functions inherited from smacc2::ISmaccUpdatable
 ISmaccUpdatable ()
 
 ISmaccUpdatable (rclcpp::Duration duration)
 
void executeUpdate (rclcpp::Node::SharedPtr node)
 
void setUpdatePeriod (rclcpp::Duration duration)
 

Private Member Functions

void command ()
 

Private Attributes

SpiralUpParams params_
 
float startAltitude_ = 0.0f
 
float startAngle_ = 0.0f
 
float currentAngle_ = 0.0f
 
int lastReportedOrbit_ = -1
 
std::chrono::steady_clock::time_point lastUpdateTime_
 

Additional Inherited Members

- Protected Member Functions inherited from cl_px4_mr::CbPx4ClientBehaviorBase
virtual void wireCompletionSignals ()
 
void postPx4Success ()
 
void postPx4Failure ()
 
- Protected Member Functions inherited from smacc2::SmaccAsyncClientBehavior
void postSuccessEvent ()
 
void postFailureEvent ()
 
virtual void dispose () override
 
bool isShutdownRequested ()
 onEntry is executed in a new thread. However the current state cannot be left until the onEntry thread finishes. This flag can be checked from the onEntry thread to force finishing the thread.
 
- Protected Member Functions inherited from smacc2::ISmaccClientBehavior
virtual void runtimeConfigure ()
 
template<typename EventType >
void postEvent (const EventType &ev)
 
template<typename EventType >
void postEvent ()
 
ISmaccState * getCurrentState ()
 
virtual rclcpp::Node::SharedPtr getNode () const
 
virtual rclcpp::Logger getLogger () const
 
- Protected Member Functions inherited from smacc2::ISmaccUpdatable
- Protected Attributes inherited from cl_px4_mr::CbPx4ClientBehaviorBase
CpVehicleCommand * vehicleCommand_ = nullptr
 
CpVehicleStatus * vehicleStatus_ = nullptr
 
CpTrajectorySetpoint * trajectorySetpoint_ = nullptr
 
CpGoalChecker * goalChecker_ = nullptr
 
CpVehicleLocalPosition * localPosition_ = nullptr
 
CpOffboardKeepAlive * offboardKeepAlive_ = nullptr
 

Detailed Description

Definition at line 48 of file cb_spiral_up.hpp.

Constructor & Destructor Documentation

◆ CbSpiralUp()

cl_px4_mr::CbSpiralUp::CbSpiralUp ( SpiralUpParams params = {})
explicit

Definition at line 22 of file cb_spiral_up.cpp.

22: params_(params) {}
const SpiralUpParams & params() const
SpiralUpParams params_

Member Function Documentation

◆ command()

void cl_px4_mr::CbSpiralUp::command ( )
private

Definition at line 47 of file cb_spiral_up.cpp.

48{
49 const float turned = currentAngle_ - startAngle_;
50 const float orbits = std::fabs(turned) / (2.0f * static_cast<float>(M_PI));
51 const float climb = std::min(orbits * params_.climbPerOrbitM, params_.climbTotalM);
52 const float x = params_.centerX + params_.radiusM * std::cos(currentAngle_);
53 const float y = params_.centerY + params_.radiusM * std::sin(currentAngle_);
54 const float z = -(startAltitude_ + climb); // NED: up is negative
55 const float yaw = currentAngle_ + static_cast<float>(M_PI); // nose toward the axis
57
58 const int orbit = static_cast<int>(orbits);
59 if (orbit != lastReportedOrbit_)
60 {
61 lastReportedOrbit_ = orbit;
62 RCLCPP_INFO(
63 getLogger(), "CbSpiralUp: orbit %d, commanding %.1f m up", orbit,
64 static_cast<double>(startAltitude_ + climb));
65 }
66}
void setPositionNED(float x, float y, float z, float yaw=std::numeric_limits< float >::quiet_NaN())
virtual rclcpp::Logger getLogger() const

References cl_px4_mr::SpiralUpParams::centerX, cl_px4_mr::SpiralUpParams::centerY, cl_px4_mr::SpiralUpParams::climbPerOrbitM, cl_px4_mr::SpiralUpParams::climbTotalM, currentAngle_, smacc2::ISmaccClientBehavior::getLogger(), lastReportedOrbit_, params_, cl_px4_mr::SpiralUpParams::radiusM, cl_px4_mr::CpTrajectorySetpoint::setPositionNED(), startAltitude_, startAngle_, and cl_px4_mr::CbPx4ClientBehaviorBase::trajectorySetpoint_.

Referenced by onEntry(), and update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ onEntry()

void cl_px4_mr::CbSpiralUp::onEntry ( )
overridevirtual

Reimplemented from smacc2::ISmaccClientBehavior.

Definition at line 24 of file cb_spiral_up.cpp.

25{
26 const float dx = localPosition_->getX() - params_.centerX;
27 const float dy = localPosition_->getY() - params_.centerY;
28 startAngle_ = std::atan2(dy, dx);
33 lastUpdateTime_ = std::chrono::steady_clock::now();
34
35 RCLCPP_INFO(
36 getLogger(),
37 "CbSpiralUp: helix about NED (%.1f, %.1f), radius %.1f m, from %.1f m up %.1f m at %.1f m per "
38 "orbit (%.1f orbits), %.2f rad/s",
39 static_cast<double>(params_.centerX), static_cast<double>(params_.centerY),
40 static_cast<double>(params_.radiusM), static_cast<double>(startAltitude_),
41 static_cast<double>(params_.climbTotalM), static_cast<double>(params_.climbPerOrbitM),
42 static_cast<double>(params_.climbTotalM / params_.climbPerOrbitM),
43 static_cast<double>(params_.angularVelocityRadS));
44 command();
45}
std::chrono::steady_clock::time_point lastUpdateTime_

References cl_px4_mr::SpiralUpParams::angularVelocityRadS, cl_px4_mr::SpiralUpParams::centerX, cl_px4_mr::SpiralUpParams::centerY, cl_px4_mr::SpiralUpParams::climbPerOrbitM, cl_px4_mr::SpiralUpParams::climbTotalM, command(), currentAngle_, smacc2::ISmaccClientBehavior::getLogger(), cl_px4_mr::CpVehicleLocalPosition::getX(), cl_px4_mr::CpVehicleLocalPosition::getY(), cl_px4_mr::CpVehicleLocalPosition::getZ(), lastReportedOrbit_, lastUpdateTime_, cl_px4_mr::CbPx4ClientBehaviorBase::localPosition_, params_, cl_px4_mr::SpiralUpParams::radiusM, startAltitude_, cl_px4_mr::SpiralUpParams::startAltitudeM, and startAngle_.

Here is the call graph for this function:

◆ onExit()

void cl_px4_mr::CbSpiralUp::onExit ( )
inlineoverridevirtual

Reimplemented from smacc2::ISmaccClientBehavior.

Definition at line 54 of file cb_spiral_up.hpp.

54{}

◆ params()

const SpiralUpParams & cl_px4_mr::CbSpiralUp::params ( ) const
inline

Definition at line 57 of file cb_spiral_up.hpp.

57{ return params_; }

References params_.

◆ update()

void cl_px4_mr::CbSpiralUp::update ( )
overridevirtual

Reimplemented from cl_px4_mr::CbPx4ClientBehaviorBase.

Definition at line 68 of file cb_spiral_up.cpp.

69{
71
72 const auto now = std::chrono::steady_clock::now();
73 const double dt = std::chrono::duration<double>(now - lastUpdateTime_).count();
74 lastUpdateTime_ = now;
75 currentAngle_ += params_.angularVelocityRadS * static_cast<float>(dt);
76 command();
77
78 const float turned = std::fabs(currentAngle_ - startAngle_);
79 const float needed =
80 params_.climbTotalM / params_.climbPerOrbitM * 2.0f * static_cast<float>(M_PI);
81 if (turned >= needed)
82 {
83 RCLCPP_INFO(
84 getLogger(), "CbSpiralUp: %.1f m gained over %.1f orbits - posting success",
85 static_cast<double>(params_.climbTotalM), static_cast<double>(turned / (2.0f * M_PI)));
86 this->postPx4Success();
87 }
88}

References cl_px4_mr::SpiralUpParams::angularVelocityRadS, cl_px4_mr::SpiralUpParams::climbPerOrbitM, cl_px4_mr::SpiralUpParams::climbTotalM, command(), currentAngle_, smacc2::ISmaccClientBehavior::getLogger(), lastUpdateTime_, params_, cl_px4_mr::CbPx4ClientBehaviorBase::postPx4Success(), startAngle_, and cl_px4_mr::CbPx4ClientBehaviorBase::update().

Here is the call graph for this function:

Member Data Documentation

◆ currentAngle_

float cl_px4_mr::CbSpiralUp::currentAngle_ = 0.0f
private

Definition at line 65 of file cb_spiral_up.hpp.

Referenced by command(), onEntry(), and update().

◆ lastReportedOrbit_

int cl_px4_mr::CbSpiralUp::lastReportedOrbit_ = -1
private

Definition at line 66 of file cb_spiral_up.hpp.

Referenced by command(), and onEntry().

◆ lastUpdateTime_

std::chrono::steady_clock::time_point cl_px4_mr::CbSpiralUp::lastUpdateTime_
private

Definition at line 67 of file cb_spiral_up.hpp.

Referenced by onEntry(), and update().

◆ params_

SpiralUpParams cl_px4_mr::CbSpiralUp::params_
private

Definition at line 62 of file cb_spiral_up.hpp.

Referenced by command(), onEntry(), params(), and update().

◆ startAltitude_

float cl_px4_mr::CbSpiralUp::startAltitude_ = 0.0f
private

Definition at line 63 of file cb_spiral_up.hpp.

Referenced by command(), and onEntry().

◆ startAngle_

float cl_px4_mr::CbSpiralUp::startAngle_ = 0.0f
private

Definition at line 64 of file cb_spiral_up.hpp.

Referenced by command(), onEntry(), and update().


The documentation for this class was generated from the following files: