ARGoS 3
A parallel, multi-engine simulator for swarm robotics
tag_medium.cpp
Go to the documentation of this file.
1
7#include "tag_medium.h"
8#include <argos3/core/simulator/simulator.h>
9#include <argos3/core/simulator/space/space.h>
10#include <argos3/core/simulator/space/positional_indices/grid.h>
11#include <argos3/core/utility/configuration/argos_exception.h>
12#include <argos3/core/utility/logging/argos_log.h>
13
14namespace argos {
15
16 /****************************************/
17 /****************************************/
18
20 try {
21 CMedium::Init(t_tree);
22 /* Get the positional index method */
23 std::string strPosIndexMethod("grid");
24 GetNodeAttributeOrDefault(t_tree, "index", strPosIndexMethod, strPosIndexMethod);
25 /* Get the arena center and size */
26 CVector3 cArenaCenter;
27 CVector3 cArenaSize;
28 TConfigurationNode& tArena = GetNode(CSimulator::GetInstance().GetConfigurationRoot(), "arena");
29 GetNodeAttribute(tArena, "size", cArenaSize);
30 GetNodeAttributeOrDefault(tArena, "center", cArenaCenter, cArenaCenter);
31 /* Create the positional index for tag entities */
32 if(strPosIndexMethod == "grid") {
33 size_t punGridSize[3];
34 if(!NodeAttributeExists(t_tree, "grid_size")) {
35 punGridSize[0] = static_cast<size_t>(cArenaSize.GetX());
36 punGridSize[1] = static_cast<size_t>(cArenaSize.GetY());
37 punGridSize[2] = static_cast<size_t>(cArenaSize.GetZ());
38 }
39 else {
40 std::string strPosGridSize;
41 GetNodeAttribute(t_tree, "grid_size", strPosGridSize);
42 ParseValues<size_t>(strPosGridSize, 3, punGridSize, ',');
43 }
45 cArenaCenter - cArenaSize * 0.5f, cArenaCenter + cArenaSize * 0.5f,
46 punGridSize[0], punGridSize[1], punGridSize[2]);
47 m_pcTagEntityGridUpdateOperation = new CTagEntityGridUpdater(*pcGrid);
48 pcGrid->SetUpdateEntityOperation(m_pcTagEntityGridUpdateOperation);
49 m_pcTagEntityIndex = pcGrid;
50 }
51 else {
52 THROW_ARGOSEXCEPTION("Unknown method \"" << strPosIndexMethod << "\" for the positional index.");
53 }
54 }
55 catch(CARGoSException& ex) {
56 THROW_ARGOSEXCEPTION_NESTED("Error in initialization of the tag medium", ex);
57 }
58 }
59
60 /****************************************/
61 /****************************************/
62
64 Update();
65 }
66
67 /****************************************/
68 /****************************************/
69
71 m_pcTagEntityIndex->Reset();
72 }
73
74 /****************************************/
75 /****************************************/
76
78 delete m_pcTagEntityIndex;
79 if(m_pcTagEntityGridUpdateOperation != nullptr) {
80 delete m_pcTagEntityGridUpdateOperation;
81 }
82 }
83
84 /****************************************/
85 /****************************************/
86
88 m_pcTagEntityIndex->Update();
89 }
90
91 /****************************************/
92 /****************************************/
93
95 m_pcTagEntityIndex->AddEntity(c_entity);
96 m_pcTagEntityIndex->Update();
97 }
98
99 /****************************************/
100 /****************************************/
101
103 m_pcTagEntityIndex->RemoveEntity(c_entity);
104 m_pcTagEntityIndex->Update();
105 }
106
107 /****************************************/
108 /****************************************/
109
111 "tag",
112 "Michael Allwright [allsey87@gmail.com]",
113 "1.0",
114 "Manages tag entities.",
115 "This medium is required to manage the tag entities, so that the\n"
116 "associated camera sensors can find them. If you use a camera sensor, you\n"
117 "must add this medium the sensors XML configuration.\n\n"
118 "REQUIRED XML CONFIGURATION\n\n"
119 "<tag id=\"qrcodes\" />\n\n"
120 "OPTIONAL XML CONFIGURATION\n\n"
121 "None for the time being\n",
122 "Under development"
123 );
124
125 /****************************************/
126 /****************************************/
127
128}
#define THROW_ARGOSEXCEPTION_NESTED(message, nested)
This macro throws an ARGoS exception with the passed message and nesting the passed exception.
#define THROW_ARGOSEXCEPTION(message)
This macro throws an ARGoS exception with the passed message.
#define REGISTER_MEDIUM(CLASSNAME, LABEL, AUTHOR, VERSION, BRIEF_DESCRIPTION, LONG_DESCRIPTION, STATUS)
Definition medium.h:108
The namespace containing all the ARGoS related code.
Definition ci_actuator.h:12
bool NodeAttributeExists(TConfigurationNode &t_node, const std::string &str_attribute)
Returns true if the specified attribute of a node exists.
void GetNodeAttributeOrDefault(TConfigurationNode &t_node, const std::string &str_attribute, T &t_buffer, const T &t_default)
Returns the value of a node's attribute, or the passed default value.
void ParseValues(std::istream &str_input, UInt32 un_num_fields, T *pt_field_buffer, const char ch_delimiter='\n')
ticpp::Element TConfigurationNode
The ARGoS configuration XML node.
TConfigurationNode & GetNode(TConfigurationNode &t_node, const std::string &str_tag)
Given a tree root node, returns the first of its child nodes with the wanted name.
void GetNodeAttribute(TConfigurationNode &t_node, const std::string &str_attribute, T &t_buffer)
Returns the value of a node's attribute.
virtual void Init(TConfigurationNode &t_tree)
Initialized the medium.
Definition medium.cpp:16
static CSimulator & GetInstance()
Returns the instance to the CSimulator class.
Definition simulator.cpp:78
void SetUpdateEntityOperation(CEntityOperation *pc_operation)
Definition grid_impl.h:907
The exception that wraps all errors in ARGoS.
A 3D vector class.
Definition vector3.h:31
Real GetX() const
Returns the x coordinate of this vector.
Definition vector3.h:105
Real GetY() const
Returns the y coordinate of this vector.
Definition vector3.h:121
Real GetZ() const
Returns the z coordinate of this vector.
Definition vector3.h:137
virtual void Destroy()
Undoes whatever was done by Init().
void AddEntity(CTagEntity &c_entity)
Adds the specified entity to the list of managed entities.
virtual void Reset()
Resets the resource.
virtual void Update()
Updates the state of this medium.
void RemoveEntity(CTagEntity &c_entity)
Removes the specified entity from the list of managed entities.
virtual void PostSpaceInit()
Executes extra initialization activities after the space has been initialized.
virtual void Init(TConfigurationNode &t_tree)
Initialized the medium.