ARGoS  3
A parallel, multi-engine simulator for swarm robotics
core/simulator/physics_engine/physics_engine.cpp
Go to the documentation of this file.
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 }