コード例 #1
0
ファイル: SMCAgent.cpp プロジェクト: buhrmann/dynmx
//----------------------------------------------------------------------------------------------------------------------
void SMCAgent::init()
{
  m_radius = 0.02;
  
  if (SETTINGS->hasChild("Config/GA/Evolvable"))
  {
    const ci::XmlTree& xml = SETTINGS->getChild("Config/GA/Evolvable");
    
    // Todo: move to respective sensor class!!!
    // Distance sensor
    if (xml.getChild("DistanceSensor").getValue<bool>(0))
    {
      m_distanceSensor = new DistanceSensor();
      m_distanceSensor->fromXml(xml.getChild("DistanceSensor"));
      setSensorMode(xml.getChild("DistanceSensor").getAttributeValue<std::string>("Mode", "Absolute"));
    }
    else
    {
      m_distanceSensor = NULL;
    }
    
    // Gradient sensor
    if (xml.getChild("GradientSensor").getValue<bool>(0))
    {
      m_gradientSensor = new GradientSensor();
      m_gradientSensor->fromXml(xml.getChild("GradientSensor"));
    }
    else
    {
      m_gradientSensor = NULL;
    }
    
    // Torus sensor
    if (xml.getChild("TorusSensor").getValue<bool>(0))
    {
      m_torusSensor = new TorusSensor();
      m_torusSensor->fromXml(xml.getChild("TorusSensor"));
    }
    else
    {
      m_torusSensor = NULL;
    }

    
    setMaxSpeed(xml.getChild("MaxSpeed").getValue<double>(1.0));
    setMaxAngularSpeed(degreesToRadians(xml.getChild("MaxAngularSpeed").getValue<double>(180)));
    setMaxAngle(degreesToRadians(xml.getChild("MaxAngle").getValue<double>(90)));
    setMaxPosition(xml.getChild("MaxPosition").getValue<double>(0.5));
    setAngleWraps(xml.getChild("AngleWraps").getValue<bool>(1));
    setPositionWraps(xml.getChild("PositionWraps").getValue<bool>(1));
    m_energyInitial = xml.getChild("Energy").getAttributeValue<float>("initial", 30.0);
    m_energySpeedTresh = xml.getChild("Energy").getAttributeValue<float>("threshForSpeed", -1);
    
    m_evMin = xml.getChild("Energy").getAttributeValue<float>("evMin", 0);
    m_evMax = xml.getChild("Energy").getAttributeValue<float>("evMax", 10);
    
    m_engReplFoodSens = xml.getChild("Energy").getAttributeValue<bool>("engReplFoodSens", false);
    
    getEnvironment().fromXml(xml.getChild("Environment"));
  }
  
  reset();
}
コード例 #2
0
	/**
	 * Set the motor limits in the motor hardware.
	 *
	 * @param minAngle Minimum for the angle, in radians, the StepperMotor can travel on the theoretical plane.
	 * @param maxAngle Maximum for the angle, in radians, the StepperMotor can travel on the theoretical plane.
	 **/
	void StepperMotor::setMotorLimits(double minAngle, double maxAngle){
		// Set motors limits.
		setMinAngle(minAngle);
		setMaxAngle(maxAngle);
	}
コード例 #3
0
ファイル: API.cpp プロジェクト: symek/EdgyEggs
extern shapeop_err shapeop_editConstraint(ShapeOpSolver *op,
                                          const char *constraintType,
                                          int constraint_id,
                                          const ShapeOpScalar *scalars,
                                          int nb_scl) {

  if (strcmp(constraintType, "EdgeStrain") == 0) {
    auto c = std::dynamic_pointer_cast<ShapeOp::EdgeStrainConstraint>(op->s->getConstraint(constraint_id));
    if (!c) { return SO_UNMATCHING_CONSTRAINT_ID; }
    if (nb_scl != 3) { return SO_INVALID_ARGUMENT_LENGTH; }
    c->setEdgeLength(scalars[0]);
    c->setRangeMin(scalars[1]);
    c->setRangeMax(scalars[2]);
    return SO_SUCCESS;
  }
  if (strcmp(constraintType, "TriangleStrain") == 0) {
    auto c = std::dynamic_pointer_cast<ShapeOp::TriangleStrainConstraint>(op->s->getConstraint(constraint_id));
    if (!c) { return SO_UNMATCHING_CONSTRAINT_ID; }
    if (nb_scl != 2) { return SO_INVALID_ARGUMENT_LENGTH; }
    c->setRangeMin(scalars[0]);
    c->setRangeMax(scalars[1]);
    return SO_SUCCESS;
  }
  if (strcmp(constraintType, "TetrahedronStrain") == 0) {
    auto c = std::dynamic_pointer_cast<ShapeOp::TetrahedronStrainConstraint>(op->s->getConstraint(constraint_id));
    if (!c) { return SO_UNMATCHING_CONSTRAINT_ID; }
    if (nb_scl != 2) { return SO_INVALID_ARGUMENT_LENGTH; }
    c->setRangeMin(scalars[0]);
    c->setRangeMax(scalars[1]);
    return SO_SUCCESS;
  }
  if (strcmp(constraintType, "Area") == 0) {
    auto c = std::dynamic_pointer_cast<ShapeOp::AreaConstraint>(op->s->getConstraint(constraint_id));
    if (!c) { return SO_UNMATCHING_CONSTRAINT_ID; }
    if (nb_scl != 2) { return SO_INVALID_ARGUMENT_LENGTH; }
    c->setRangeMin(scalars[0]);
    c->setRangeMax(scalars[1]);
    return SO_SUCCESS;
  }
  if (strcmp(constraintType, "Volume") == 0) {
    auto c = std::dynamic_pointer_cast<ShapeOp::VolumeConstraint>(op->s->getConstraint(constraint_id));
    if (!c) { return SO_UNMATCHING_CONSTRAINT_ID; }
    if (nb_scl != 2) { return SO_INVALID_ARGUMENT_LENGTH; }
    c->setRangeMin(scalars[0]);
    c->setRangeMax(scalars[1]);
    return SO_SUCCESS;
  }
  if (strcmp(constraintType, "Bending") == 0) {
    auto c = std::dynamic_pointer_cast<ShapeOp::BendingConstraint>(op->s->getConstraint(constraint_id));
    if (!c) { return SO_UNMATCHING_CONSTRAINT_ID; }
    if (nb_scl != 2) { return SO_INVALID_ARGUMENT_LENGTH; }
    c->setRangeMin(scalars[0]);
    c->setRangeMax(scalars[1]);
    return SO_SUCCESS;
  }
  if (strcmp(constraintType, "Closeness") == 0) {
    auto c = std::dynamic_pointer_cast<ShapeOp::ClosenessConstraint>(op->s->getConstraint(constraint_id));
    if (!c) { return SO_UNMATCHING_CONSTRAINT_ID; }
    if (nb_scl != 3) { return SO_INVALID_ARGUMENT_LENGTH; }
    Eigen::Map<const ShapeOp::Vector3> p(scalars, 3, 1);
    c->setPosition(p);
    return SO_SUCCESS;
  }
  if (strcmp(constraintType, "Similarity") == 0 || strcmp(constraintType, "Rigid") == 0) {
    auto c = std::dynamic_pointer_cast<ShapeOp::SimilarityConstraint>(op->s->getConstraint(constraint_id));
    if (!c) { return SO_UNMATCHING_CONSTRAINT_ID; }
    int nI = static_cast<int>(c->nIndices());
    if ((nb_scl % (nI * 3)) != 0) { return SO_INVALID_ARGUMENT_LENGTH; }
    std::vector<ShapeOp::Matrix3X> shapes;
    int nShapes = nb_scl / (nI * 3);
    for (int i = 0; i < nShapes; ++i) {
      Eigen::Map<const ShapeOp::Matrix3X> s(scalars + i * nI * 3, 3, nI);
      shapes.push_back(s);
    }
    c->setShapes(shapes);
    return SO_SUCCESS;
  }
  if (strcmp(constraintType, "Angle") == 0) {
    auto c = std::dynamic_pointer_cast<ShapeOp::AngleConstraint>(op->s->getConstraint(constraint_id));
    if (!c) { return SO_UNMATCHING_CONSTRAINT_ID; }
    if (nb_scl != 2) { return SO_INVALID_ARGUMENT_LENGTH; }
    c->setMinAngle(scalars[0]);
    c->setMaxAngle(scalars[1]);
    return SO_SUCCESS;
  }
  return SO_INVALID_CONSTRAINT_TYPE;
}