diff options
Diffstat (limited to 'thirdparty/rvo2/rvo2_2d/Agent2d.h')
-rw-r--r-- | thirdparty/rvo2/rvo2_2d/Agent2d.h | 219 |
1 files changed, 98 insertions, 121 deletions
diff --git a/thirdparty/rvo2/rvo2_2d/Agent2d.h b/thirdparty/rvo2/rvo2_2d/Agent2d.h index c666c2de7b..f5b9ed8ebc 100644 --- a/thirdparty/rvo2/rvo2_2d/Agent2d.h +++ b/thirdparty/rvo2/rvo2_2d/Agent2d.h @@ -2,13 +2,14 @@ * Agent2d.h * RVO2 Library * - * Copyright 2008 University of North Carolina at Chapel Hill + * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill + * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,134 +28,110 @@ * Chapel Hill, N.C. 27599-3175 * United States of America * - * <http://gamma.cs.unc.edu/RVO2/> + * <https://gamma.cs.unc.edu/RVO2/> */ #ifndef RVO2D_AGENT_H_ #define RVO2D_AGENT_H_ /** - * \file Agent2d.h - * \brief Contains the Agent class. + * @file Agent2d.h + * @brief Declares the Agent2D class. */ -#include "Definitions.h" -#include "RVOSimulator2d.h" +#include <cstddef> +#include <cstdint> +#include <utility> +#include <vector> + +#include "Line.h" +#include "Vector2.h" namespace RVO2D { - /** - * \brief Defines an agent in the simulation. - */ - class Agent2D { - public: - /** - * \brief Constructs an agent instance. - * \param sim The simulator instance. - */ - explicit Agent2D(); - - /** - * \brief Computes the neighbors of this agent. - */ - void computeNeighbors(RVOSimulator2D *sim_); - - /** - * \brief Computes the new velocity of this agent. - */ - void computeNewVelocity(RVOSimulator2D *sim_); - - /** - * \brief Inserts an agent neighbor into the set of neighbors of - * this agent. - * \param agent A pointer to the agent to be inserted. - * \param rangeSq The squared range around this agent. - */ - void insertAgentNeighbor(const Agent2D *agent, float &rangeSq); - - /** - * \brief Inserts a static obstacle neighbor into the set of neighbors - * of this agent. - * \param obstacle The number of the static obstacle to be - * inserted. - * \param rangeSq The squared range around this agent. - */ - void insertObstacleNeighbor(const Obstacle2D *obstacle, float rangeSq); - - /** - * \brief Updates the two-dimensional position and two-dimensional - * velocity of this agent. - */ - void update(RVOSimulator2D *sim_); - - std::vector<std::pair<float, const Agent2D *> > agentNeighbors_; - size_t maxNeighbors_; - float maxSpeed_; - float neighborDist_; - Vector2 newVelocity_; - std::vector<std::pair<float, const Obstacle2D *> > obstacleNeighbors_; - std::vector<Line> orcaLines_; - Vector2 position_; - Vector2 prefVelocity_; - float radius_; - float timeHorizon_; - float timeHorizonObst_; - Vector2 velocity_; - float height_ = 0.0; - float elevation_ = 0.0; - uint32_t avoidance_layers_ = 1; - uint32_t avoidance_mask_ = 1; - float avoidance_priority_ = 1.0; - - size_t id_; - - friend class KdTree2D; - friend class RVOSimulator2D; - }; - - /** - * \relates Agent - * \brief Solves a one-dimensional linear program on a specified line - * subject to linear constraints defined by lines and a circular - * constraint. - * \param lines Lines defining the linear constraints. - * \param lineNo The specified line constraint. - * \param radius The radius of the circular constraint. - * \param optVelocity The optimization velocity. - * \param directionOpt True if the direction should be optimized. - * \param result A reference to the result of the linear program. - * \return True if successful. - */ - bool linearProgram1(const std::vector<Line> &lines, size_t lineNo, - float radius, const Vector2 &optVelocity, - bool directionOpt, Vector2 &result); - - /** - * \relates Agent - * \brief Solves a two-dimensional linear program subject to linear - * constraints defined by lines and a circular constraint. - * \param lines Lines defining the linear constraints. - * \param radius The radius of the circular constraint. - * \param optVelocity The optimization velocity. - * \param directionOpt True if the direction should be optimized. - * \param result A reference to the result of the linear program. - * \return The number of the line it fails on, and the number of lines if successful. - */ - size_t linearProgram2(const std::vector<Line> &lines, float radius, - const Vector2 &optVelocity, bool directionOpt, - Vector2 &result); - - /** - * \relates Agent - * \brief Solves a two-dimensional linear program subject to linear - * constraints defined by lines and a circular constraint. - * \param lines Lines defining the linear constraints. - * \param numObstLines Count of obstacle lines. - * \param beginLine The line on which the 2-d linear program failed. - * \param radius The radius of the circular constraint. - * \param result A reference to the result of the linear program. - */ - void linearProgram3(const std::vector<Line> &lines, size_t numObstLines, size_t beginLine, - float radius, Vector2 &result); -} +class KdTree2D; +class Obstacle2D; + +/** + * @brief Defines an agent in the simulation. + */ +class Agent2D { + public: + /** + * @brief Constructs an agent instance. + */ + Agent2D(); + + /** + * @brief Destroys this agent instance. + */ + ~Agent2D(); + + /** + * @brief Computes the neighbors of this agent. + * @param[in] kdTree A pointer to the k-D trees for agents and static + * obstacles in the simulation. + */ + void computeNeighbors(const KdTree2D *kdTree); + + /** + * @brief Computes the new velocity of this agent. + * @param[in] timeStep The time step of the simulation. + */ + void computeNewVelocity(float timeStep); + + /** + * @brief Inserts an agent neighbor into the set of neighbors of this + * agent. + * @param[in] agent A pointer to the agent to be inserted. + * @param[in, out] rangeSq The squared range around this agent. + */ + void insertAgentNeighbor(const Agent2D *agent, + float &rangeSq); /* NOLINT(runtime/references) */ + + /** + * @brief Inserts a static obstacle neighbor into the set of + * neighbors of this agent. + * @param[in] obstacle The number of the static obstacle to be inserted. + * @param[in, out] rangeSq The squared range around this agent. + */ + void insertObstacleNeighbor(const Obstacle2D *obstacle, float rangeSq); + + /** + * @brief Updates the two-dimensional position and two-dimensional + * velocity of this agent. + * @param[in] timeStep The time step of the simulation. + */ + void update(float timeStep); + + /* Not implemented. */ + Agent2D(const Agent2D &other); + + /* Not implemented. */ + Agent2D &operator=(const Agent2D &other); + + std::vector<std::pair<float, const Agent2D *> > agentNeighbors_; + std::vector<std::pair<float, const Obstacle2D *> > obstacleNeighbors_; + std::vector<Line> orcaLines_; + Vector2 newVelocity_; + Vector2 position_; + Vector2 prefVelocity_; + Vector2 velocity_; + std::size_t id_; + std::size_t maxNeighbors_; + float maxSpeed_; + float neighborDist_; + float radius_; + float timeHorizon_; + float timeHorizonObst_; + float height_ = 0.0; + float elevation_ = 0.0; + uint32_t avoidance_layers_ = 1; + uint32_t avoidance_mask_ = 1; + float avoidance_priority_ = 1.0; + + friend class KdTree2D; + friend class RVOSimulator2D; +}; +} /* namespace RVO */ #endif /* RVO2D_AGENT_H_ */ |