ARGoS 3
A parallel, multi-engine simulator for swarm robotics
led_medium.cpp
Go to the documentation of this file.
1#include "led_medium.h"
2#include <argos3/core/simulator/simulator.h>
3#include <argos3/core/simulator/space/space.h>
4#include <argos3/core/simulator/space/positional_indices/grid.h>
5#include <argos3/core/utility/configuration/argos_exception.h>
6#include <argos3/core/utility/logging/argos_log.h>
7
8namespace argos {
9
10 /****************************************/
11 /****************************************/
12
15
16 /****************************************/
17 /****************************************/
18
21
22 /****************************************/
23 /****************************************/
24
26 try {
27 CMedium::Init(t_tree);
28 /* Get the positional index method */
29 std::string strPosIndexMethod("grid");
30 GetNodeAttributeOrDefault(t_tree, "index", strPosIndexMethod, strPosIndexMethod);
31 /* Get the arena center and size */
32 CVector3 cArenaCenter;
33 CVector3 cArenaSize;
34 TConfigurationNode& tArena = GetNode(CSimulator::GetInstance().GetConfigurationRoot(), "arena");
35 GetNodeAttribute(tArena, "size", cArenaSize);
36 GetNodeAttributeOrDefault(tArena, "center", cArenaCenter, cArenaCenter);
37 /* Create the positional index for LED entities */
38 if(strPosIndexMethod == "grid") {
39 size_t punGridSize[3];
40 if(!NodeAttributeExists(t_tree, "grid_size")) {
41 punGridSize[0] = static_cast<UInt32>(cArenaSize.GetX());
42 punGridSize[1] = static_cast<UInt32>(cArenaSize.GetY());
43 punGridSize[2] = static_cast<UInt32>(cArenaSize.GetZ());
44 }
45 else {
46 std::string strPosGridSize;
47 GetNodeAttribute(t_tree, "grid_size", strPosGridSize);
48 ParseValues<size_t>(strPosGridSize, 3, punGridSize, ',');
49 }
51 cArenaCenter - cArenaSize * 0.5f, cArenaCenter + cArenaSize * 0.5f,
52 punGridSize[0], punGridSize[1], punGridSize[2]);
53 m_pcLEDEntityGridUpdateOperation = new CLEDEntityGridUpdater(*pcGrid);
54 pcGrid->SetUpdateEntityOperation(m_pcLEDEntityGridUpdateOperation);
55 m_pcLEDEntityIndex = pcGrid;
56 }
57 else {
58 THROW_ARGOSEXCEPTION("Unknown method \"" << strPosIndexMethod << "\" for the positional index.");
59 }
60 }
61 catch(CARGoSException& ex) {
62 THROW_ARGOSEXCEPTION_NESTED("Error in initialization of the LED medium", ex);
63 }
64 }
65
66 /****************************************/
67 /****************************************/
68
70 Update();
71 }
72
73 /****************************************/
74 /****************************************/
75
77 m_pcLEDEntityIndex->Reset();
78 }
79
80 /****************************************/
81 /****************************************/
82
84 delete m_pcLEDEntityIndex;
85 if(m_pcLEDEntityGridUpdateOperation != nullptr) {
86 delete m_pcLEDEntityGridUpdateOperation;
87 }
88 }
89
90 /****************************************/
91 /****************************************/
92
94 m_pcLEDEntityIndex->Update();
95 }
96
97 /****************************************/
98 /****************************************/
99
101 m_pcLEDEntityIndex->AddEntity(c_entity);
102 m_pcLEDEntityIndex->Update();
103 }
104
105 /****************************************/
106 /****************************************/
107
109 m_pcLEDEntityIndex->RemoveEntity(c_entity);
110 m_pcLEDEntityIndex->Update();
111 }
112
113 /****************************************/
114 /****************************************/
115
117 "led",
118 "Carlo Pinciroli [ilpincy@gmail.com]",
119 "1.0",
120 "Manages the LEDs.",
121 "This medium is required to manage the LED entities, thus allowing the\n"
122 "associated camera sensors to work properly. If you intend to use a camera\n"
123 "sensor that detects colored blobs, you must add this medium to the XML\n"
124 "configuration file.\n\n"
125 "REQUIRED XML CONFIGURATION\n\n"
126 "<led id=\"led\" />\n\n"
127 "OPTIONAL XML CONFIGURATION\n\n"
128 "None for the time being\n",
129 "Under development"
130 );
131
132 /****************************************/
133 /****************************************/
134
135}
unsigned int UInt32
32-bit unsigned integer.
Definition datatypes.h:97
#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 Reset()
Resets the resource.
virtual ~CLEDMedium()
Class destructor.
virtual void Init(TConfigurationNode &t_tree)
Initialized the medium.
virtual void Update()
Updates the state of this medium.
virtual void PostSpaceInit()
Executes extra initialization activities after the space has been initialized.
void RemoveEntity(CLEDEntity &c_entity)
Removes the specified entity from the list of managed entities.
CLEDMedium()
Class constructor.
void AddEntity(CLEDEntity &c_entity)
Adds the specified entity to the list of managed entities.
virtual void Destroy()
Undoes whatever was done by Init().