openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

157 lines
4.9 KiB

/*
* This file is part of ACADO Toolkit.
*
* ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
* Copyright (C) 2008-2014 by Boris Houska, Hans Joachim Ferreau,
* Milan Vukov, Rien Quirynen, KU Leuven.
* Developed within the Optimization in Engineering Center (OPTEC)
* under supervision of Moritz Diehl. All rights reserved.
*
* ACADO Toolkit is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* ACADO Toolkit is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with ACADO Toolkit; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
/**
* \file include/utils/acado_utils.hpp
* \author Hans Joachim Ferreau, Boris Houska, Milan Vukov
* \date 2008 - 2013
*
* This file declares several global utility functions.
*/
#ifndef ACADO_TOOLKIT_ACADO_UTILS_HPP
#define ACADO_TOOLKIT_ACADO_UTILS_HPP
#include <cmath>
#include <acado/utils/acado_types.hpp>
#include <acado/utils/acado_constants.hpp>
#include <acado/utils/acado_default_options.hpp>
#include <acado/utils/acado_message_handling.hpp>
#include <acado/utils/acado_debugging.hpp>
#include <acado/utils/acado_io_utils.hpp>
// A very ugly hack
#if (defined __MINGW32__ || defined __MINGW64__)
namespace std { namespace tr1 { using namespace std; } }
#endif // (defined __MINGW32__ || defined __MINGW64__)
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
BEGIN_NAMESPACE_ACADO
/** Returns if x is integer-valued. */
BooleanType acadoIsInteger( double x );
/** Safe division. */
double acadoDiv( double nom, double den );
/** Safe modulus. */
double acadoMod( double nom, double den );
/** Returns the maximum of x and y. */
int acadoMax( const int x, const int y );
/** Returns the maximum of x and y. */
double acadoMax( const double x, const double y );
/** Returns the minimum of x and y. */
int acadoMin( const int x, const int y );
/** Returns the minimum of x and y. */
double acadoMin( const double x, const double y );
/** Returns the factorial 1*2*3*...*n of an integer n. \n
* \param n the input integer n.
* \return 1*2*3*...*n if n>=1 \n
* 1 if n = 0. (and aborts if n < 0 ). \n
*/
int acadoFactorial( int n );
/** Returns whether x and y are numerically equal. */
BooleanType acadoIsEqual( double x, double y, double TOL = EQUALITY_EPS );
/** Returns whether x is numerically greater or equal than y. */
BooleanType acadoIsGreater( double x, double y, double TOL = EQUALITY_EPS );
/** Returns whether x is numerically smaller or equal than y. */
BooleanType acadoIsSmaller( double x, double y, double TOL = EQUALITY_EPS );
/** Returns whether x is numerically strictly greater than y. */
BooleanType acadoIsStrictlyGreater( double x, double y, double TOL = EQUALITY_EPS );
/** Returns whether x is numerically strictly smaller than y. */
BooleanType acadoIsStrictlySmaller( double x, double y, double TOL = EQUALITY_EPS );
/** Returns whether x is numerically greater than 0. */
BooleanType acadoIsPositive( double x, double TOL = EQUALITY_EPS );
/** Returns whether x is numerically smaller than 0. */
BooleanType acadoIsNegative( double x, double TOL = EQUALITY_EPS );
/** Returns whether x is numerically 0. */
BooleanType acadoIsZero( double x, double TOL = EQUALITY_EPS );
/** Returns whether x is greater/smaller than +/-INFTY. */
BooleanType acadoIsInfty( double x, double TOL = 0.1 );
/** Returns whether x lies within [-INFTY,INFTY]. */
BooleanType acadoIsFinite( double x, double TOL = 0.1 );
/** Checks if any of elements is greater than. \sa acadoIsFinite */
template<class T>
BooleanType isFinite( const T& _value )
{
for (unsigned el = 0; el < _value.size(); ++el)
if ( acadoIsFinite( _value[ el ] ) == BT_TRUE )
return BT_TRUE;
return BT_FALSE;
}
/** Returns whether x is not a number. */
BooleanType acadoIsNaN( double x );
/** Checks whether a constant is infinity. */
inline BooleanType isInfty(const double x)
{
if (x - 10.0 < -INFTY)
return BT_TRUE;
if (x + 10.0 > INFTY)
return BT_TRUE;
return BT_FALSE;
}
/** Specific rounding implemenation for compiler who don't support the round
* command. Does a round to nearest.
*/
int acadoRound (double x);
/** Specific rounding implementation for rounding away from zero. */
int acadoRoundAway (double x);
CLOSE_NAMESPACE_ACADO
#endif // ACADO_TOOLKIT_ACADO_UTILS_HPP
/*
* end of file
*/