|
Mujoco KDL Wrapper
0.2.2
MuJoCo + KDL bridge for robot kinematics and dynamics
|
GLFW window management and the real-time render/tick loop. More...
Classes | |
| struct | mj_kdl::Viewer |
Functions | |
| bool | mj_kdl::init_window (Viewer *v, Robot *r, const char *title="MuJoCo", int width=1280, int height=720) |
| bool | mj_kdl::init_window_sim (Viewer *v, Robot *r, const char *title="MuJoCo") |
| bool | mj_kdl::init_window_sim (Viewer *v, mjModel *m, mjData *d, const char *title="MuJoCo") |
| void | mj_kdl::clear_trace (Viewer *v) |
| void | mj_kdl::add_trace_segment (Viewer *v, const KDL::Vector &a, const KDL::Vector &b, const float rgba[4]=nullptr) |
| void | mj_kdl::cleanup (Viewer *v) |
| bool | mj_kdl::step (Viewer *v, mjModel *m, mjData *d) |
| bool | mj_kdl::is_running (const Viewer *v) |
| bool | mj_kdl::render (Viewer *v, const Robot *r) |
| bool | mj_kdl::render (Viewer *v, mjModel *m, mjData *d) |
| bool | mj_kdl::use_camera (Viewer *v, const mjModel *model, const char *name) |
GLFW window management and the real-time render/tick loop.
Use init_window_sim() + step() for the full simulate UI with physics panels. Use init_window() + render() for a lightweight manual render loop.
The simulate UI owns a user scene merged into every frame; draw your own overlay geometry (e.g. a live end-effector trajectory trace) into it with clear_trace() and add_trace_segment(). Both are no-ops in headless mode.
| void mj_kdl::add_trace_segment | ( | Viewer * | v, |
| const KDL::Vector & | a, | ||
| const KDL::Vector & | b, | ||
| const float | rgba[4] = nullptr ) |
Append a single line segment to the viewer's user scene. Thread-safe. The render thread merges the user scene into each frame automatically. Silently drops the segment once the user-scene geom buffer is full. No-op when v is not backed by an init_window_sim() window (e.g. headless).
| [in,out] | v | Viewer initialised by init_window_sim(). |
| [in] | a | Segment start point (world frame) [m]. |
| [in] | b | Segment end point (world frame) [m]. |
| [in] | rgba | Optional [r, g, b, a] colour; nullptr -> warm orange. |
Referenced by admittance_ft::run_gui().
| void mj_kdl::cleanup | ( | Viewer * | v | ) |
Release the GLFW window and MuJoCo visualization contexts owned by v.
| [in,out] | v | Viewer to tear down; all pointers set to null afterwards. |
| void mj_kdl::clear_trace | ( | Viewer * | v | ) |
Reset the viewer's user-scene geom count to 0. Call once per frame before appending trace segments with add_trace_segment(). No-op when v is not backed by an init_window_sim() window (e.g. headless).
| [in,out] | v | Viewer initialised by init_window_sim(). |
| bool mj_kdl::init_window | ( | Viewer * | v, |
| Robot * | r, | ||
| const char * | title = "MuJoCo", | ||
| int | width = 1280, | ||
| int | height = 720 ) |
Open a GLFW window and initialise MuJoCo visualization contexts. Must be called after init_robot() or init_from_mjcf().
| [out] | v | Viewer to initialise; must be zero-initialised before call. |
| [in] | r | Robot whose model drives the rendering context. |
| [in] | title | Window title string. |
| [in] | width | Window width in pixels. |
| [in] | height | Window height in pixels. |
| bool mj_kdl::init_window_sim | ( | Viewer * | v, |
| mjModel * | m, | ||
| mjData * | d, | ||
| const char * | title = "MuJoCo" ) |
Open the full MuJoCo simulate UI (panels, physics controls, joint viewer) in a background render thread, then return so the caller can drive the physics loop with tick().
Use this instead of init_window() when you want the simulate UI panels alongside a user-owned loop. tick() automatically acquires the render mutex, steps physics, and handles pause / perturbation / speed controls.
Note: the render thread owns the GLFW window; on Linux (X11 / Wayland) this works correctly. Not supported on macOS.
| [out] | v | Viewer to initialise; freed by cleanup(Viewer *). |
| [in] | r | Robot to simulate. r is registered globally; pass the same Robot to every subsequent step() call so that keyboard and mouse perturbation callbacks operate on the correct model. Only one (Viewer, Robot) pair may be active at a time. |
| [in] | title | Label shown in the window title bar (default "MuJoCo"). |
Referenced by main(), main(), and admittance_ft::run_gui().
| bool mj_kdl::is_running | ( | const Viewer * | v | ) |
Returns true if the viewer window is open and not scheduled for closing.
| [in] | v | Viewer created by init_window(). |
Referenced by admittance_ft::run_gui().
Render the current simulation frame to the viewer window.
| [in,out] | v | Viewer created by init_window(). |
| [in] | r | Robot whose model and data are rendered. |
| bool mj_kdl::render | ( | Viewer * | v, |
| mjModel * | m, | ||
| mjData * | d ) |
Render the current simulation frame to the viewer window. Model/data overload – use when no single Robot owns the scene (e.g. multi-robot).
| [in,out] | v | Viewer created by init_window(). |
| [in] | m | MuJoCo model. |
| [in] | d | MuJoCo data. |
| bool mj_kdl::step | ( | Viewer * | v, |
| mjModel * | m, | ||
| mjData * | d ) |
Model/data overload of step() for multi-robot or no-robot GUI loops. Equivalent to the former tick(Viewer*, mjModel*, mjData*).
| [in,out] | v | Viewer initialised by init_window() or init_window_sim(). |
| [in] | m | Shared MuJoCo model. |
| [in] | d | Shared MuJoCo data. |
| bool mj_kdl::use_camera | ( | Viewer * | v, |
| const mjModel * | model, | ||
| const char * | name ) |
Switch the viewer to a named fixed camera defined in the model. Works for both init_window() and init_window_sim() paths. Pass nullptr or an empty string to return to the free camera.