Skip to content

Commit 8fc6cb9

Browse files
committed
display model in the viewer
1 parent c797f5d commit 8fc6cb9

File tree

7 files changed

+62
-10
lines changed

7 files changed

+62
-10
lines changed

CMakeLists.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ project(web-contest-sandbox VERSION 1.0.0)
1111
find_package(YCM REQUIRED)
1212
find_package(YARP 3.3.0 REQUIRED COMPONENTS os dev sig math pcl)
1313
find_package(ICUBcontrib REQUIRED)
14+
find_package (Eigen3 3.3 REQUIRED)
1415
find_package(PCL REQUIRED)
1516
find_package(VTK REQUIRED)
1617
message (STATUS "VTK_VERSION: ${VTK_VERSION}")
@@ -38,7 +39,7 @@ install(TARGETS ${PROJECT_NAME}-world LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDI
3839
add_executable(assignment_${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/src/main.cpp)
3940
target_compile_definitions(assignment_${PROJECT_NAME} PRIVATE _USE_MATH_DEFINES)
4041
target_include_directories(assignment_${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src)
41-
target_link_libraries(assignment_${PROJECT_NAME} ${YARP_LIBRARIES} ${PCL_LIBRARIES} ${VTK_LIBRARIES})
42+
target_link_libraries(assignment_${PROJECT_NAME} ${YARP_LIBRARIES} Eigen3::Eigen ${PCL_LIBRARIES} ${VTK_LIBRARIES})
4243

4344
if (VTK_VERSION VERSION_GREATER_EQUAL "8.90.0")
4445
vtk_module_autoinit(TARGETS assignment_${PROJECT_NAME} MODULES ${VTK_LIBRARIES})

app/scripts/assignment_web-contest-sandbox-icub.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
</connection>
2525

2626
<connection>
27-
<from>/SFM/disp:o</from>
27+
<from>/DisparityModule/disp:o</from>
2828
<to>/depth:i</to>
2929
<protocol>unix_stream</protocol>
3030
</connection>

assets/objects-positions.png

-84.6 KB
Loading

gazebo/models/fallback-1/model.sdf

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66
<geometry>
77
<mesh>
88
<uri> model://fallback-1/mesh.stl </uri>
9-
<scale>0.0025 0.0025 0.0025</scale>
9+
<scale>0.002 0.002 0.002</scale>
1010
</mesh>
1111
</geometry>
1212
</collision>
1313
<visual name="visual">
1414
<geometry>
1515
<mesh>
1616
<uri> model://fallback-1/mesh.stl </uri>
17-
<scale>0.0025 0.0025 0.0025</scale>
17+
<scale>0.002 0.002 0.002</scale>
1818
</mesh>
1919
</geometry>
2020
</visual>

gazebo/models/fallback-3/model.sdf

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66
<geometry>
77
<mesh>
88
<uri> model://fallback-3/mesh.stl </uri>
9-
<scale>0.0025 0.0025 0.0025</scale>
9+
<scale>0.002 0.002 0.002</scale>
1010
</mesh>
1111
</geometry>
1212
</collision>
1313
<visual name="visual">
1414
<geometry>
1515
<mesh>
1616
<uri> model://fallback-3/mesh.stl </uri>
17-
<scale>0.0025 0.0025 0.0025</scale>
17+
<scale>0.002 0.002 0.002</scale>
1818
</mesh>
1919
</geometry>
2020
</visual>

src/main.cpp

+11-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include <string>
88
#include <cmath>
99

10+
#include <Eigen/Eigen>
11+
1012
#include <yarp/os/ResourceFinder.h>
1113
#include <yarp/os/RFModule.h>
1214
#include <yarp/os/Value.h>
@@ -42,13 +44,14 @@ class Module: public yarp::os::RFModule {
4244
yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelFloat>> depthPort;
4345
yarp::os::RpcServer rpcPort;
4446

47+
std::string object_model;
4548
std::unique_ptr<viewer::Viewer> viewer;
4649

4750
/*********************************************************************************/
4851
bool configure(yarp::os::ResourceFinder& rf) override {
49-
std::string object_model_file = rf.findFile("models/object/mesh.stl");
50-
if (object_model_file.empty()) {
51-
yError() << "Unable to locate \"models/object/mesh.stl\"";
52+
object_model = rf.findFile("models/object/mesh.stl");
53+
if (object_model.empty()) {
54+
yError() << "Unable to locate the model";
5255
return false;
5356
}
5457

@@ -210,7 +213,11 @@ class Module: public yarp::os::RFModule {
210213
explore_table(azimuth, elevation);
211214
auto pc = acquire_scene();
212215

213-
// FILL IN THE CODE
216+
Eigen::Matrix4d T = Eigen::Matrix4d::Identity();
217+
T(0,3) = -.45;
218+
T(1,3) = 0.;
219+
T(2,3) = -.1;
220+
viewer->showModel(object_model, .0025, T);
214221
k = 1;
215222
}
216223

src/viewer.h

+44
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@
99
#define VIEWER_H
1010

1111
#include <mutex>
12+
#include <string>
1213
#include <vector>
14+
#include <cmath>
1315

1416
#include <vtkSmartPointer.h>
1517
#include <vtkCommand.h>
18+
#include <vtkSTLReader.h>
19+
#include <vtkTransform.h>
1620
#include <vtkPolyDataMapper.h>
1721
#include <vtkPointData.h>
1822
#include <vtkUnsignedCharArray.h>
@@ -29,6 +33,8 @@
2933
#include <vtkCamera.h>
3034
#include <vtkInteractorStyleSwitch.h>
3135

36+
#include <Eigen/Eigen>
37+
3238
#include <yarp/sig/PointCloud.h>
3339

3440
namespace viewer {
@@ -82,6 +88,10 @@ class Viewer {
8288
vtkSmartPointer<vtkPolyData> vtk_pc_polydata{nullptr};
8389
vtkSmartPointer<vtkVertexGlyphFilter> vtk_pc_filter{nullptr};
8490
vtkSmartPointer<vtkActor> vtk_pc_actor{nullptr};
91+
vtkSmartPointer<vtkSTLReader> vtk_mdl_reader{nullptr};
92+
vtkSmartPointer<vtkPolyDataMapper> vtk_mdl_mapper{nullptr};
93+
vtkSmartPointer<vtkTransform> vtk_mdl_transform{nullptr};
94+
vtkSmartPointer<vtkActor> vtk_mdl_actor{nullptr};
8595

8696
public:
8797
/**************************************************************************/
@@ -177,6 +187,40 @@ class Viewer {
177187

178188
vtk_renderer->AddActor(vtk_pc_actor);
179189
}
190+
191+
/**************************************************************************/
192+
void showModel(const std::string& model, const double scale,
193+
const Eigen::Matrix4d& T) {
194+
std::lock_guard<std::mutex> lck(mtx);
195+
if (vtk_mdl_actor) {
196+
vtk_renderer->RemoveActor(vtk_mdl_actor);
197+
}
198+
199+
vtk_mdl_reader = vtkSmartPointer<vtkSTLReader>::New();
200+
vtk_mdl_reader->SetFileName(model.c_str());
201+
vtk_mdl_reader->Update();
202+
203+
vtk_mdl_mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
204+
vtk_mdl_mapper->SetInputConnection(vtk_mdl_reader->GetOutputPort());
205+
206+
vtk_mdl_actor = vtkSmartPointer<vtkActor>::New();
207+
vtk_mdl_actor->SetMapper(vtk_mdl_mapper);
208+
209+
Eigen::Vector3d v;
210+
v(0) = T(2,1) - T(1,2);
211+
v(1) = T(0,2) - T(2,0);
212+
v(2) = T(1,0) - T(0,1);
213+
const auto r = std::sqrt(v(0)*v(0) + v(1)*v(1) + v(2)*v(2));
214+
const auto angle = (180. / M_PI) * std::atan2(.5 * r, .5 * (T(0,0) + T(1,1) + T(2,2) - 1.));
215+
216+
vtk_mdl_transform = vtkSmartPointer<vtkTransform>::New();
217+
vtk_mdl_transform->Translate(T(0,3), T(1,3), T(2,3));
218+
vtk_mdl_transform->RotateWXYZ(angle, v(0)/r, v(1)/r, v(2)/r);
219+
vtk_mdl_transform->Scale(scale, scale, scale);
220+
vtk_mdl_actor->SetUserTransform(vtk_mdl_transform);
221+
222+
vtk_renderer->AddActor(vtk_mdl_actor);
223+
}
180224
};
181225

182226
}

0 commit comments

Comments
 (0)