/*
* 作成日: 2008/04/12
*/
package jp.ac.fit.asura.nao;
import jp.ac.fit.asura.nao.Camera.CameraType;
import jp.ac.fit.asura.nao.communication.MessageManager;
import jp.ac.fit.asura.nao.glue.SchemeGlue;
import jp.ac.fit.asura.nao.localization.Localization;
import jp.ac.fit.asura.nao.motion.MotorCortex;
import jp.ac.fit.asura.nao.sensation.SomatoSensoryCortex;
import jp.ac.fit.asura.nao.strategy.StrategySystem;
import jp.ac.fit.asura.nao.vision.VisualCortex;
import org.apache.log4j.Logger;
/**
* @author $Author: sey $
*
* @version $Id: AsuraCore.java 713 2008-11-24 06:27:48Z sey $
*
*/
public class AsuraCore {
private static final Logger log = Logger.getLogger(AsuraCore.class);
public abstract static class Controller {
public abstract void init() throws Exception;
public abstract void start() throws Exception;
public abstract void stop() throws Exception;
public abstract long getTargetVisualCycleTime();
public abstract void setTargetVisualCycleTime(long targetVisualCycleTime);
}
private Effector effector;
private Sensor sensor;
private Camera camera;
private MotorCortex motor;
private VisualCortex vision;
private SchemeGlue glue;
private StrategySystem strategy;
private RobotContext robotContext;
private Localization localization;
private MessageManager communication;
private SomatoSensoryCortex sensoryCortex;
private Controller controller;
public AsuraCore(Effector effector, Sensor sensor, DatagramService ds,
Camera camera) {
this.effector = effector;
this.sensor = sensor;
this.camera = camera;
glue = new SchemeGlue();
motor = new MotorCortex();
vision = new VisualCortex();
strategy = new StrategySystem();
localization = new Localization();
communication = new MessageManager();
sensoryCortex = new SomatoSensoryCortex();
robotContext = new RobotContext(this, sensor, effector, ds, camera,
motor, vision, glue, strategy, localization, communication,
sensoryCortex);
// FIXME
if (camera.getType() == CameraType.WEBOTS6) {
controller = new SingleThreadController(robotContext);
controller.setTargetVisualCycleTime(0);
} else {
controller = new MultiThreadController(robotContext);
controller.setTargetVisualCycleTime(100);
}
}
/**
* @param id
* the id to set
*/
public void setId(int id) {
log.info("Robot set new id:" + id);
robotContext.setRobotId(id);
}
public void setTeamId(int id) {
log.info("Team set new id:" + id);
robotContext.setTeamId(id);
}
public void init() throws Exception {
log.info("Init AsuraCore");
effector.init();
sensor.init();
camera.init();
controller.init();
}
public void start() throws Exception {
log.info("Start AsuraCore");
controller.start();
effector.say("Started.");
}
public void stop() throws Exception {
controller.stop();
}
public RobotContext getRobotContext() {
return robotContext;
}
public long getTargetVisualCycleTime() {
return controller.getTargetVisualCycleTime();
}
public void setTargetVisualCycleTime(long targetVisualCycleTime) {
controller.setTargetVisualCycleTime(targetVisualCycleTime);
}
}