19 #include <mrpt/core/WorkerThreadsPool.h> 20 #include <mrpt/io/CFileGZOutputStream.h> 21 #include <mrpt/poses/CPose2DInterpolator.h> 22 #include <mrpt/system/COutputLogger.h> 23 #include <mrpt/system/CTimeLogger.h> 24 #include <mrpt/typemeta/TEnumType.h> 94 class NavEngine :
public mrpt::system::COutputLogger
128 double dist_to_target_for_sending_event{0};
133 double dist_check_target_is_blocked{0.6};
139 double planner_bbox_margin = 4.0;
141 double enqueuedActionsToleranceXY = 0.05;
142 double enqueuedActionsTolerancePhi = 2.0_deg;
143 double enqueuedActionsTimeoutMultiplier = 1.3;
145 double lookAheadImmediateCollisionChecking = 1.0;
147 double maxDistanceForTargetApproach = 1.5;
148 double maxRelativeHeadingForTargetApproach = 180.0_deg;
153 double timeoutNotGettingCloserGoal = 30;
155 bool generateNavLogFiles =
false;
159 std::string navLogFilesPrefix =
"./selfdriving";
161 void loadFrom(
const mrpt::containers::yaml& c);
162 mrpt::containers::yaml saveTo()
const;
185 virtual void initialize();
193 return absoluteSpeedLimits_;
197 void absoluteSpeedLimits(
198 const mrpt::kinematics::CVehicleVelCmd::TVelCmdParams& newLimits);
212 virtual void navigation_step();
215 virtual void cancel();
218 virtual void resume();
221 virtual void suspend();
224 virtual void reset_nav_error();
235 return navErrorReason_;
249 return innerState_.waypointNavStatus;
256 mrpt::system::CTimeLogger navProfiler_{
true ,
"NavEngine"};
280 void send_path_to_viz_and_navlog(
282 const std::optional<TNodeID>& finalNode,
284 const std::vector<CostEvaluator::Ptr>& costEvaluators);
289 void send_current_state_to_viz_and_navlog();
299 bool initialized_ =
false;
309 double lastVehiclePosRobotTime_ = 0;
316 void dispatch_pending_nav_events();
322 virtual void update_robot_kinematic_state();
327 virtual void impl_navigation_step();
338 void internal_on_start_new_navigation();
339 void internal_start_navlog_file();
340 void internal_write_to_navlog_file();
344 bool navlogOutputFirstEntry_ =
true;
347 mrpt::WorkerThreadsPool pathPlannerPool_{
348 1 , mrpt::WorkerThreadsPool::POLICY_DROP_OLD,
375 mrpt::math::TPoint2D target_waypoint{.0, .0};
379 if (timeLastAlignCmd_ == INVALID_TIMESTAMP)
382 return mrpt::system::timeDifference(
383 timeLastAlignCmd_, mrpt::system::now());
388 timeLastAlignCmd_ = mrpt::system::now();
393 isAfterOvershoot_ =
true;
397 mrpt::system::TTimeStamp timeLastAlignCmd_ = INVALID_TIMESTAMP;
398 bool isAligning_ =
false;
399 bool isAfterOvershoot_ =
false;
442 activePlanEdgeIndex.reset();
443 activePlanEdgeSentIndex.reset();
444 activePlanEdgesSentOut.clear();
445 activePlanInitOdometry.reset();
447 if (alsoClearComputedPath)
449 activePlanOutput = {};
450 activePlanPath.clear();
451 activePlanPathEdges.clear();
452 pathPlannerTargetWpIdx.reset();
453 lastDistanceToGoalTimestamp.reset();
454 lastDistanceToGoal.reset();
489 sentOutCmdInThisIteration.reset();
490 planVizForNavLog.reset();
491 stateVizForNavLog.reset();
492 navlogDebugMessages.clear();
504 double badNavAlarmMinDistTarget_ = std::numeric_limits<double>::max();
505 mrpt::Clock::time_point badNavAlarmLastMinDistTime_ =
509 bool navigationEndEventSent =
false;
520 void check_immediate_collision();
523 void check_have_to_replan();
527 void check_new_planner_output();
530 void send_next_motion_cmd_or_nop();
543 void enqueue_path_planner_towards(
545 const std::optional<TNodeID>& startingFromNodeID = std::nullopt);
553 bool approach_target_controller();
557 void internal_mark_current_wp_as_reached();
560 bool check_all_waypoints_are_done();
566 bool aboutToReach =
false;
567 double distanceToWaypoint = std::numeric_limits<double>::max();
579 bool checkHasReachedTarget(
const double targetDist)
const override;
582 virtual void waypoints_navigation_step();
584 bool waypoints_isAligning()
const {
return m_is_aligning; }
588 bool m_was_aligning{
false};
589 bool m_is_aligning{
false};
590 mrpt::system::TTimeStamp m_last_alignment_cmd;
Definition: TPS_Astar.h:25
std::optional< waypoint_idx_t > pathPlannerTargetWpIdx
Definition: NavEngine.h:421
Definition: VehicleOdometryState.h:18
Definition: CostEvaluatorCostMap.h:26
std::optional< double > lastNavigationStepEndTime
Definition: NavEngine.h:484
std::vector< std::string > navlogDebugMessages
Definition: NavEngine.h:482
Definition: NavEngine.h:50
std::optional< EnqueuedCondition > activeEnqueuedConditionForViz
Definition: NavEngine.h:434
mrpt::opengl::CSetOfObjects::Ptr planVizForNavLog
Definition: NavEngine.h:480
std::optional< size_t > activePlanEdgeIndex
Definition: NavEngine.h:464
MRPT_FILL_ENUM_MEMBER(mpp, NavStatus::IDLE)
std::function< void(void)> on_viz_pre_modify
Definition: NavEngine.h:175
void clear()
Definition: NavEngine.h:407
Definition: CostEvaluatorPreferredWaypoint.h:26
const NavErrorReason & error_reason() const
Definition: NavEngine.h:233
Definition: bestTrajectory.h:15
std::shared_ptr< mrpt::opengl::CSetOfObjects > vizSceneToModify
Definition: NavEngine.h:176
std::vector< CostEvaluator::Ptr > costEvaluators
A copy of the employed costs.
Definition: NavEngine.h:267
void clearPerIterationData()
Definition: NavEngine.h:487
NavErrorReason navErrorReason_
Definition: NavEngine.h:295
std::optional< mrpt::math::TPose2D > activePlanInitOdometry
Definition: NavEngine.h:474
TrajectoriesAndRobotShape ptgs
Definition: NavEngine.h:117
Definition: TrajectoriesAndRobotShape.h:25
Definition: NavEngine.h:106
Definition: SE2_KinState.h:65
Definition: Waypoints.h:199
std::string error_msg
Human friendly description of the error.
Definition: NavEngine.h:54
std::optional< mrpt::math::TPose2D > startingFromCurrentPlanNodePose
(See same name field in PathPlannerInput)
Definition: NavEngine.h:272
CostEvaluatorCostMap::Parameters globalCostParameters
Definition: NavEngine.h:166
Configuration config_
Definition: NavEngine.h:187
void active_plan_reset(bool alsoClearComputedPath=false)
Definition: NavEngine.h:440
void setAsAligningNowAfterOvershoot()
Definition: NavEngine.h:390
void end_waypoints_access()
Definition: NavEngine.h:253
double timeSinceLast() const
Definition: NavEngine.h:377
mrpt::kinematics::CVehicleVelCmd::TVelCmdParams absoluteSpeedLimits_
Definition: NavEngine.h:517
std::optional< mrpt::math::TPose2D > collisionCheckingPosePrediction
From check_immediate_collision(). For Debug visualization.
Definition: NavEngine.h:424
bool is_aligning_after_overshoot() const
Definition: NavEngine.h:374
std::list< std::function< void(void)> > pendingEvents_
Definition: NavEngine.h:314
Definition: NavEngine.h:260
std::vector< MotionPrimitivesTreeSE2::node_t > activePlanPath
Definition: NavEngine.h:428
VehicleLocalizationState lastVehicleLocalization_
Definition: NavEngine.h:307
const mrpt::kinematics::CVehicleVelCmd::TVelCmdParams & absoluteSpeedLimits() const
Definition: NavEngine.h:190
CurrentNavInternalState innerState_
Definition: NavEngine.h:513
WaypointStatusSequence waypointNavStatus
Definition: NavEngine.h:411
void setAsAligningNow()
Definition: NavEngine.h:385
Definition: NavEngine.h:371
std::set< size_t > activePlanEdgesSentOut
Definition: NavEngine.h:470
Definition: PlannerOutput.h:19
WaypointStatusSequence & beginWaypointsAccess()
Definition: NavEngine.h:246
ObstacleSource::Ptr localSensedObstacleSource
Definition: NavEngine.h:115
Definition: Waypoints.h:146
std::shared_ptr< ObstacleSource > Ptr
Definition: ObstacleSource.h:20
Definition: NavEngine.h:94
CostEvaluatorPreferredWaypoint::Parameters preferWaypointsParameters
Definition: NavEngine.h:168
std::optional< VehicleOdometryState > lastEnqueuedTriggerOdometry
Definition: NavEngine.h:438
NavStatus
Definition: NavEngine.h:34
std::optional< double > lastDistanceToGoalTimestamp
Definition: NavEngine.h:498
Definition: NavEngine.h:562
NavStatus current_status() const
Definition: NavEngine.h:227
mrpt::opengl::CSetOfObjects::Ptr stateVizForNavLog
Definition: NavEngine.h:481
TargetApproachController::Ptr targetApproachController
Definition: NavEngine.h:119
VehicleOdometryState lastVehicleOdometry_
Definition: NavEngine.h:308
mrpt::poses::CPose2DInterpolator latestPoses
Definition: NavEngine.h:414
std::recursive_mutex navMtx_
Definition: NavEngine.h:302
mpp::PlannerOutput po
Definition: NavEngine.h:264
mrpt::system::output_logger_callback_t loggerToNavlog_
Definition: NavEngine.h:297
mrpt::kinematics::CVehicleVelCmd::Ptr sentOutCmdInThisIteration
Definition: NavEngine.h:479
bool is_aligning() const
Definition: NavEngine.h:373
void reset()
Definition: NavEngine.h:376
CostEvaluatorCostMap::Parameters localCostParameters
Definition: NavEngine.h:167
std::future< PathPlannerOutput > pathPlannerFuture
Definition: NavEngine.h:416
VehicleMotionInterface::Ptr vehicleMotionInterface
Definition: NavEngine.h:112
NavError
Definition: NavEngine.h:43
NavEngine()
Definition: NavEngine.h:98
Definition: NavEngine.h:403
std::optional< TNodeID > startingFromCurrentPlanNode
(See same name field in PathPlannerInput)
Definition: NavEngine.h:270
Definition: VehicleLocalizationState.h:20
std::function< void(void)> on_viz_post_modify
Definition: NavEngine.h:177
TPS_Astar_Parameters plannerParams
Definition: NavEngine.h:164
PathPlannerOutput activePlanOutput
Definition: NavEngine.h:427
std::optional< size_t > activePlanEdgeSentIndex
Definition: NavEngine.h:468
std::optional< double > timStartThisNavStep
Definition: NavEngine.h:485
std::vector< MotionPrimitivesTreeSE2::edge_t > activePlanPathEdges
Definition: NavEngine.h:429
std::size_t waypoint_idx_t
Definition: Waypoints.h:25
std::optional< mrpt::io::CFileGZOutputStream > navlog_output_file_
Created in internal_start_navlog_file()
Definition: NavEngine.h:343