ARGoS 3
A parallel, multi-engine simulator for swarm robotics
ci_prototype_joints_actuator.cpp
Go to the documentation of this file.
1
8
9#ifdef ARGOS_WITH_LUA
10#include <argos3/core/wrappers/lua/lua_utility.h>
11#endif
12
13namespace argos {
14
15 /****************************************/
16 /****************************************/
17
18#ifdef ARGOS_WITH_LUA
19 int LuaSetTarget(lua_State* pt_lua_state) {
20 /* get a reference to the actuator */
21 CCI_PrototypeJointsActuator::SActuator* pc_actuator =
22 reinterpret_cast<CCI_PrototypeJointsActuator::SActuator*>(lua_touserdata(pt_lua_state, lua_upvalueindex(1)));
23 /* check number of arguments */
24 if(lua_gettop(pt_lua_state) != 1) {
25 std::string strErrMsg = "robot.joints." + pc_actuator->Id + ".set_target() requires 1 argument";
26 return luaL_error(pt_lua_state, strErrMsg.c_str());
27 }
28 luaL_checktype(pt_lua_state, 1, LUA_TNUMBER);
29 /* Perform action */
30 pc_actuator->Target = lua_tonumber(pt_lua_state, 1);
31 return 0;
32 }
33#endif
34
35 /****************************************/
36 /****************************************/
37
38#ifdef ARGOS_WITH_LUA
39 void CCI_PrototypeJointsActuator::CreateLuaState(lua_State* pt_lua_state) {
40 CLuaUtility::StartTable(pt_lua_state, "joints");
41 for(SActuator* pc_actuator : m_vecActuators) {
42 CLuaUtility::StartTable(pt_lua_state, pc_actuator->Id);
43 /* push a pointer to each actuator onto the lua stack */
44 lua_pushstring(pt_lua_state, "set_target");
45 lua_pushlightuserdata(pt_lua_state, pc_actuator);
46 lua_pushcclosure(pt_lua_state, &LuaSetTarget, 1);
47 lua_settable(pt_lua_state, -3);
48 CLuaUtility::EndTable(pt_lua_state);
49 }
50 CLuaUtility::EndTable(pt_lua_state);
51 }
52#endif
53
54
55}
The namespace containing all the ARGoS related code.
Definition ci_actuator.h:12
virtual void CreateLuaState(lua_State *pt_lua_state)=0
Creates the Lua state for this actuator.
static void EndTable(lua_State *pt_state)
Adds a table to the Lua stack.
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.