Visual Servoing Platform  version 3.6.1 under development (2025-03-13)
test_utils.h
1 #ifndef VP_RB_TEST_UTILS_H
2 #define VP_RB_TEST_UTILS_H
3 
4 #include <visp3/ar/vpPanda3DRendererSet.h>
5 #include <visp3/ar/vpPanda3DGeometryRenderer.h>
6 #include <visp3/ar/vpPanda3DRGBRenderer.h>
7 
8 #include <visp3/gui/vpDisplayFactory.h>
9 
10 #include <vector>
11 
12 #ifdef ENABLE_VISP_NAMESPACE
13 using namespace VISP_NAMESPACE_NAME;
14 #endif
15 
17 {
18  std::vector<vpImage<vpRGBa>> rgb;
19  std::vector<vpImage<float>> depth;
20  std::vector<vpHomogeneousMatrix> cTo;
21 };
22 
23 TrajectoryData generateTrajectory(const vpPanda3DRenderParameters &renderingParams,
24  const std::function<void(vpPanda3DRendererSet &)> &makeScene,
25  std::vector<vpHomogeneousMatrix> &cTw, std::vector<vpHomogeneousMatrix> &oTw)
26 {
27  vpPanda3DRendererSet renderer;
28  renderer.setRenderParameters(renderingParams);
29  auto depthRenderer = std::make_shared<vpPanda3DGeometryRenderer>(vpPanda3DGeometryRenderer::OBJECT_NORMALS);
30  auto rgbRenderer = std::make_shared<vpPanda3DRGBRenderer>(true);
31  renderer.addSubRenderer(rgbRenderer);
32  renderer.addSubRenderer(depthRenderer);
33  renderer.initFramework();
34  makeScene(renderer);
35 
36  if (cTw.size() != oTw.size()) {
37  throw vpException(vpException::dimensionError, "Number of poses don't match");
38  }
39  TrajectoryData res;
40  res.rgb.resize(cTw.size());
41  res.depth.resize(cTw.size());
42  res.cTo.resize(cTw.size());
43 
44  for (unsigned int i = 0; i < cTw.size(); ++i) {
45  res.rgb[i].resize(renderingParams.getImageHeight(), renderingParams.getImageWidth());
46  res.depth[i].resize(renderingParams.getImageHeight(), renderingParams.getImageWidth());
47  renderer.setNodePose("object", oTw[i].inverse());
48  renderer.setCameraPose(cTw[i].inverse());
49 
50  float nearV = 0.01, farV = 1.0;
51  depthRenderer->computeNearAndFarPlanesFromNode("object", nearV, farV, true);
52  vpPanda3DRenderParameters renderingParamsFrame = renderingParams;
53  renderingParamsFrame.setClippingDistance(nearV, farV);
54  renderer.setRenderParameters(renderingParamsFrame);
55  renderer.renderFrame();
56  renderer.getRenderer<vpPanda3DRGBRenderer>()->getRender(res.rgb[i]);
57  renderer.getRenderer<vpPanda3DGeometryRenderer>()->getRender(res.depth[i]);
58  res.cTo[i] = cTw[i] * oTw[i].inverse();
59  // std::shared_ptr<vpDisplay> d = vpDisplayFactory::createDisplay(res.rgb[i]);
60  // vpDisplay::display(res.rgb[i]);
61  // vpDisplay::flush(res.rgb[i]);
62  // vpDisplay::getKeyboardEvent(res.rgb[i], true);
63 
64  }
65 
66  return res;
67 }
68 
69 #endif
error that can be emitted by ViSP classes.
Definition: vpException.h:60
@ dimensionError
Bad dimension.
Definition: vpException.h:71
Renderer that outputs object geometric information.
Implementation of a traditional RGB renderer in Panda3D.
Rendering parameters for a panda3D simulation.
void setClippingDistance(double nearV, double farV)
Set the clipping distance. When a panda camera uses these render parameters, objects that are closer ...
Class that renders multiple datatypes, in a single pass. A renderer set contains multiple subrenderer...
void initFramework() VP_OVERRIDE
Initialize the framework and propagate the created panda3D framework to the subrenderers.
virtual void setRenderParameters(const vpPanda3DRenderParameters &params) VP_OVERRIDE
Set new rendering parameters. If the scene has already been initialized, the renderer camera is updat...
void addSubRenderer(std::shared_ptr< vpPanda3DBaseRenderer > renderer)
Add a new subrenderer: This subrenderer should have a unique name, not present in the set.
void setNodePose(const std::string &name, const vpHomogeneousMatrix &wTo) VP_OVERRIDE
Set the pose of an object for all the subrenderers. The pose is specified using the ViSP convention T...
void setCameraPose(const vpHomogeneousMatrix &wTc) VP_OVERRIDE
Set the pose of the camera, using the ViSP convention. This change is propagated to all subrenderers.
std::shared_ptr< RendererType > getRenderer()
Retrieve the first subrenderer with the specified template type.
std::vector< vpHomogeneousMatrix > cTo
Definition: test_utils.h:20
std::vector< vpImage< float > > depth
Definition: test_utils.h:19
std::vector< vpImage< vpRGBa > > rgb
Definition: test_utils.h:18