ARGoS
3
A parallel, multi-engine simulator for swarm robotics
|
00001 00007 #include <cstdlib> 00008 #include "physics_engine.h" 00009 #include <argos3/core/utility/logging/argos_log.h> 00010 #include <argos3/core/utility/string_utilities.h> 00011 #include <argos3/core/simulator/entity/entity.h> 00012 00013 namespace argos { 00014 00015 /* The default value of the simulation clock tick */ 00016 Real CPhysicsEngine::m_fSimulationClockTick = 0.1f; 00017 Real CPhysicsEngine::m_fInverseSimulationClockTick = 1.0f / CPhysicsEngine::m_fSimulationClockTick; 00018 00019 /****************************************/ 00020 /****************************************/ 00021 00022 CPhysicsEngine::CPhysicsEngine() : 00023 m_unIterations(10), 00024 m_fPhysicsClockTick(m_fSimulationClockTick) {} 00025 00026 /****************************************/ 00027 /****************************************/ 00028 00029 void CPhysicsEngine::Init(TConfigurationNode& t_tree) { 00030 try { 00031 /* Get id from the XML */ 00032 GetNodeAttribute(t_tree, "id", m_strId); 00033 /* Get iterations per time step */ 00034 GetNodeAttributeOrDefault(t_tree, "iterations", m_unIterations, m_unIterations); 00035 m_fPhysicsClockTick = GetSimulationClockTick() / static_cast<Real>(m_unIterations); 00036 LOG << "[INFO] The physics engine \"" 00037 << GetId() 00038 << "\" will perform " 00039 << m_unIterations 00040 << " iterations per tick (dt = " 00041 << GetPhysicsClockTick() << " sec)" 00042 << std::endl; 00043 } 00044 catch(CARGoSException& ex) { 00045 THROW_ARGOSEXCEPTION("Error initializing a physics engine"); 00046 } 00047 } 00048 00049 /****************************************/ 00050 /****************************************/ 00051 00052 Real CPhysicsEngine::GetSimulationClockTick() { 00053 return m_fSimulationClockTick; 00054 } 00055 00056 /****************************************/ 00057 /****************************************/ 00058 00059 Real CPhysicsEngine::GetInverseSimulationClockTick() { 00060 return m_fInverseSimulationClockTick; 00061 } 00062 00063 /****************************************/ 00064 /****************************************/ 00065 00066 void CPhysicsEngine::SetSimulationClockTick(Real f_simulation_clock_tick) { 00067 LOG << "[INFO] Using simulation clock tick = " << f_simulation_clock_tick << std::endl; 00068 m_fSimulationClockTick = f_simulation_clock_tick; 00069 m_fInverseSimulationClockTick = 1.0f / f_simulation_clock_tick; 00070 } 00071 00072 /****************************************/ 00073 /****************************************/ 00074 00075 }