Skip to content
This repository has been archived by the owner on Oct 26, 2018. It is now read-only.

Commit

Permalink
Added a simplified robotics example for DynamicAutoDiffCostFunction.
Browse files Browse the repository at this point in the history
Change-Id: I9520e0a9a8d9743285c5114523fbafa6ffa5b0bd
  • Loading branch information
joydeep-b committed Apr 25, 2014
1 parent cc9d3bb commit 8e09913
Show file tree
Hide file tree
Showing 4 changed files with 386 additions and 19 deletions.
5 changes: 5 additions & 0 deletions examples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,9 @@ IF (GFLAGS)
denoising.cc
fields_of_experts.cc)
TARGET_LINK_LIBRARIES(denoising ceres ${GFLAGS_LIBRARIES})

ADD_EXECUTABLE(robot_pose_mle
robot_pose_mle.cc)
TARGET_LINK_LIBRARIES(robot_pose_mle ceres ${GFLAGS_LIBRARIES})

ENDIF (GFLAGS)
20 changes: 1 addition & 19 deletions examples/bal_problem.cc
Original file line number Diff line number Diff line change
Expand Up @@ -37,32 +37,14 @@
#include "Eigen/Core"
#include "ceres/rotation.h"
#include "glog/logging.h"
#include "random.h"

namespace ceres {
namespace examples {
namespace {
typedef Eigen::Map<Eigen::VectorXd> VectorRef;
typedef Eigen::Map<const Eigen::VectorXd> ConstVectorRef;

inline double RandDouble() {
double r = static_cast<double>(rand());
return r / RAND_MAX;
}

// Box-Muller algorithm for normal random number generation.
// http://en.wikipedia.org/wiki/Box-Muller_transform
inline double RandNormal() {
double x1, x2, w;
do {
x1 = 2.0 * RandDouble() - 1.0;
x2 = 2.0 * RandDouble() - 1.0;
w = x1 * x1 + x2 * x2;
} while ( w >= 1.0 || w == 0.0 );

w = sqrt((-2.0 * log(w)) / w);
return x1 * w;
}

template<typename T>
void FscanfOrDie(FILE* fptr, const char* format, T* value) {
int num_scanned = fscanf(fptr, format, value);
Expand Down
64 changes: 64 additions & 0 deletions examples/random.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// Ceres Solver - A fast non-linear least squares minimizer
// Copyright 2014 Google Inc. All rights reserved.
// http://code.google.com/p/ceres-solver/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of Google Inc. nor the names of its contributors may be
// used to endorse or promote products derived from this software without
// specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// Author: [email protected] (Sameer Agarwal)

#ifndef CERES_EXAMPLES_RANDOM_H_
#define CERES_EXAMPLES_RANDOM_H_

#include <math.h>
#include <stdlib.h>

namespace ceres {
namespace examples {

// Return a random number sampled from a uniform distribution in the range
// [0,1].
inline double RandDouble() {
double r = static_cast<double>(rand());
return r / RAND_MAX;
}

// Box-Muller algorithm for normal random number generation.
// http://en.wikipedia.org/wiki/Box-Muller_transform
inline double RandNormal() {
double x1, x2, w;
do {
x1 = 2.0 * RandDouble() - 1.0;
x2 = 2.0 * RandDouble() - 1.0;
w = x1 * x1 + x2 * x2;
} while ( w >= 1.0 || w == 0.0 );

w = sqrt((-2.0 * log(w)) / w);
return x1 * w;
}

} // namespace examples
} // namespace ceres

#endif // CERES_EXAMPLES_RANDOM_H_
Loading

0 comments on commit 8e09913

Please sign in to comment.