00001
00007 #include "ci_quadrotor_position_actuator.h"
00008
00009 #ifdef ARGOS_WITH_LUA
00010 #include <argos3/core/wrappers/lua/lua_utility.h>
00011 #endif
00012
00013 namespace argos {
00014
00015
00016
00017
00018 #ifdef ARGOS_WITH_LUA
00019
00020
00021
00022
00023
00024
00025 int LuaSetAbsolutePosition(lua_State* pt_lua_state) {
00026
00027 if(lua_gettop(pt_lua_state) != 3) {
00028 return luaL_error(pt_lua_state, "robot.quadrotor.set_absolute_position() expects 3 arguments");
00029 }
00030 luaL_checktype(pt_lua_state, 1, LUA_TNUMBER);
00031 luaL_checktype(pt_lua_state, 2, LUA_TNUMBER);
00032 luaL_checktype(pt_lua_state, 3, LUA_TNUMBER);
00033
00034 CLuaUtility::GetDeviceInstance<CCI_QuadRotorPositionActuator>(pt_lua_state, "quadrotor")->
00035 SetAbsolutePosition(CVector3(lua_tonumber(pt_lua_state, 1),
00036 lua_tonumber(pt_lua_state, 2),
00037 lua_tonumber(pt_lua_state, 3)));
00038 return 0;
00039 }
00040 #endif
00041
00042
00043
00044
00045 #ifdef ARGOS_WITH_LUA
00046
00047
00048
00049
00050
00051
00052 int LuaSetRelativePosition(lua_State* pt_lua_state) {
00053
00054 if(lua_gettop(pt_lua_state) != 3) {
00055 return luaL_error(pt_lua_state, "robot.quadrotor.set_relative_position() expects 3 arguments");
00056 }
00057 luaL_checktype(pt_lua_state, 1, LUA_TNUMBER);
00058 luaL_checktype(pt_lua_state, 2, LUA_TNUMBER);
00059 luaL_checktype(pt_lua_state, 3, LUA_TNUMBER);
00060
00061 CLuaUtility::GetDeviceInstance<CCI_QuadRotorPositionActuator>(pt_lua_state, "quadrotor")->
00062 SetRelativePosition(CVector3(lua_tonumber(pt_lua_state, 1),
00063 lua_tonumber(pt_lua_state, 2),
00064 lua_tonumber(pt_lua_state, 3)));
00065 return 0;
00066 }
00067 #endif
00068
00069
00070
00071
00072 #ifdef ARGOS_WITH_LUA
00073
00074
00075
00076
00077 int LuaSetAbsoluteYaw(lua_State* pt_lua_state) {
00078
00079 if(lua_gettop(pt_lua_state) != 1) {
00080 return luaL_error(pt_lua_state, "robot.quadrotor.set_absolute_yaw() expects 1 argument");
00081 }
00082 luaL_checktype(pt_lua_state, 1, LUA_TNUMBER);
00083
00084 CLuaUtility::GetDeviceInstance<CCI_QuadRotorPositionActuator>(pt_lua_state, "quadrotor")->
00085 SetAbsoluteYaw(CRadians(lua_tonumber(pt_lua_state, 1) / 180.0f * CRadians::PI));
00086 return 0;
00087 }
00088 #endif
00089
00090
00091
00092
00093 #ifdef ARGOS_WITH_LUA
00094
00095
00096
00097
00098 int LuaSetRelativeYaw(lua_State* pt_lua_state) {
00099
00100 if(lua_gettop(pt_lua_state) != 1) {
00101 return luaL_error(pt_lua_state, "robot.quadrotor.set_relative_yaw() expects 1 argument");
00102 }
00103 luaL_checktype(pt_lua_state, 1, LUA_TNUMBER);
00104
00105 CLuaUtility::GetDeviceInstance<CCI_QuadRotorPositionActuator>(pt_lua_state, "quadrotor")->
00106 SetRelativeYaw(CRadians(lua_tonumber(pt_lua_state, 1) / 180.0f * CRadians::PI));
00107 return 0;
00108 }
00109 #endif
00110
00111
00112
00113
00114 #ifdef ARGOS_WITH_LUA
00115 void CCI_QuadRotorPositionActuator::CreateLuaState(lua_State* pt_lua_state) {
00116 CLuaUtility::OpenRobotStateTable(pt_lua_state, "quadrotor");
00117 CLuaUtility::AddToTable(pt_lua_state, "_instance", this);
00118 CLuaUtility::AddToTable(pt_lua_state, "set_absolute_position", &LuaSetAbsolutePosition);
00119 CLuaUtility::AddToTable(pt_lua_state, "set_absolute_yaw", &LuaSetAbsoluteYaw);
00120 CLuaUtility::AddToTable(pt_lua_state, "set_relative_position", &LuaSetRelativePosition);
00121 CLuaUtility::AddToTable(pt_lua_state, "set_relative_yaw", &LuaSetRelativeYaw);
00122 CLuaUtility::CloseRobotStateTable(pt_lua_state);
00123 }
00124 #endif
00125
00126
00127
00128
00129 }