16 namespace experimental {
74 using clock = std::chrono::steady_clock;
75 static const clock::time_point start_time = clock::now();
76 return (std::chrono::duration<double>(clock::now() - start_time)).count();
82 static std::unique_ptr<Arm>
create(
const Params& params);
87 bool loadGains(
const std::string& gains_file);
94 size_t size()
const {
return group_->size(); }
181 auto aux_size = aux_state.size();
182 if (aux_state.size() > 0) {
183 aux_times_.resize(1);
184 aux_times_[0] = get_current_time_s_();
185 aux_.resize(aux_size, 1);
187 for (
size_t i = 0; i < aux_size; i++) {
188 aux_(i, 0) = aux_state[i];
193 aux_times_.resize(0);
217 void setJointLimits(
const Eigen::VectorXd& min_positions,
const Eigen::VectorXd& max_positions) {
218 kinematics_helper_.
setJointLimits(*robot_model_, min_positions, max_positions);
223 void clearJointLimits(
const Eigen::VectorXd& min_positions,
const Eigen::VectorXd& max_positions) {
228 Eigen::Vector3d
FK(
const Eigen::VectorXd& positions)
const {
229 return kinematics_helper_.
FK3Dof(*robot_model_, positions);
233 void FK(
const Eigen::VectorXd& positions, Eigen::Vector3d& xyz_out, Eigen::Vector3d& tip_axis)
const {
234 kinematics_helper_.
FK5Dof(*robot_model_, positions, xyz_out, tip_axis);
238 void FK(
const Eigen::VectorXd& positions, Eigen::Vector3d& xyz_out, Eigen::Matrix3d& orientation)
const {
239 kinematics_helper_.
FK6Dof(*robot_model_, positions, xyz_out, orientation);
244 const Eigen::VectorXd& initial_positions,
245 const Eigen::Vector3d& target_xyz)
const {
246 return kinematics_helper_.
solveIK3Dof(*robot_model_, initial_positions, target_xyz);
252 const Eigen::VectorXd& initial_positions,
253 const Eigen::Vector3d& target_xyz,
254 const Eigen::Vector3d& end_tip)
const {
255 return kinematics_helper_.
solveIK5Dof(*robot_model_, initial_positions, target_xyz, end_tip);
261 const Eigen::VectorXd& initial_positions,
262 const Eigen::Vector3d& target_xyz,
263 const Eigen::Matrix3d& orientation)
const {
264 return kinematics_helper_.
solveIK6Dof(*robot_model_, initial_positions, target_xyz, orientation);
269 Arm(std::function<
double()> get_current_time_s,
270 std::shared_ptr<Group>
group,
271 std::shared_ptr<robot_model::RobotModel> robot_model,
272 std::shared_ptr<EndEffectorBase> end_effector =
nullptr) :
273 get_current_time_s_(get_current_time_s),
274 last_time_(get_current_time_s()),
276 robot_model_(robot_model),
277 end_effector_(end_effector),
278 pos_(Eigen::VectorXd::Zero(
group->
size())),
279 vel_(Eigen::VectorXd::Zero(
group->
size())),
280 accel_(Eigen::VectorXd::Zero(
group->
size())),
285 Eigen::VectorXd getAux(
double t)
const;
287 std::function<double()> get_current_time_s_;
289 std::shared_ptr<Group> group_;
290 std::shared_ptr<robot_model::RobotModel> robot_model_;
291 std::shared_ptr<EndEffectorBase> end_effector_;
294 std::shared_ptr<trajectory::Trajectory> trajectory_;
295 double trajectory_start_time_{ std::numeric_limits<double>::quiet_NaN() };
298 Eigen::VectorXd pos_;
299 Eigen::VectorXd vel_;
300 Eigen::VectorXd accel_;
303 Eigen::VectorXd masses_;
307 Eigen::VectorXd aux_times_;
308 Eigen::MatrixXd aux_;
311 internal::KinematicsHelper kinematics_helper_;
size_t size() const
Definition: arm.hpp:94
A list of Feedback objects that can be received from a Group of modules; the size() must match the nu...
Definition: group_feedback.hpp:16
Eigen::VectorXd solveIK6Dof(const robot_model::RobotModel &robot_model, const Eigen::VectorXd &initial_positions, const Eigen::Vector3d &target_xyz, const Eigen::Matrix3d &orientation) const
Definition: kinematics_helper.cpp:98
const trajectory::Trajectory * trajectory() const
Definition: arm.hpp:105
Represents a group of physical HEBI modules, and allows Command, Feedback, and Info objects to be sen...
Definition: group.hpp:29
std::shared_ptr< robot_model::RobotModel > robot_model_
Definition: arm.hpp:63
const robot_model::RobotModel & robotModel() const
Definition: arm.hpp:100
void cancelGoal()
Definition: arm.cpp:221
void FK6Dof(const robot_model::RobotModel &robot_model, const Eigen::VectorXd &positions, Eigen::Vector3d &xyz_out, Eigen::Matrix3d &orientation) const
Definition: kinematics_helper.cpp:147
void clearJointLimits()
Definition: kinematics_helper.cpp:38
Eigen::VectorXd solveIK(const Eigen::VectorXd &initial_positions, const Eigen::Vector3d &target_xyz, const Eigen::Matrix3d &orientation) const
Definition: arm.hpp:260
Eigen::VectorXd solveIK5Dof(const robot_model::RobotModel &robot_model, const Eigen::VectorXd &initial_positions, const Eigen::Vector3d &target_xyz, const Eigen::Vector3d &end_tip) const
Definition: kinematics_helper.cpp:70
void FK5Dof(const robot_model::RobotModel &robot_model, const Eigen::VectorXd &positions, Eigen::Vector3d &xyz_out, Eigen::Vector3d &tip_axis) const
Definition: kinematics_helper.cpp:135
void clearJointLimits(const Eigen::VectorXd &min_positions, const Eigen::VectorXd &max_positions)
Definition: arm.hpp:223
Eigen::VectorXd solveIK(const Eigen::VectorXd &initial_positions, const Eigen::Vector3d &target_xyz, const Eigen::Vector3d &end_tip) const
Definition: arm.hpp:251
void FK(const Eigen::VectorXd &positions, Eigen::Vector3d &xyz_out, Eigen::Vector3d &tip_axis) const
Definition: arm.hpp:233
Eigen::VectorXd solveIK3Dof(const robot_model::RobotModel &robot_model, const Eigen::VectorXd &initial_positions, const Eigen::Vector3d &target_xyz) const
Definition: kinematics_helper.cpp:45
double control_frequency_
Definition: arm.hpp:59
const GroupFeedback & lastFeedback() const
Definition: arm.hpp:120
bool send()
Definition: arm.cpp:125
Represents a chain or tree of robot elements (rigid bodies and joints).
Definition: robot_model.hpp:419
std::string hrdf_file_
Definition: arm.hpp:62
bool atGoal() const
Definition: arm.hpp:205
Eigen::Vector3d FK3Dof(const robot_model::RobotModel &robot_model, const Eigen::VectorXd &positions) const
Definition: kinematics_helper.cpp:126
void setJointLimits(const Eigen::VectorXd &min_positions, const Eigen::VectorXd &max_positions)
Definition: arm.hpp:217
const Group & group() const
Definition: arm.hpp:97
static std::unique_ptr< Arm > create(const Params ¶ms)
Definition: arm.cpp:9
const EndEffectorBase * endEffector() const
Definition: arm.hpp:110
void FK(const Eigen::VectorXd &positions, Eigen::Vector3d &xyz_out, Eigen::Matrix3d &orientation) const
Definition: arm.hpp:238
int command_lifetime_
Definition: arm.hpp:56
const GroupCommand & pendingCommand() const
Definition: arm.hpp:116
double goalProgress() const
Definition: arm.cpp:211
A list of Command objects appropriate for sending to a Group of modules; the size() must match the nu...
Definition: group_command.hpp:17
void setAuxState(const T &aux_state)
Definition: arm.hpp:180
std::function< double()> get_current_time_s_
Definition: arm.hpp:73
Definition: end_effector.hpp:12
bool loadGains(const std::string &gains_file)
Definition: arm.cpp:66
Eigen::VectorXd solveIK(const Eigen::VectorXd &initial_positions, const Eigen::Vector3d &target_xyz) const
Definition: arm.hpp:243
Represents a smooth trajectory through a set of waypoints.
Definition: trajectory.hpp:19
GroupCommand & pendingCommand()
Definition: arm.hpp:115
void setGoal(const Goal &goal)
Definition: arm.cpp:147
Eigen::Vector3d FK(const Eigen::VectorXd &positions) const
Definition: arm.hpp:228
std::vector< std::string > names_
Definition: arm.hpp:54
std::vector< std::string > families_
Definition: arm.hpp:53
void setJointLimits(const robot_model::RobotModel &robot_model, const Eigen::VectorXd &min_positions, const Eigen::VectorXd &max_positions)
Definition: kinematics_helper.cpp:8
std::shared_ptr< EndEffectorBase > end_effector_
Definition: arm.hpp:67
bool update()
Definition: arm.cpp:75