21 controller_nh.
getParam(
"wheels", wheels);
25 for (
const auto& wheel : wheels)
30 ROS_ASSERT(wheel.second.hasMember(
"roller_angle"));
34 Eigen::MatrixXd direction(1, 2), in_wheel(2, 2), in_chassis(2, 3);
35 double beta = (double)wheel.second[
"pose"][2];
36 double roller_angle = (
double)wheel.second[
"roller_angle"];
37 direction << 1, tan(roller_angle);
38 in_wheel << cos(beta), sin(beta), -sin(beta), cos(beta);
39 in_chassis << -(double)wheel.second[
"pose"][1], 1., 0., (
double)wheel.second[
"pose"][0], 0., 1.;
40 Eigen::MatrixXd chassis2joint = 1. / (double)wheel.second[
"radius"] * direction * in_wheel * in_chassis;
44 joints_.push_back(std::make_shared<effort_controllers::JointVelocityController>());
56 Eigen::Vector3d vel_chassis;
59 for (
size_t i = 0; i <
joints_.size(); i++)
61 joints_[i]->setCommand(vel_joints(i));
62 joints_[i]->update(time, period);
68 Eigen::VectorXd vel_joints(
joints_.size());
69 for (
size_t i = 0; i <
joints_.size(); i++)
70 vel_joints[i] =
joints_[i]->joint_.getVelocity();
71 Eigen::Vector3d vel_chassis =
73 geometry_msgs::Twist
twist;
74 twist.angular.z = vel_chassis(0);
75 twist.linear.x = vel_chassis(1);
76 twist.linear.y = vel_chassis(2);