ARGoS 3
A parallel, multi-engine simulator for swarm robotics
ci_colored_blob_omnidirectional_camera_sensor.cpp
Go to the documentation of this file.
2
3#ifdef ARGOS_WITH_LUA
4#include <argos3/core/wrappers/lua/lua_utility.h>
5#endif
6
7namespace argos {
8
9 /****************************************/
10 /****************************************/
11
12#ifdef ARGOS_WITH_LUA
13 int LuaEnableOmnidirectionalCamera(lua_State* pt_lua_state) {
14 /* Perform action */
15 CLuaUtility::GetDeviceInstance<CCI_ColoredBlobOmnidirectionalCameraSensor>(pt_lua_state, "colored_blob_omnidirectional_camera")->Enable();
16 return 0;
17 }
18#endif
19
20 /****************************************/
21 /****************************************/
22
23#ifdef ARGOS_WITH_LUA
24 int LuaDisableOmnidirectionalCamera(lua_State* pt_lua_state) {
25 /* Perform action */
26 CLuaUtility::GetDeviceInstance<CCI_ColoredBlobOmnidirectionalCameraSensor>(pt_lua_state, "colored_blob_omnidirectional_camera")->Disable();
27 return 0;
28 }
29#endif
30
31 /****************************************/
32 /****************************************/
33
34#ifdef ARGOS_WITH_LUA
35 void CCI_ColoredBlobOmnidirectionalCameraSensor::CreateLuaState(lua_State* pt_lua_state) {
36 CLuaUtility::OpenRobotStateTable(pt_lua_state, "colored_blob_omnidirectional_camera");
37 CLuaUtility::AddToTable(pt_lua_state, "_instance", this);
38 CLuaUtility::AddToTable(pt_lua_state, "enable", &LuaEnableOmnidirectionalCamera);
39 CLuaUtility::AddToTable(pt_lua_state, "disable", &LuaDisableOmnidirectionalCamera);
40 for(size_t i = 0; i < m_sReadings.BlobList.size(); ++i) {
41 SBlob& sBlob = *(m_sReadings.BlobList[i]);
42 CLuaUtility::StartTable(pt_lua_state, i+1);
43 CLuaUtility::AddToTable(pt_lua_state, "distance", sBlob.Distance);
44 CLuaUtility::AddToTable(pt_lua_state, "angle", sBlob.Angle);
45 CLuaUtility::AddToTable(pt_lua_state, "color", sBlob.Color);
46 CLuaUtility::EndTable(pt_lua_state);
47 }
49 }
50#endif
51
52 /****************************************/
53 /****************************************/
54
55#ifdef ARGOS_WITH_LUA
56 void CCI_ColoredBlobOmnidirectionalCameraSensor::ReadingsToLuaState(lua_State* pt_lua_state) {
57 lua_getfield(pt_lua_state, -1, "colored_blob_omnidirectional_camera");
58 /* Save the number of elements in the blob list */
59 size_t unLastBlobNum = lua_rawlen(pt_lua_state, -1);
60 /* Overwrite the table with the new messages */
61 for(size_t i = 0; i < m_sReadings.BlobList.size(); ++i) {
62 SBlob& sBlob = *(m_sReadings.BlobList[i]);
63 CLuaUtility::StartTable(pt_lua_state, i+1);
64 CLuaUtility::AddToTable(pt_lua_state, "distance", sBlob.Distance);
65 CLuaUtility::AddToTable(pt_lua_state, "angle", sBlob.Angle);
66 CLuaUtility::AddToTable(pt_lua_state, "color", sBlob.Color);
67 CLuaUtility::EndTable(pt_lua_state);
68 }
69 /* Are the new messages less than the old ones? */
70 if(m_sReadings.BlobList.size() < unLastBlobNum) {
71 /* Yes, set to nil all the extra entries */
72 for(size_t i = m_sReadings.BlobList.size()+1; i <= unLastBlobNum; ++i) {
73 lua_pushnumber(pt_lua_state, i);
74 lua_pushnil (pt_lua_state );
75 lua_settable (pt_lua_state, -3);
76 }
77 }
78 lua_pop(pt_lua_state, 1);
79 }
80#endif
81
82 /****************************************/
83 /****************************************/
84
88
89}
The namespace containing all the ARGoS related code.
Definition ci_actuator.h:12
static void EndTable(lua_State *pt_state)
Adds a table to the Lua stack.
static void AddToTable(lua_State *pt_state, const std::string &str_key, void *pt_data)
Adds a pointer to a chunk of data with the given string key to the table located at the top of the st...
static void StartTable(lua_State *pt_state, const std::string &str_key)
Adds a table with the given string key to the table located at the top of the stack.
static void OpenRobotStateTable(lua_State *pt_state, const std::string &str_key)
Opens a table in the robot state, creating it if it does not exist.
static void CloseRobotStateTable(lua_State *pt_state)
Closes a table in the robot state.
static T * GetDeviceInstance(lua_State *pt_state, const std::string &str_key)
Returns a pointer to the instance to the wanted device.
const SReadings & GetReadings() const
Returns a reference to the current camera readings.
It represents the readings collected through the camera at a specific time step.