83 return { vx, 0.0, w };
95 xdot(0) = (u(0) + u(1)) * std::cos(x(2));
96 xdot(1) = (u(0) + u(1)) * std::sin(x(2));
108 mat
fdx(
const vec x,
const vec u)
const
110 mat
A(3, 3, arma::fill::zeros);
112 const auto df0dth = -(
wheel_radius / 2.0) * (u(0) + u(1)) * std::sin(x(2));
113 const auto df1dth = (
wheel_radius / 2.0) * (u(0) + u(1)) * std::cos(x(2));
126 mat
fdu(
const vec x)
const
130 B(0, 0) = std::cos(x(2));
131 B(0, 1) = std::cos(x(2));
133 B(1, 0) = std::sin(x(2));
134 B(1, 1) = std::sin(x(2));
169 throw std::invalid_argument(
"Invalid twist y-velocity must be 0.");
172 return { u(0) * std::cos(x(2)), u(0) * std::sin(x(2)), u(2) };
181 mat
fdx(
const vec x,
const vec u)
const
183 mat
A(3, 3, arma::fill::zeros);
184 A(0, 2) = -u(0) * std::sin(x(2));
185 A(1, 2) = u(0) * std::cos(x(2));
194 mat
fdu(
const vec x)
const
196 mat B(3, 3, arma::fill::zeros);
198 B(0, 0) = std::cos(x(2));
199 B(1, 0) = std::sin(x(2));