async manualControl(movementCommand) {
        if (!this.active) {
            throw new Error("Manual control mode is not active.");
        }
        const map = this.robot.state.map;
        const robotEntity = map.entities.find(e => {
            return e.type === PointMapEntity.TYPE.ROBOT_POSITION;
        });

        let position = [...robotEntity.points];
        let angle = robotEntity.metaData.angle;

        switch (movementCommand) {
            case ManualControlCapability.MOVEMENT_COMMAND_TYPE.FORWARD:
                position[0] += Math.cos((angle - 90) * Math.PI / 180) * map.pixelSize * 30;
                position[1] += Math.sin((angle - 90) * Math.PI / 180) * map.pixelSize * 30;
                break;
            case ManualControlCapability.MOVEMENT_COMMAND_TYPE.BACKWARD:
                position[0] -= Math.cos((angle - 90) * Math.PI / 180) * map.pixelSize * 30;
                position[1] -= Math.sin((angle - 90) * Math.PI / 180) * map.pixelSize * 30;
                break;
            case ManualControlCapability.MOVEMENT_COMMAND_TYPE.ROTATE_CLOCKWISE:
                angle += 30;
                break;
            case ManualControlCapability.MOVEMENT_COMMAND_TYPE.ROTATE_COUNTERCLOCKWISE:
                angle -= 30;
                break;
            default:
                throw new Error("Invalid movementCommand.");
        }

        setTimeout(() => {
            robotEntity.points = position;
            robotEntity.metaData.angle = angle;
            this.robot.emitMapUpdated();
        }, 250);
    }
@param {import("../../../core/capabilities/ManualControlCapability").MOVEMENT_COMMAND_TYPE} movementCommand
@returns {Promise<void>}