Go to the documentation of this file.00001
00008
00009
00010
00011
00012 #ifndef ECL_MOBILE_ROBOT_DIFFERENTIAL_DRIVE_KINEMATICS_HPP_
00013 #define ECL_MOBILE_ROBOT_DIFFERENTIAL_DRIVE_KINEMATICS_HPP_
00014
00015
00016
00017
00018
00019 #include <ecl/config/macros.hpp>
00020 #include <ecl/linear_algebra.hpp>
00021 #include <ecl/geometry/pose2d.hpp>
00022 #include "../macros.hpp"
00023
00024
00025
00026
00027
00028 namespace ecl {
00029 namespace mobile_robot {
00030
00031
00032
00033
00034
00063 class ecl_mobile_robot_PUBLIC DifferentialDriveKinematics {
00064 public:
00071 DifferentialDriveKinematics(
00072 const double &fixed_axis_length,
00073 const double& wheel_radius) :
00074 bias(fixed_axis_length),
00075 radius(wheel_radius)
00076 {}
00077
00095 ecl::Pose2D<double> forward(const double &dleft, const double &dright) const;
00096
00113 ecl::Pose2D<double> forwardWithPlatformVelocity(const double & linearVelocity, const double & angularVelocity ) const;
00114
00125 ecl::linear_algebra::Vector2d inverse(const double &linear_velocity, const double &angular_velocity) const;
00126
00154 ECL_DEPRECATED static ecl::linear_algebra::Vector2d Inverse(const ecl::linear_algebra::Vector3d &a, const ecl::linear_algebra::Vector3d &b);
00155
00183 static ecl::linear_algebra::Vector2d PartialInverse(const ecl::Pose2D<double> &a, const ecl::Pose2D<double> &b);
00184 private:
00185 double bias, radius;
00186 };
00187
00188 }
00189 }
00190
00191 #endif