7#include <mujoco/mujoco.h>
9#include <kdl/chain.hpp>
10#include <kdl/frames.hpp>
11#include <kdl/jntarray.hpp>
54#define MJ_FILENAME_ (::strrchr(__FILE__, '/') ? ::strrchr(__FILE__, '/') + 1 : __FILE__)
56#define MJ_LOG_(lvl_enum, color, label, expr) \
58 if (::mj_kdl::g_log_level >= ::mj_kdl::LogLevel::lvl_enum) { \
59 std::ostringstream _mj_oss; \
63 color "[mj_kdl " label "] %s:%d (%s): %s\033[0m\n", \
67 _mj_oss.str().c_str() \
72#define LOG_INFO(expr) MJ_LOG_(INFO, "", "INFO ", expr)
73#define LOG_WARN(expr) MJ_LOG_(WARN, "\033[33m", "WARN ", expr)
74#define LOG_ERROR(expr) MJ_LOG_(ERROR, "\033[31m", "ERROR", expr)
97 const char *
name =
nullptr;
113 double pos[3] = { 0, 0, 0 };
143 double pos[3] = { 0, 0, 0 };
203 double pos[3] = { 0.0, 0.0, 0.0 };
224 double euler[3] = { 0.0, 0.0, 0.0 };
274 KDL::Wrench
wrench = KDL::Wrench::Zero();
362 std::chrono::steady_clock::time_point
_tick_t{};
484 const char *base_body,
485 const char *tip_body,
486 const char *prefix =
"",
585 const char *title =
"MuJoCo",
643 const KDL::Vector &a,
644 const KDL::Vector &b,
645 const float rgba[4] =
nullptr
687 const char *out_path,
708 const char *out_path,
845 const char *body_name,
847 const double *quat =
nullptr
906bool get_site_frame(
const mjModel *model, mjData *data,
const char *site_name, KDL::Frame *out);
913bool get_body_frame(
const mjModel *model, mjData *data,
const char *body_name, KDL::Frame *out);
948 const std::array<double, 3> &lookat
void add_skybox_to_spec(mjSpec *spec)
bool compile_and_make_data(mjSpec *spec, mjModel **out_model, mjData **out_data)
void add_objects_to_spec(mjSpec *spec, const std::vector< SceneObject > &objects)
void add_floor_to_spec(mjSpec *spec)
void ensure_plugins_loaded()
void env_add_robot(Env *env, Robot *robot)
ResetInfo reset(Env *env, const ResetOptions *options=nullptr)
bool init_env(Env *env, const SceneSpec *spec)
void set_log_level(LogLevel level)
bool init_video_recorder(VideoRecorder *vr, mjModel *model, const char *out_path, int width=1280, int height=720, int fps=60)
bool record_frame(VideoRecorder *vr, mjModel *model, mjData *data)
void set_body_pose(mjModel *model, mjData *data, const char *body_name, const double pos[3], const double *quat=nullptr)
bool step_n(Robot *s, int n)
std::vector< double > joint_force_limits(const Robot *r, double fallback=1e6)
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)
const ForceTorqueSensor * find_ft_sensor(const Robot *r, const char *name)
bool get_site_frame(const mjModel *model, mjData *data, const char *site_name, KDL::Frame *out)
bool get_body_frame(const mjModel *model, mjData *data, const char *body_name, KDL::Frame *out)
bool build_scene(mjModel **out_model, mjData **out_data, const SceneSpec *spec)
bool attach_to_spec(mjSpec *robot_spec, const AttachmentSpec *a)
bool scene_add_object(mjModel **model, mjData **data, SceneSpec *spec, const SceneObject &obj)
bool get_joint_position(const mjModel *model, mjData *data, const char *name, double *out)
bool scene_remove_object(mjModel **model, mjData **data, SceneSpec *spec, const std::string &name)
void destroy_scene(mjModel *model, mjData *data)
std::vector< std::string > get_camera_names(const mjModel *model)
bool save_model_xml(const mjModel *model, const char *path)
std::string scene_object_site_name(const SceneObject &obj, const char *site_name)
bool init_window_sim(Viewer *v, Robot *r, const char *title="MuJoCo")
bool use_camera(Viewer *v, const mjModel *model, const char *name)
bool init_window(Viewer *v, Robot *r, const char *title="MuJoCo", int width=1280, int height=720)
void clear_trace(Viewer *v)
bool render(Viewer *v, const Robot *r)
void add_trace_segment(Viewer *v, const KDL::Vector &a, const KDL::Vector &b, const float rgba[4]=nullptr)
bool is_running(const Viewer *v)
std::function< void(ResetContext *)> ResetHook
void set_free_camera(Viewer *v, double distance, double azimuth, double elevation, const std::array< double, 3 > &lookat)
std::vector< std::pair< std::string, std::string > > contact_exclusions
std::vector< Robot * > robots
const char * force_sensor
const char * torque_sensor
std::string torque_sensor
const ResetOptions * options
std::vector< AttachmentSpec > attachments
std::vector< ForceTorqueSensor > ft_sensors
std::vector< int > kdl_to_mj_ctrl
std::vector< int > kdl_to_mj_qpos
std::vector< int > kdl_to_mj_dof
std::vector< double > jnt_pos_msr
std::vector< double > jnt_pos_cmd
std::vector< std::pair< double, double > > joint_limits
std::vector< double > jnt_vel_msr
std::vector< double > jnt_trq_cmd
std::vector< double > jnt_trq_msr
std::vector< std::string > joint_names
std::vector< RobotSpec > robots
std::vector< SceneObject > objects
std::vector< CameraSpec > cameras
std::chrono::steady_clock::time_point _tick_t