18#include <kdl/chaindynparam.hpp>
19#include <kdl/chainfksolverpos_recursive.hpp>
25static constexpr double kHomePose[7] = { 0.0, 0.2618, 3.1416, -2.2689, 0.0, 0.9599, 1.5708 };
27int main(
int argc,
char *argv[])
29 bool headless =
false;
30 for (
int i = 1; i < argc; ++i)
31 if (std::string(argv[i]) ==
"--headless") headless =
true;
40 r.
path = mjcf.c_str();
43 mjModel *model =
nullptr;
44 mjData *data =
nullptr;
47 std::cerr <<
"build_scene() failed\n";
51 std::cerr <<
"init_robot_from_mjcf() failed\n";
56 unsigned n =
static_cast<unsigned>(robot.
n_joints);
57 KDL::ChainFkSolverPos_recursive fk(robot.
chain);
58 KDL::ChainDynParam dyn(robot.
chain, KDL::Vector(0.0, 0.0, -9.81));
60 KDL::JntArray q_home(n);
61 for (
unsigned i = 0; i < n; ++i) q_home(i) = kHomePose[i];
77 KDL::JntArray q(n), g(n);
78 auto ctrl_step = [&]() {
80 for (
unsigned i = 0; i < n; ++i) q(i) = robot.
jnt_pos_msr[i];
81 dyn.JntToGravity(q, g);
82 for (
unsigned i = 0; i < n; ++i) robot.
jnt_trq_cmd[i] = g(i);
87 fk.JntToCart(q_home, ee_start);
89 for (
int step = 0; step < 500; ++step) {
94 KDL::JntArray q_end(n);
95 for (
unsigned i = 0; i < n; ++i) q_end(i) = robot.
jnt_pos_msr[i];
97 fk.JntToCart(q_end, ee_end);
98 double drift = (ee_start.p - ee_end.p).Norm();
99 std::cout <<
"EE drift after 500 steps: " << std::fixed << std::setprecision(3)
100 << drift * 1000.0 <<
" mm\n";
104 std::cerr <<
"init_window_sim() failed\n";
110 double prev_sim_time = data->time;
113 prev_sim_time = data->time;
int main(int argc, char *argv[])
void env_add_robot(Env *env, Robot *robot)
ResetInfo reset(Env *env, const ResetOptions *options=nullptr)
bool init_robot_from_mjcf(Robot *r, mjModel *model, mjData *data, 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, bool call_forward=true)
bool build_scene(mjModel **out_model, mjData **out_data, const SceneSpec *spec)
void destroy_scene(mjModel *model, mjData *data)
bool init_window_sim(Viewer *v, Robot *r, const char *title="MuJoCo")
std::string menagerie_model(const fs::path &relative)
std::vector< double > jnt_pos_msr
std::vector< double > jnt_trq_cmd
std::vector< RobotSpec > robots