/* * 作成日: 2009/03/30 */ package jp.ac.fit.asura.nao.webots; import java.nio.IntBuffer; import jp.ac.fit.asura.nao.Image; import com.cyberbotics.webots.controller.Camera; import com.cyberbotics.webots.controller.Robot; import com.cyberbotics.webots.controller.Servo; /** * @author $Author: sey $ * * @version $Id: $ * */ class Webots6Camera implements jp.ac.fit.asura.nao.Camera { private Camera camera; private Servo selector; private CameraID selectedID; private int width; private int height; private float hFov; private float vFov; private int time; public Webots6Camera(Robot robot) { camera = robot.getCamera("camera"); selector = robot.getServo("CameraSelect"); time = 0; } public void after() { } public void before() { time += Webots6Player.SIMULATION_STEP; } public void init() { camera.enable(Webots6Player.SIMULATION_STEP); width = camera.getWidth(); height = camera.getHeight(); hFov = (float) camera.getFov(); vFov = hFov * height / width; selector.enablePosition(Webots6Player.SIMULATION_STEP); selector.setPosition(0); selectedID = CameraID.TOP; } public CameraType getType() { return CameraType.WEBOTS6; } public Image createImage() { return new Webots6Image(); } @Override public int getParam(CameraID camera, CameraParam id) { return 0; } public Resolution getResolution() { return Resolution.QQVGA; } public CameraID getSelectedId() { return selectedID; } public boolean isSupported(CameraParam id) { return false; } public boolean isSupported(Resolution id) { return id == Resolution.QQVGA; } public boolean isSupportedFPS(int fps) { return fps == 25; } public void selectCamera(CameraID id) { switch (id) { case TOP: selector.setPosition(0); break; case BOTTOM: selector.setPosition(0.6981f); break; default: assert false : id; } selectedID = id; } public int getFPS() { return 25; } public void setFPS(int fps) { } @Override public void setParam(CameraID cameraId, CameraParam id, int value) { } public void setResolution(Resolution res) { } public float getHorizontalFieldOfView() { return hFov; } public float getVerticalFieldOfView() { return vFov; } public void updateImage(Image imgObj) { assert imgObj instanceof Webots6Image; Webots6Image img = (Webots6Image) imgObj; img.buffer = IntBuffer.wrap(camera.getImage()); img.buffer.position(0); img.timestamp = time; img.width = camera.getWidth(); img.height = camera.getHeight(); assert img.buffer.remaining() == img.width * img.height; } }