luigifreda / plvs

PLVS is a real-time SLAM system with points, lines, volumetric mapping and 3D unsupervised incremental segmentation.
GNU General Public License v3.0
453 stars 67 forks source link

./build_thirdparty.sh error(voxblox) #18

Closed rookierobot closed 8 months ago

rookierobot commented 8 months ago

Hello! First of all thank you for your contribution to the community。 I'm having trouble compiling Thirdparty. It seems that an error occurred while compiling "voxblox". Is it because some libraries are missing? The error message is as follows:

Configuring and building Thirdparty/voxblox ...
Build type: Release -- Using system protobuf -- -- creating symbolic links for headers
SRCDIRS: /home/river/plvs/Thirdparty/voxblox/include /home/river/plvs/Thirdparty/voxblox/minkindr/include DIR: /home/river/plvs/Thirdparty/voxblox/include ln: '/home/river/plvs/Thirdparty/voxblox/include/voxblox' 与'/home/river/plvs/Thirdparty/voxblox/include/voxblox' 为同一文件 DIR: /home/river/plvs/Thirdparty/voxblox/minkindr/include -- Configuring done -- Generating done -- Build files have been written to: /home/river/plvs/Thirdparty/voxblox/build [ 17%] Built target voxblox_proto [ 25%] Building CXX object CMakeFiles/voxblox.dir/src/core/block.cc.o [ 25%] Building CXX object CMakeFiles/voxblox.dir/src/core/esdf_map.cc.o [ 28%] Building CXX object CMakeFiles/voxblox.dir/src/core/tsdf_map.cc.o [ 32%] Building CXX object CMakeFiles/voxblox.dir/src/integrator/esdf_integrator.cc.o [ 35%] Building CXX object CMakeFiles/voxblox.dir/src/integrator/esdf_occ_integrator.cc.o [ 39%] Building CXX object CMakeFiles/voxblox.dir/src/integrator/tsdf_integrator.cc.o [ 42%] Building CXX object CMakeFiles/voxblox.dir/src/io/sdf_ply.cc.o [ 46%] Building CXX object CMakeFiles/voxblox.dir/src/simulation/objects.cc.o In file included from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/layer.h:11, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/tsdf_map.h:9, from /home/river/plvs/Thirdparty/voxblox/src/core/tsdf_map.cc:1: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:35:24: error: ‘BlockProto’ does not name a type 35 | explicit Block(const BlockProto& proto); | ^~~~~~ In file included from /home/river/plvs/Thirdparty/voxblox/src/core/block.cc:1: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:35:24: error: ‘BlockProto’ does not name a type 35 | explicit Block(const BlockProto& proto); | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:185:17: error: ‘BlockProto’ has not been declared 185 | void getProto(BlockProto proto) const; | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:185:17: error: ‘BlockProto’ has not been declared 185 | void getProto(BlockProto proto) const; | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:203:31: error: ‘BlockProto’ does not name a type 203 | void deserializeProto(const BlockProto& proto); | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:204:23: error: ‘BlockProto’ has not been declared 204 | void serializeProto(BlockProto proto) const; | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:203:31: error: ‘BlockProto’ does not name a type 203 | void deserializeProto(const BlockProto& proto); | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:204:23: error: ‘BlockProto’ has not been declared 204 | void serializeProto(BlockProto proto) const; | ^~~~~~ In file included from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/layer.h:11, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/integrator/esdf_integrator.h:11, from /home/river/plvs/Thirdparty/voxblox/src/integrator/esdf_integrator.cc:1: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:35:24: error: ‘BlockProto’ does not name a type 35 | explicit Block(const BlockProto& proto); | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:185:17: error: ‘BlockProto’ has not been declared 185 | void getProto(BlockProto proto) const; | ^~~~~~ In file included from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/layer.h:11, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/esdf_map.h:10, from /home/river/plvs/Thirdparty/voxblox/src/core/esdf_map.cc:1: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:35:24: error: ‘BlockProto’ does not name a type 35 | explicit Block(const BlockProto& proto); | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:185:17: error: ‘BlockProto’ has not been declared 185 | void getProto(BlockProto proto) const; | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:203:31: error: ‘BlockProto’ does not name a type 203 | void deserializeProto(const BlockProto& proto); | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:204:23: error: ‘BlockProto’ has not been declared 204 | void serializeProto(BlockProto proto) const; | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:203:31: error: ‘BlockProto’ does not name a type 203 | void deserializeProto(const BlockProto& proto); | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:204:23: error: ‘BlockProto’ has not been declared 204 | void serializeProto(BlockProto proto) const; | ^~~~~~ In file included from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/layer.h:11, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/integrator/esdf_occ_integrator.h:11, from /home/river/plvs/Thirdparty/voxblox/src/integrator/esdf_occ_integrator.cc:1: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:35:24: error: ‘BlockProto’ does not name a type 35 | explicit Block(const BlockProto& proto); | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:185:17: error: ‘BlockProto’ has not been declared 185 | void getProto(BlockProto proto) const; | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:203:31: error: ‘BlockProto’ does not name a type 203 | void deserializeProto(const BlockProto& proto); | ^~~~~~ In file included from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/layer.h:11, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/io/sdf_ply.h:7, from /home/river/plvs/Thirdparty/voxblox/src/io/sdf_ply.cc:1: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:35:24: error: ‘BlockProto’ does not name a type 35 | explicit Block(const BlockProto& proto); | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:204:23: error: ‘BlockProto’ has not been declared 204 | void serializeProto(BlockProto proto) const; | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:185:17: error: ‘BlockProto’ has not been declared 185 | void getProto(BlockProto proto) const; | ^~~~~~ In file included from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:222, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/layer.h:11, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/tsdf_map.h:9, from /home/river/plvs/Thirdparty/voxblox/src/core/tsdf_map.cc:1: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:12:31: error: ‘BlockProto’ does not name a type 12 | Block::Block(const BlockProto& proto) | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h: In constructor ‘voxblox::Block::Block(const int&)’: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:13:19: error: request for member ‘voxels_per_side’ in ‘proto’, which is of non-class type ‘const int’ 13 | : Block(proto.voxels_per_side(), proto.voxel_size(), | ^~~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:13:44: error: request for member ‘voxel_size’ in ‘proto’, which is of non-class type ‘const int’ 13 | : Block(proto.voxels_per_side(), proto.voxel_size(), | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:25: error: request for member ‘origin_x’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:43: error: request for member ‘origin_y’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:61: error: request for member ‘origin_z’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:15:21: error: request for member ‘has_data’ in ‘proto’, which is of non-class type ‘const int’ 15 | hasdata = proto.has_data(); | ^~~~ In file included from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:222, from /home/river/plvs/Thirdparty/voxblox/src/core/block.cc:1: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:12:31: error: ‘BlockProto’ does not name a type 12 | Block::Block(const BlockProto& proto) | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h: In constructor ‘voxblox::Block::Block(const int&)’: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:13:19: error: request for member ‘voxels_per_side’ in ‘proto’, which is of non-class type ‘const int’ 13 | : Block(proto.voxels_per_side(), proto.voxel_size(), | ^~~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:13:44: error: request for member ‘voxel_size’ in ‘proto’, which is of non-class type ‘const int’ 13 | : Block(proto.voxels_per_side(), proto.voxel_size(), | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:25: error: request for member ‘origin_x’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:43: error: request for member ‘origin_y’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:61: error: request for member ‘origin_z’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:15:21: error: request for member ‘has_data’ in ‘proto’, which is of non-class type ‘const int’ 15 | hasdata = proto.has_data(); | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:19:22: error: request for member ‘voxel_data_size’ in ‘proto’, which is of non-class type ‘const int’ 19 | data.reserve(proto.voxel_data_size()); | ^~~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:21:30: error: request for member ‘voxel_data’ in ‘proto’, which is of non-class type ‘const int’ 21 | for (uint32_t word : proto.voxel_data()) { | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h: At global scope: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:29:33: error: variable or field ‘getProto’ declared void 29 | void Block::getProto(BlockProto proto) const { | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:203:31: error: ‘BlockProto’ does not name a type 203 | void deserializeProto(const BlockProto& proto); | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:204:23: error: ‘BlockProto’ has not been declared 204 | void serializeProto(BlockProto proto) const; | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:19:22: error: request for member ‘voxel_data_size’ in ‘proto’, which is of non-class type ‘const int’ 19 | data.reserve(proto.voxel_data_size()); | ^~~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:21:30: error: request for member ‘voxel_data’ in ‘proto’, which is of non-class type ‘const int’ 21 | for (uint32_t word : proto.voxel_data()) { | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h: At global scope: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:29:33: error: variable or field ‘getProto’ declared void 29 | void Block::getProto(BlockProto proto) const { | ^~~~~~ In file included from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:222, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/layer.h:11, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/integrator/esdf_integrator.h:11, from /home/river/plvs/Thirdparty/voxblox/src/integrator/esdf_integrator.cc:1: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:12:31: error: ‘BlockProto’ does not name a type 12 | Block::Block(const BlockProto& proto) | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h: In constructor ‘voxblox::Block::Block(const int&)’: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:13:19: error: request for member ‘voxels_per_side’ in ‘proto’, which is of non-class type ‘const int’ 13 | : Block(proto.voxels_per_side(), proto.voxel_size(), | ^~~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:13:44: error: request for member ‘voxel_size’ in ‘proto’, which is of non-class type ‘const int’ 13 | : Block(proto.voxels_per_side(), proto.voxel_size(), | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:25: error: request for member ‘origin_x’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:43: error: request for member ‘origin_y’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:61: error: request for member ‘origin_z’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:15:21: error: request for member ‘has_data’ in ‘proto’, which is of non-class type ‘const int’ 15 | hasdata = proto.has_data(); | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:29:33: error: ‘BlockProto’ was not declared in this scope /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:19:22: error: request for member ‘voxel_data_size’ in ‘proto’, which is of non-class type ‘const int’ 19 | data.reserve(proto.voxel_data_size()); | ^~~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:21:30: error: request for member ‘voxel_data’ in ‘proto’, which is of non-class type ‘const int’ 21 | for (uint32_t word : proto.voxel_data()) { | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h: At global scope: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:29:33: error: variable or field ‘getProto’ declared void 29 | void Block::getProto(BlockProto proto) const { | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:29:33: error: ‘BlockProto’ was not declared in this scope /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:29:45: error: ‘proto’ was not declared in this scope 29 | void Block::getProto(BlockProto proto) const { | ^~~~~ In file included from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block.h:222, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/layer.h:11, from /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/esdf_map.h:10, from /home/river/plvs/Thirdparty/voxblox/src/core/esdf_map.cc:1: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:12:31: error: ‘BlockProto’ does not name a type 12 | Block::Block(const BlockProto& proto) | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h: In constructor ‘voxblox::Block::Block(const int&)’: /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:13:19: error: request for member ‘voxels_per_side’ in ‘proto’, which is of non-class type ‘const int’ 13 | : Block(proto.voxels_per_side(), proto.voxel_size(), | ^~~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:13:44: error: request for member ‘voxel_size’ in ‘proto’, which is of non-class type ‘const int’ 13 | : Block(proto.voxels_per_side(), proto.voxel_size(), | ^~~~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:25: error: request for member ‘origin_x’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:43: error: request for member ‘origin_y’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:14:61: error: request for member ‘origin_z’ in ‘proto’, which is of non-class type ‘const int’ 14 | Point(proto.origin_x(), proto.origin_y(), proto.origin_z())) { | ^~~~ /home/river/plvs/Thirdparty/voxblox/include/voxblox/core/block_inl.h:15:21: error: request for member ‘has_data’ in ‘proto’, which is of non-class type ‘const int’ 15 | hasdata = proto.has_data();

Looking forward to your reply, thank you very much!

luigifreda commented 8 months ago

Hi, thanks. It seems you are missing the protobuf libraries. Did you preliminary run the script ./install_dependencies.sh? (see the README instructions) Could you please share which is your system configuration (OS, GCC, etc)?

rookierobot commented 8 months ago

Hi, thanks. It seems you are missing the protobuf libraries. Did you preliminary run the script ./install_dependencies.sh? (see the README instructions) Could you please share which is your system configuration (OS, GCC, etc)?

I followed the readme document you gave 。And I excuted _./installdependencies.sh and ./install_local_opencv before ./build.sh is executed. But I still ran into this problem. My environment is ubuntu20.04, and the GCC version is gcc version 9.4.0。

luigifreda commented 8 months ago

Following the discussion opened in issue #19

luigifreda commented 8 months ago

I am not able to reproduce your error. I used a couple of minimal docker ubuntu20 images (w/ and w/o docker), tested once again the build procedures, and didn't succeeed to get your error.

I suggest the following steps.

I assume you already run these two scripts (from the root of your PLVS working copy) without hitting any problem:

Could you please double-check and confirm this?

Next, enter in the root of your plvs working copy: 1) Use the script ./clean.sh here 2) Try to rebuild everything. First run script ./build_thirdparty.sh and then the full ./build.sh

If something goes wrong then use rosdocker with ubuntu20_cuda or ubuntu20 images, and build PLVS within the run container.

rookierobot commented 8 months ago

I am not able to reproduce your error. I used a couple of minimal docker ubuntu20 images (w/ and w/o docker), tested once again the build procedures, and didn't succeeed to get your error.

I suggest the following steps.

I assume you already run these two scripts (from the root of your PLVS working copy) without hitting any problem:

* `./install_dependencies.sh`

* `./install_local_opencv.sh`

Could you please double-check and confirm this?

Next, enter in the root of your plvs working copy:

1. Use the script `./clean.sh`  [here](https://github.com/luigifreda/plvs/blob/master/clean.sh)

2. Try to rebuild everything. First run script `./build_thirdparty.sh` and then the full `./build.sh`

If something goes wrong then use rosdocker with ubuntu20_cuda or ubuntu20 images, and build PLVS within the run container.

Thank you very much for your contribution. With your guidance, I successfully compiled 'PLVS.' Lastly, I have another question for you. Does the 'PLVS' project support the implementation and execution using our own camera within the ROS framework? Or does 'PLVS' only support testing runs with bag files?

luigifreda commented 8 months ago

PLVS does support ROS nodes under noetic (see this folder). You can attach your live device or use a rosbag.

That being said, if possible, it is always better to use the low-level drivers of the cameras instead of using ROS nodes (for instance take a look at what was done for the realsense).