base-visualizer.cpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2024-2025 INRIA
3 //
5 
9 
10 #include <chrono>
11 #include <thread>
12 
13 namespace pinocchio
14 {
15  namespace visualizers
16  {
17 
19  const Model & model,
22  Data & data,
25  : m_model(model)
26  , m_visualModel(&visual_model)
27  , m_collisionModel(collision_model)
28  , m_data(&data)
29  , m_visualData(&visual_data)
30  , m_collisionData(collision_data)
31  , m_ownedData(false)
32  {
33  if (hasCollisionModel())
34  {
36  collision_data != nullptr, std::logic_error,
37  "A collision model was provided but no pointer to collision GeometryData to borrow.");
38  }
39  else
40  {
41  m_collisionData = nullptr;
42  }
43  }
44 
46  const Model & model,
49  : m_model(model)
50  , m_visualModel(&visual_model)
51  , m_collisionModel(collision_model)
52  , m_data(new Data(model))
53  , m_visualData(new GeometryData(visual_model))
54  , m_collisionData(nullptr)
55  , m_ownedData(true)
56  {
57  if (hasCollisionModel())
59  }
60 
62  {
63  this->destroyData();
64  }
65 
67  {
68  if (m_ownedData)
69  {
70  assert(m_data);
71  assert(m_visualData);
72  delete m_data;
73  delete m_visualData;
74  if (m_collisionData)
75  delete m_collisionData;
76  }
77  m_data = nullptr;
78  m_visualData = nullptr;
79  m_collisionData = nullptr;
80  }
81 
83  {
84  this->destroyData();
85  m_data = new Data(m_model);
87  if (hasCollisionModel())
89  // mark as owned, if that was not the case
90  m_ownedData = true;
91  }
92 
93  void BaseVisualizer::display(const boost::optional<ConstVectorRef> & q)
94  {
96  if (q.has_value())
97  {
99  }
101  if (hasCollisionModel())
102  {
104  }
105  displayImpl();
106  }
107 
108  void BaseVisualizer::play(const std::vector<ConstVectorRef> & qs, Scalar dt)
109  {
110  using std::chrono::steady_clock;
111  const auto nsteps = qs.size();
112  const auto ms = std::chrono::milliseconds(unsigned(dt * 1e3));
113 
114  for (size_t i = 0; i < nsteps; i++)
115  {
116  const auto cur = steady_clock::now();
117  this->display(qs[i]);
118  if (!this->forceRedraw())
119  return;
120  std::this_thread::sleep_until(cur + ms);
121  }
122  }
123 
125  {
126  using Eigen::Index;
127  const Index nsteps = qs.rows();
128  std::vector<ConstVectorRef> qs_;
129  for (Index i = 0; i < nsteps; i++)
130  {
131  qs_.emplace_back(qs.row(i));
132  }
133  // call overload
134  this->play(qs_, dt);
135  }
136 
137  } // namespace visualizers
138 } // namespace pinocchio
frames.hpp
pinocchio::DataTpl
Definition: context/generic.hpp:25
pinocchio::forwardKinematics
void forwardKinematics(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q)
Update the joint placements according to the current joint configuration.
base-visualizer.hpp
pinocchio::updateGeometryPlacements
void updateGeometryPlacements(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const GeometryModel &geom_model, GeometryData &geom_data, const Eigen::MatrixBase< ConfigVectorType > &q)
Apply a forward kinematics and update the placement of the geometry objects.
model.hpp
PINOCCHIO_THROW
#define PINOCCHIO_THROW(condition, exception_type, message)
Generic macro to throw an exception in Pinocchio if the condition is not met with a given input messa...
Definition: include/pinocchio/macros.hpp:162
pinocchio::visualizers::ConstMatrixRef
Eigen::Ref< const MatrixXs > ConstMatrixRef
Definition: base-visualizer.hpp:24
append-urdf-model-with-another-model.visual_model
visual_model
Definition: append-urdf-model-with-another-model.py:62
geometry-models.visual_data
visual_data
Definition: geometry-models.py:22
build-reduced-model.collision_model
collision_model
Definition: build-reduced-model.py:16
inverse-kinematics.i
int i
Definition: inverse-kinematics.py:17
setup.data
data
Definition: cmake/cython/setup.in.py:48
pinocchio::visualizers::BaseVisualizer::forceRedraw
virtual bool forceRedraw()
Override this in child class when the scene has to be redrawn. Useful for play().
Definition: base-visualizer.hpp:105
nullptr
#define nullptr
pinocchio::GeometryData
Definition: multibody/geometry.hpp:241
pinocchio::visualizers::BaseVisualizer::m_model
std::reference_wrapper< Model const > m_model
Definition: base-visualizer.hpp:208
pinocchio::visualizers::BaseVisualizer::m_visualData
GeometryData * m_visualData
Definition: base-visualizer.hpp:213
ms
ms
pinocchio::visualizers::BaseVisualizer::display
virtual void display(const boost::optional< ConstVectorRef > &q=boost::none)
Display configuration q (if an actual value is given) or update the Pinocchio frames.
Definition: base-visualizer.cpp:93
pinocchio::visualizers::Scalar
PINOCCHIO_SCALAR_TYPE_DEFAULT Scalar
Definition: base-visualizer.hpp:20
pinocchio::Index
PINOCCHIO_COMPILER_DIAGNOSTIC_POP typedef std::size_t Index
Definition: multibody/fwd.hpp:22
pinocchio::visualizers::BaseVisualizer::model
const Model & model() const
Definition: base-visualizer.hpp:147
geometry.hpp
pinocchio::visualizers::BaseVisualizer::m_data
Data * m_data
Definition: base-visualizer.hpp:212
pinocchio::Data
DataTpl< context::Scalar, context::Options > Data
Definition: multibody/fwd.hpp:34
pinocchio::visualizers::BaseVisualizer::m_visualModel
const GeometryModel * m_visualModel
Definition: base-visualizer.hpp:209
pinocchio::visualizers::BaseVisualizer::displayImpl
virtual void displayImpl()=0
pinocchio::visualizers::BaseVisualizer::hasCollisionModel
bool hasCollisionModel() const
Definition: base-visualizer.hpp:164
pinocchio::visualizers::BaseVisualizer::BaseVisualizer
BaseVisualizer(const Model &model, const GeometryModel &visual_model, const GeometryModel *collision_model, Data &data, GeometryData &visual_data, GeometryData *collision_data)
Class constructor for borrowing external data.
Definition: base-visualizer.cpp:18
pinocchio::visualizers::BaseVisualizer::m_collisionModel
const GeometryModel * m_collisionModel
Definition: base-visualizer.hpp:210
pinocchio::q
JointCollectionTpl const Eigen::MatrixBase< ConfigVectorType > & q
Definition: joint-configuration.hpp:1083
pinocchio::visualizers::BaseVisualizer::displayPrecall
virtual void displayPrecall()
This method is called at the beginning of display().
Definition: base-visualizer.hpp:218
pinocchio::visualizers::BaseVisualizer::play
virtual void play(const std::vector< ConstVectorRef > &qs, Scalar dt)
Play an entire trajectory, waiting for time dt between each keyframe.
Definition: base-visualizer.cpp:108
pinocchio::visualizers::BaseVisualizer::~BaseVisualizer
virtual ~BaseVisualizer()
Definition: base-visualizer.cpp:61
cartpole.qs_
def qs_
Definition: cartpole.py:185
pinocchio::GeometryModel
Definition: multibody/geometry.hpp:54
collision-with-point-clouds.collision_data
collision_data
Definition: collision-with-point-clouds.py:117
pinocchio::visualizers::BaseVisualizer::m_ownedData
bool m_ownedData
Definition: base-visualizer.hpp:215
pinocchio::ModelTpl< context::Scalar, context::Options >
meshcat-viewer.qs
qs
Definition: meshcat-viewer.py:128
cartpole.dt
float dt
Definition: cartpole.py:145
pinocchio::visualizers::BaseVisualizer::rebuildData
virtual void rebuildData()
Re-build data objects. Required if the models were modified.
Definition: base-visualizer.cpp:82
pinocchio::visualizers::BaseVisualizer::destroyData
void destroyData()
Definition: base-visualizer.cpp:66
pinocchio::model
JointCollectionTpl & model
Definition: joint-configuration.hpp:1082
pinocchio::visualizers::BaseVisualizer::m_collisionData
GeometryData * m_collisionData
Definition: base-visualizer.hpp:214
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:33


pinocchio
Author(s):
autogenerated on Sat Apr 19 2025 02:41:29