20static constexpr int kSteps = 7500;
21static constexpr double kMaxDrift = 0.0001;
23int main(
int argc,
char *argv[])
52 for (
int step = 0; step < kSteps; ++step) {
61 std::cout <<
"EE drift after " << kSteps <<
" steps: " << std::fixed << std::setprecision(4)
62 << drift * 1000.0 <<
" mm (limit " << kMaxDrift * 1000.0 <<
" mm)\n";
64 return headless ?
ex::verdict(drift <= kMaxDrift,
"the arm holds its pose") : 0;
virtual int JntToCart(const JntArray &q_in, Frame &p_out, int segmentNr=-1)
unsigned int getNrOfJoints() const
int main(int argc, char *argv[])
ResetInfo reset(Env *env, const ResetOptions *options=nullptr)
Status init_env(Env *env, const SceneSpec *spec)
Status set_control_mode(Robot *r, CtrlMode mode)
Status init_robot_from_mjcf(Robot *r, Env *env, const char *base_body, const char *tip_body, const char *prefix="", const ToolFrameSpec *tool=nullptr)
void set_joint_pos(Robot *r, const KDL::JntArray &q)
Status open_viewer(Env *env, const char *title="MuJoCo")
void pace_realtime(Env *env)
std::string asset(const fs::path &relative)
int verdict(bool ok, const std::string &goal)
mj_kdl::SceneSpec scene_spec()
KDL::Frame tcp_frame(KDL::ChainFkSolverPos_recursive &fk, const mj_kdl::Robot &robot)
KDL::JntArray home_q(unsigned n)
void pd_gravity(mj_kdl::Robot &robot, KDL::ChainDynParam &dyn, const KDL::JntArray &q_des, const double *kp=nullptr, const double *kd=nullptr)
void prime_gravity(mj_kdl::Robot &robot, KDL::ChainDynParam &dyn, const KDL::JntArray &q)
Args parse_args(int argc, char **argv, const std::string &default_record_path="")
std::vector< RobotSpec > robots