misc.py
Go to the documentation of this file.
00001 
00002 # Software License Agreement (BSD License)
00003 #
00004 #  Copyright (c) 2010, UC Regents
00005 #  All rights reserved.
00006 #
00007 #  Redistribution and use in source and binary forms, with or without
00008 #  modification, are permitted provided that the following conditions
00009 #  are met:
00010 #
00011 #   * Redistributions of source code must retain the above copyright
00012 #     notice, this list of conditions and the following disclaimer.
00013 #   * Redistributions in binary form must reproduce the above
00014 #     copyright notice, this list of conditions and the following
00015 #     disclaimer in the documentation and/or other materials provided
00016 #     with the distribution.
00017 #   * Neither the name of the University of California nor the names of its
00018 #     contributors may be used to endorse or promote products derived
00019 #     from this software without specific prior written permission.
00020 #
00021 #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 #  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 #  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 #  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 #  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 #  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 #  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 #  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 #  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 #  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 #  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 #  POSSIBILITY OF SUCH DAMAGE.
00033 
00034 """
00035 misc.py
00036 
00037 Miscellaneous routines
00038 """
00039 from numpy import sign, fmod
00040 
00041 def bound(x, limit):
00042     assert limit >= 0
00043     if x > limit:
00044         return limit
00045     elif x < -limit:
00046         return -limit
00047     else:
00048         return x
00049     
00050 def clip(x, low_limit, high_limit):
00051     assert high_limit >= low_limit
00052     if x < low_limit:
00053         return low_limit
00054     elif x > high_limit:
00055         return high_limit
00056     else:
00057         return x
00058     
00059 def mod180deg(x):
00060     if x >= 0:
00061         retval = fmod(x+180.0, 360.0)-180.0
00062     else:
00063         retval = -(fmod(-x+180.0, 360.0)-180.0)
00064     assert -180.0 <= retval <= 180.0
00065     return retval
00066     
00067 def deadband(x, deadband):
00068     if -deadband < x < deadband:
00069         return 0.0
00070     else:
00071         return x-sign(x)*deadband
00072     
00073 if __name__ == "__main__":
00074     assert bound(10, 8) == 8
00075     assert bound(0.5, 10) == 0.5
00076     assert deadband(10, 2.0) == 8.0
00077     assert deadband(1.999, 2.0) == 0.0
00078     assert deadband(-10, 2.0) == -8.0
00079     assert deadband(-0.5, 2.0) == 0.0
00080     assert mod180deg(45.0) == 45.0
00081     assert mod180deg(179.0) == 179.0
00082     assert mod180deg(-179.0) == -179.0
00083     assert mod180deg(182.0) == -178.0
00084     assert mod180deg(-182.0) == 178.0
00085     print "all tests passed"


flyer_common
Author(s): Patrick Bouffard
autogenerated on Sun Jan 5 2014 11:37:49