Hi guys,
Unfortunately, I can't use the apt-get install ros-fuerte-pcl command and need an installation from source. (I'm using an ARM board and Ubuntu 12.04) I'm asking because it seems that in the new ROS Fuerte setup the PCL Library is not included and is seen as an external system dependency.
When i use $roslocate info pcl I get the following output:
- svn: local-name: pcl uri: http://svn.pointclouds.org/ros/trunk/perception_pcl_unstable/pcl
But this website doesn't exist. But there seems to be a special PCL version for ROS (see the Willow Garage repository [https://github.com/wg-debs/pcl-release] ) saw that at answers.ros.org (link)
So i tried to compile the code from WG with the USE_ROS option on ON and it fails to compile with the following failure.
[ 1%] Built target gtest
[ 1%] Built target gtest_main
[ 8%] Built target pcl_common
[ 9%] Built target pcl_kdtree
[ 10%] Built target pcl_octree
[ 12%] Built target pcl_search
[ 23%] Built target pcl_sample_consensus
[ 23%] Built target pcl_geometry
[ 26%] Built target pcl_segmentation
[ 26%] Building CXX object io/CMakeFiles/pcl_io_ply.dir/src/ply/ply_parser.cpp.o
In file included from /home/panda/ros/pcl-release/io/include/pcl/io/ply/ply.h:45:0,
from /home/panda/ros/pcl-release/io/include/pcl/io/ply/ply_parser.h:61,
from /home/panda/ros/pcl-release/io/src/ply/ply_parser.cpp:41:
/home/panda/ros/pcl-release/io/include/pcl/io/ply/byte_order.h:65:4: error: #error
In file included from /home/panda/ros/pcl-release/io/include/pcl/io/ply/ply.h:45:0,
from /home/panda/ros/pcl-release/io/include/pcl/io/ply/ply_parser.h:61,
from /home/panda/ros/pcl-release/io/src/ply/ply_parser.cpp:41:
/home/panda/ros/pcl-release/io/include/pcl/io/ply/byte_order.h:77:4: error: #error
In file included from /home/panda/ros/pcl-release/io/src/ply/ply_parser.cpp:41:0:
/home/panda/ros/pcl-release/io/include/pcl/io/ply/ply_parser.h: In member function ‘bool pcl::io::ply::ply_parser::parse_scalar_property(pcl::io::ply::format_type, std::istream&, const typename pcl::io::ply::ply_parser::scalar_property_callback_type<ScalarType>::type&)’:
/home/panda/ros/pcl-release/io/include/pcl/io/ply/ply_parser.h:577:51: error: ‘host_byte_order’ was not declared in this scope
/home/panda/ros/pcl-release/io/include/pcl/io/ply/ply_parser.h: In member function ‘bool pcl::io::ply::ply_parser::parse_list_property(pcl::io::ply::format_type, std::istream&, const typename pcl::io::ply::ply_parser::list_property_begin_callback_type<SizeType, ScalarType>::type&, const typename pcl::io::ply::ply_parser::list_property_element_callback_type<SizeType, ScalarType>::type&, const typename pcl::io::ply::ply_parser::list_property_end_callback_type<SizeType, ScalarType>::type&)’:
/home/panda/ros/pcl-release/io/include/pcl/io/ply/ply_parser.h:648:51: error: ‘host_byte_order’ was not declared in this scope
/home/panda/ros/pcl-release/io/include/pcl/io/ply/ply_parser.h:674:53: error: ‘host_byte_order’ was not declared in this scope
make[2]: *** [io/CMakeFiles/pcl_io_ply.dir/src/ply/ply_parser.cpp.o] Error 1
make[1]: *** [io/CMakeFiles/pcl_io_ply.dir/all] Error 2
make: *** [all] Error 2
Would be great to get your thoughts about that issue. Thanks What should be the normal way to install pcl for ROS Fuerte when its not possible to use debian-pkgs?
I asked this question in the pcl-users forum as well
Edit:
As I was expecting it, it was something with the hardfloat support of ubuntu 12.04 for the Armel architecture because the ply_parser tries to compare the host_byte_order with the endian_byte_order at this point. So Jochen from PCL changed alot in the trunk version to get that working.
Therefore, I downloaded the trunk ( r7013 / which uses Boost to detect the byte order) and compiled everything without a failure. I just got several of these ROS related warnings:
In file included from /opt/ros/fuerte/include/ros/time.h:57:0,
from /opt/ros/fuerte/include/ros/serialization.h:34,
from /opt/ros/fuerte/include/std_msgs/Header.h:47,
from /home/panda/ros/pcl/common/include/pcl/point_cloud.h:47,
from /home/panda/ros/pcl/io/include/pcl/io/pcd_io.h:43,
from /home/panda/ros/pcl/tools/icp2d.cpp:41:
/opt/ros/fuerte/include/ros/duration.h: In member function ‘double ros::DurationBase<T>::toSec() const’:
/opt/ros/fuerte/include/ros/duration.h:93:41: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/duration.h:93:60: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/duration.h: In member function ‘int64_t ros::DurationBase<T>::toNSec() const’:
/opt/ros/fuerte/include/ros/duration.h:94:43: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/duration.h:94:71: warning: use of old-style cast [-Wold-style-cast]
In file included from /opt/ros/fuerte/include/ros/serialization.h:34:0,
from /opt/ros/fuerte/include/std_msgs/Header.h:47,
from /home/panda/ros/pcl/common/include/pcl/point_cloud.h:47,
from /home/panda/ros/pcl/io/include/pcl/io/pcd_io.h:43,
from /home/panda/ros/pcl/tools/icp2d.cpp:41:
/opt/ros/fuerte/include/ros/time.h: In member function ‘double ros::TimeBase<T, D>::toSec() const’:
/opt/ros/fuerte/include/ros/time.h:152:44: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/time.h:152:63: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/time.h: In member function ‘T& ros::TimeBase<T, D>::fromSec(double)’:
/opt/ros/fuerte/include/ros/time.h:153:51: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/time.h:153:103: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/time.h: In member function ‘uint64_t ros::TimeBase<T, D>::toNSec() const’:
/opt/ros/fuerte/include/ros/time.h:155:47: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/time.h:155:77: warning: use of old-style cast [-Wold-style-cast]
In file included from /opt/ros/fuerte/include/std_msgs/Header.h:47:0,
from /home/panda/ros/pcl/common/include/pcl/point_cloud.h:47,
from /home/panda/ros/pcl/io/include/pcl/io/pcd_io.h:43,
from /home/panda/ros/pcl/tools/icp2d.cpp:41:
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static void ros::serialization::Serializer<bool>::write(Stream&, bool)’:
/opt/ros/fuerte/include/ros/serialization.h:210:26: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static void ros::serialization::Serializer<bool>::read(Stream&, bool&)’:
/opt/ros/fuerte/include/ros/serialization.h:217:15: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static void ros::serialization::Serializer<std::basic_string<char, std::char_traits<char>, ContainerAllocator> >::write(Stream&, const StringType&)’:
/opt/ros/fuerte/include/ros/serialization.h:238:27: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h:242:39: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static void ros::serialization::Serializer<std::basic_string<char, std::char_traits<char>, ContainerAllocator> >::read(Stream&, ros::serialization::Serializer<std::basic_string<char, std::char_traits<char>, ContainerAllocator> >::StringType&)’:
/opt/ros/fuerte/include/ros/serialization.h:253:49: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static uint32_t ros::serialization::Serializer<std::basic_string<char, std::char_traits<char>, ContainerAllocator> >::serializedLength(const StringType&)’:
/opt/ros/fuerte/include/ros/serialization.h:263:35: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static void ros::serialization::VectorSerializer<T, ContainerAllocator, typename boost::disable_if<ros::message_traits::IsFixedSize<T> >::type>::write(Stream&, const VecType&)’:
/opt/ros/fuerte/include/ros/serialization.h:339:34: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static void ros::serialization::VectorSerializer<T, ContainerAllocator, typename boost::enable_if<ros::message_traits::IsSimple<T> >::type>::write(Stream&, const VecType&)’:
/opt/ros/fuerte/include/ros/serialization.h:389:37: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h:393:57: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static void ros::serialization::VectorSerializer<T, ContainerAllocator, typename boost::enable_if<ros::message_traits::IsSimple<T> >::type>::read(Stream&, ros::serialization::VectorSerializer<T, ContainerAllocator, typename boost::enable_if<ros::message_traits::IsSimple<T> >::type>::VecType&)’:
/opt/ros/fuerte/include/ros/serialization.h:407:51: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static uint32_t ros::serialization::VectorSerializer<T, ContainerAllocator, typename boost::enable_if<ros::message_traits::IsSimple<T> >::type>::serializedLength(const VecType&)’:
/opt/ros/fuerte/include/ros/serialization.h:414:45: warning: use of old-style cast [-Wold-style-cast]
In file included from /opt/ros/fuerte/include/std_msgs/Header.h:47:0,
from /home/panda/ros/pcl/common/include/pcl/point_cloud.h:47,
from /home/panda/ros/pcl/io/include/pcl/io/pcd_io.h:43,
from /home/panda/ros/pcl/tools/icp2d.cpp:41:
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static void ros::serialization::VectorSerializer<T, ContainerAllocator, typename boost::enable_if<boost::mpl::and_<ros::message_traits::IsFixedSize<T>, boost::mpl::not_<ros::message_traits::IsSimple<T> > > >::type>::write(Stream&, const VecType&)’:
/opt/ros/fuerte/include/ros/serialization.h:431:34: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In static member function ‘static uint32_t ros::serialization::VectorSerializer<T, ContainerAllocator, typename boost::enable_if<boost::mpl::and_<ros::message_traits::IsFixedSize<T>, boost::mpl::not_<ros::message_traits::IsSimple<T> > > >::type>::serializedLength(const VecType&)’:
/opt/ros/fuerte/include/ros/serialization.h:460:43: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In member function ‘uint32_t ros::serialization::Stream::getLength()’:
/opt/ros/fuerte/include/ros/serialization.h:686:63: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In function ‘ros::SerializedMessage ros::serialization::serializeMessage(const M&)’:
/opt/ros/fuerte/include/ros/serialization.h:809:38: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h:810:28: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h: In function ‘ros::SerializedMessage ros::serialization::serializeServiceResponse(bool, const M&)’:
/opt/ros/fuerte/include/ros/serialization.h:831:40: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h:832:27: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h:833:30: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h:842:40: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/serialization.h:843:27: warning: use of old-style cast [-Wold-style-cast]
In file included from /opt/ros/fuerte/include/std_msgs/Header.h:49:0,
from /home/panda/ros/pcl/common/include/pcl/point_cloud.h:47,
from /home/panda/ros/pcl/io/include/pcl/io/pcd_io.h:43,
from /home/panda/ros/pcl/tools/icp2d.cpp:41:
/opt/ros/fuerte/include/ros/message_operations.h: In static member function ‘static void ros::message_operations::Printer<signed char>::stream(Stream&, const string&, int8_t)’:
/opt/ros/fuerte/include/ros/message_operations.h:56:20: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/message_operations.h: In static member function ‘static void ros::message_operations::Printer<unsigned char>::stream(Stream&, const string&, uint8_t)’:
/opt/ros/fuerte/include/ros/message_operations.h:66:20: warning: use of old-style cast [-Wold-style-cast]
/opt/ros/fuerte/include/ros/message_operations.h: At global scope:
/opt/ros/fuerte/include/ros/message_operations.h: In instantiation of ‘static void ros::message_operations::Printer<M>::stream(Stream&, const string&, const M&) [with Stream = std::basic_ostream<char>, M = unsigned int, std::string = std::basic_string<char>]’:
/opt/ros/fuerte/include/std_msgs/Header.h:239:5: instantiated from ‘static void ros::message_operations::Printer<std_msgs::Header_<ContainerAllocator> >::stream(Stream&, const string&, const std_msgs::Header_<ContainerAllocator>&) [with Stream = std::basic_ostream<char>, ContainerAllocator = std::allocator<void>, std::string = std::basic_string<char>]’
/opt/ros/fuerte/include/std_msgs/Header.h:102:1: instantiated from ‘std::ostream& std_msgs::operator<<(std::ostream&, const std_msgs::Header_<ContainerAllocator>&) [with ContainerAllocator = std::allocator<void>, std::ostream = std::basic_ostream<char>]’
/home/panda/ros/pcl/common/include/pcl/PointIndices.h:32:20: instantiated from here
/opt/ros/fuerte/include/ros/message_operations.h:42:15: warning: unused parameter ‘indent’ [-Wunused-parameter]
/opt/ros/fuerte/include/ros/message_operations.h: In instantiation of ‘static void ros::message_operations::Printer<M>::stream(Stream&, const string&, const M&) [with Stream = std::basic_ostream<char>, M = ros::Time, std::string = std::basic_string<char>]’:
/opt/ros/fuerte/include/std_msgs/Header.h:241:5: instantiated from ‘static void ros::message_operations::Printer<std_msgs::Header_<ContainerAllocator> >::stream(Stream&, const string&, const std_msgs::Header_<ContainerAllocator>&) [with Stream = std::basic_ostream<char>, ContainerAllocator = std::allocator<void>, std::string = std::basic_string<char>]’
/opt/ros/fuerte/include/std_msgs/Header.h:102:1: instantiated from ‘std::ostream& std_msgs::operator<<(std::ostream&, const std_msgs::Header_<ContainerAllocator>&) [with ContainerAllocator = std::allocator<void>, std::ostream = std::basic_ostream<char>]’
/home/panda/ros/pcl/common/include/pcl/PointIndices.h:32:20: instantiated from here
/opt/ros/fuerte/include/ros/message_operations.h:42:15: warning: unused parameter ‘indent’ [-Wunused-parameter]
/opt/ros/fuerte/include/ros/message_operations.h: In instantiation of ‘static void ros::message_operations::Printer<M>::stream(Stream&, const string&, const M&) [with Stream = std::basic_ostream<char>, M = std::basic_string<char>, std::string = std::basic_string<char>]’:
/opt/ros/fuerte/include/std_msgs/Header.h:243:5: instantiated from ‘static void ros::message_operations::Printer<std_msgs::Header_<ContainerAllocator> >::stream(Stream&, const string&, const std_msgs::Header_<ContainerAllocator>&) [with Stream = std::basic_ostream<char>, ContainerAllocator = std::allocator<void>, std::string = std::basic_string<char>]’
/opt/ros/fuerte/include/std_msgs/Header.h:102:1: instantiated from ‘std::ostream& std_msgs::operator<<(std::ostream&, const std_msgs::Header_<ContainerAllocator>&) [with ContainerAllocator = std::allocator<void>, std::ostream = std::basic_ostream<char>]’
/home/panda/ros/pcl/common/include/pcl/PointIndices.h:32:20: instantiated from here
/opt/ros/fuerte/include/ros/message_operations.h:42:15: warning: unused parameter ‘indent’ [-Wunused-parameter]
finally I tried to compile openni_launch which leeds me to the following failure message about the depth_image_proc can't find pcl ( [rospack] Error: package/stack depth_image_proc depends on non-existent package pcl ). But openni_launch apperently find's the installed pcl ( In file included from /usr/local/include/pcl-1.7/pcl/common/io.h:46 )
here is the full failure message:
mkdir -p bin cd build && cmake -Wdev -DCMAKE_TOOLCHAIN_FILE=`rospack find rosbuild`/rostoolchain.cmake .. [rosbuild] Building package depth_image_proc Failed to invoke /opt/ros/fuerte/bin/rospack deps-manifests depth_image_proc [rospack] Error: package/stack depth_image_proc depends on non-existent package pcl CMake Error at /opt/ros/fuerte/share/ros/core/rosbuild/public.cmake:129 (message): Failed to invoke rospack to get compile flags for package 'depth_image_proc'. Look above for errors from rospack itself. Aborting. Please fix the broken dependency! Call Stack (most recent call first): /opt/ros/fuerte/share/ros/core/rosbuild/public.cmake:203 (rosbuild_invoke_rospack) CMakeLists.txt:12 (rosbuild_init) -- Configuring incomplete, errors occurred! -------------------------------------------------------------------------------} [ rosmake ] Output from build of package depth_image_proc written to: [ rosmake ] /home/panda/.ros/rosmake/rosmake_output-20120830-090256/depth_image_proc/build_output.log [rosmake-1] Finished <<< depth_image_proc [FAIL] [ 5.41 seconds ] [ rosmake ] Halting due to failure in package depth_image_proc. [ rosmake ] Waiting for other threads to complete. [ rosmake ] Last 40 linesl_ros: 51.3 sec ] [ 1 Active 42/48 Complete ] {------------------------------------------------------------------------------- Finding dependencies for /home/panda/ros/perception_pcl_unstable/pcl_ros/cfg/EuclideanClusterExtraction.cfg -- Configuring done -- Generating done CMake Warning: Manually-specified variables were not used by the project: CMAKE_TOOLCHAIN_FILE -- Build files have been written to: /home/panda/ros/perception_pcl_unstable/pcl_ros/build cd build && make -l2 make[1]: Entering directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' make[2]: Entering directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' make[3]: Entering directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' make[3]: Leaving directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' [ 36%] Built target ROSBUILD_gencfg_cpp make[3]: Entering directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' make[3]: Leaving directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' [ 36%] Built target rospack_gencfg make[3]: Entering directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' make[3]: Leaving directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' [ 36%] Built target rospack_genmsg_libexe make[3]: Entering directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' make[3]: Leaving directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' [ 36%] Built target rosbuild_precompile make[3]: Entering directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' make[3]: Leaving directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' make[3]: Entering directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' [ 40%] Building CXX object CMakeFiles/pcl_ros_tf.dir/src/pcl_ros/transforms.o In file included from /usr/local/include/pcl-1.7/pcl/common/io.h:46:0, from /home/panda/ros/perception_pcl_unstable/pcl_ros/src/pcl_ros/transforms.cpp:38: /usr/local/include/pcl-1.7/pcl/pcl_base.h:54:30: fatal error: pcl/PointIndices.h: No such file or directory compilation terminated. make[3]: *** [CMakeFiles/pcl_ros_tf.dir/src/pcl_ros/transforms.o] Error 1 make[3]: Leaving directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' make[2]: *** [CMakeFiles/pcl_ros_tf.dir/all] Error 2 make[2]: Leaving directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' make[1]: *** [all] Error 2 make[1]: Leaving directory `/home/panda/ros/perception_pcl_unstable/pcl_ros/build' -------------------------------------------------------------------------------} [ rosmake ] Output from build of package pcl_ros written to: [ rosmake ] /home/panda/.ros/rosmake/rosmake_output-20120830-090256/pcl_ros/build_output.log [rosmake-0] Finished <<< pcl_ros [FAIL] [ 51.37 seconds ] [ rosmake ] Halting due to failure in package pcl_ros. [ rosmake ] Waiting for other threads to complete. [ rosmake ] Results: [ rosmake ] Built 44 packages with 2 failures. [ rosmake ] Summary output to directory [ rosmake ] /home/panda/.ros/rosmake/rosmake_output-20120830-090256
Would be great to get the new pcl integrated into ROS Fuerte... So please help
EDIT 2:
I used $rosmake pcl17 which took 5 hours to compile and I was really full of hope that this attemp will work. But after trying $rosmake openni_launch produces the same failure I posted before (post from Aug 30, 2012; 9:19am).
Now, I figured out what the problem/missunderstanding is. The pcl17 is a package to use the current trunk in the ROS environment beside an existing pcl installation (I think at the moment its version 1.5). But its still not a standalone version which is playing nicely with ROS, right?
I try to explain it again: I just want to use openni_launch package (which needs pcl) on my pandaboard (armel). Because of the armel architecture I need to compile everything from source and I can't use $sudo apt-get install ros-fuerte-perception-pcl so I tried to use $roslocate info perception-pcl (which is normaly pointing to the source code of the needed package, in this case http://svn.pointclouds.org/ros/trunk/perception_pcl_unstable) but this site is still not existing. And actually no need for me too use the unstable version its just what ROS is telling me (even the official website is pointing to the unstable version link) so I was trying to find a version which will work with ROS. And then I tried to ask here....
I'm totally confused and I would really much appreciate if someone could explain me when I did something wrong or when my way of thinking is wrong...
Originally posted by dinamex on ROS Answers with karma: 447 on 2012-06-25
Post score: 6
Original comments
Comment by Eric Perko on 2012-06-25:
Is this ROS Fuerte or Electric?