GithubHelp home page GithubHelp logo

ros-perception / perception_pcl Goto Github PK

View Code? Open in Web Editor NEW
411.0 411.0 329.0 1.14 MB

PCL (Point Cloud Library) ROS interface stack

Home Page: http://wiki.ros.org/perception_pcl

CMake 2.44% Python 3.35% C++ 94.21%

perception_pcl's People

Contributors

aposhian avatar asymingt avatar bricerebsamen avatar cosama avatar cottsay avatar daisukes avatar defrenz avatar dirk-thomas avatar jacquelinekay avatar jkammerl avatar k-okada avatar kettenhoax avatar lucidone avatar mattderry avatar mikaelarguedas avatar mikeferguson avatar mintar avatar mvieth avatar paulbovbel avatar pmusau17 avatar rayman avatar richmattes avatar ruffsl avatar stevemacenski avatar tacha-s avatar tfoote avatar theseankelly avatar vrabaud avatar wjwwood avatar wkentaro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

perception_pcl's Issues

Serializer<pcl::PointCloud<T>>::read(stream,m) hangs

Consider the program:

#include <ros/ros.h>
#include <pcl_ros/point_cloud.h>
#include <pcl/point_types.h>

void
cloud_cb (const pcl::PointCloud<pcl::PointXY>::ConstPtr& input)
{
  ROS_INFO("received a point cloud");
}

int
main (int argc, char** argv)
{
  ros::init (argc, argv, "cloud_listener");
  ros::NodeHandle nh;
  ros::Subscriber sub = nh.subscribe<pcl::PointCloud<pcl::PointXY> > ("cloud", 1, cloud_cb);
  ros::spin ();
}

We can get this program to freeze by sending the message:

$ rostopic pub /cloud sensor_msgs/PointCloud2 "{'width':0xffffffff, 'height':0xffffffff}" -1

The program gets stuck in this loop in pcl_ros/point_cloud.h:

          // If not, do a lot of memcpys to copy over the fields
          for (uint32_t row = 0; row < m.height; ++row) {
            const uint8_t* stream_data = stream.advance(row_step);
            for (uint32_t col = 0; col < m.width; ++col, stream_data += point_step) {
              BOOST_FOREACH(const pcl::detail::FieldMapping& fm, mapping) {
                memcpy(m_data + fm.struct_offset, stream_data + fm.serialized_offset, fm.size);
              }
              m_data += sizeof(T);
            }
          }

Two different ways this could be fixed:

  1. Add an assertion like:
assert(data_size > 0 || (m.width == 0 && m.height == 0));

This says that if the message has no data content, then its width and height fields are zero. This is better than just assert(data_size > 0) because we don't want default empty messages to crash the node.

  1. Add a conditional like:
if (data_size > 0) { ...

so that no memcpy loop is attempted if it is known that the message has no data content. This would have the advantage of not crashing the node when such a message arrives.


(edited: data_size is probably the right variable to check, not row_step)

NI Not Found

Myself and several others have run into this problem when installing gazebo_ros_pkgs from source for ROS Hydro. I haven't figured out what is causing it but I have found a workaround where if you uninstall everything (using something like synaptic) related to pcl (libpcl, ros-hydro-pcl, etc) and then re-install them, it seems to work. There's probably some dependency issue that needs to be fixed.

The output:

Make Error at /opt/ros/hydro/share/pcl_ros/cmake/pcl_rosConfig.cmake:98 (message):
  Project 'pcl_ros' specifies '/usr/include/ni' as an include dir, which is
  not found.  It does neither exist as an absolute directory nor in
  '/opt/ros/hydro//usr/include/ni'.  Ask the maintainer 'William Woodall
  <[email protected]>, Julius Kammerl <[email protected]>' to fix it.
Call Stack (most recent call first):
  /opt/ros/hydro/share/gazebo_plugins/cmake/gazebo_pluginsConfig.cmake:154 (find_package)
  /opt/ros/hydro/share/gazebo_ros/cmake/gazebo_rosConfig.cmake:154 (find_package)
  /opt/ros/hydro/share/catkin/cmake/catkinConfig.cmake:72 (find_package)
  baxter/baxter_gazebo/CMakeLists.txt:4 (find_package)

Thanks!

Ogre 1.9 compatibility needs an ifdef for include of OgreFontManager.h

More details here: ros/rosdistro#2805

With the 1.9 version of ogre I commited last time I got errors when
compiling pcl_ros package and gazebo from source. I got errors because the
file "OGRE/OgreFontManager.h" can not be founded. I search the filelist for
the 1.9 package (
http://packages.debian.org/sid/amd64/libogre-1.9-dev/filelist) and found
that the directory structure for the headers change. That file is now under
"OGRE/Overlay/OgreFontManager.h" Using 1.8 gave no problems during
compilation.

manifest.xml causing compile errors in dependent package (fuerte/Precise)

Not sure if this is a wont fix since fuerte stuff is being deprecated, but...

Building a dependent package I get the following:

# VERBOSE=1 make
mkdir -p bin
cd build && cmake -Wdev -DCMAKE_TOOLCHAIN_FILE=`rospack find rosbuild`/rostoolchain.cmake  ..
Re-run cmake no build system arguments
[rosbuild] Building package package_name_redacted
[rosbuild] Cached build flags older than manifests; calling rospack to get flags
Failed to invoke /opt/ros/fuerte/bin/rospack cflags-only-I;--deps-only package_name_redacted
[rospack] Warning: ignoring duplicate cpp tag in export block
CMake Error at /usr/lib/vtk-5.8/VTKTargets.cmake:16 (ADD_EXECUTABLE):
  Command add_executable() is not scriptable
Call Stack (most recent call first):
  /usr/lib/vtk-5.8/VTKConfig.cmake:231 (INCLUDE)
  /usr/share/cmake-2.8/Modules/FindVTK.cmake:73 (FIND_PACKAGE)
  /home/username_redacted/tmp/perception_pcl/pcl/vtk_include.cmake:1 (find_package)


CMake Error at /opt/ros/fuerte/share/ros/core/rosbuild/public.cmake:129 (message): 

  Failed to invoke rospack to get compile flags for package
  'package_name_redacted'.  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:227 (rosbuild_invoke_rospack)
  CMakeLists.txt:13 (rosbuild_init)

I found this which seems to be the same problem from a year ago:
https://code.ros.org/trac/ros-pkg/ticket/5243

Unfortunately the patch doesn't work completely on the current version.

I was able to get around the problem by commenting out the contents of vtk_include.cmake and vtk_library.cmake and replacing them with hard coded MESSAGE( "/usr/include/vtk-5.8" ) and the like.

missing library components in pcl_nodelets.xml

Hi, I was just wondering, why there are only two library components written in the pcl_nodelets.xml (branch hydro-devel)? why are the other libraries not added, such as "pcl_ros_segmentation"?

Thanks!

This may or may not be an issue I am unable to find a solution

I am running pointcloud_to_laserscan .
Reinstatement of issue: I am using the gazebo kinetic camera plugin. If I send the /depth/points to pointcloud_to_laserscan it does not seem to produce as usable scan output. So that gmapping complains that it is no mounted as planer ...

Release into ROS Jade

Please release this package into ROS Jade as it is a blocking dependency of the navigation stack.

ros_pcl filters plugin not found by FilterChain

FilterChain use a hardcoded "filters" package name for searching for plugins. Registering all the pcl_ros plugins in the nodelet package makes them unavailable to the filters::FilterChain tool.

Moreover, the base_class_type (in pcl_nodelets.xml) is pointing on nodelet::Nodelet, shoudn't it be something like filters::FilterBase<sensor_msgs::PointCloud2>. Even though it is not really inheriting from it, it still implement the basic API (I think).

I might have missed something somewhere though.

some part of PCL should probably depend on python-vtk and libvtk-java

When compiling against PCL without python-vtk installed, I get many warnings like:

-- The imported target "vtkPythonCore" references the file
   "/usr/lib/libvtkPythonCore.so.5.8.0"
but this file does not exist.  Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
   "/usr/lib/vtk-5.8/VTKTargets-release.cmake"
but not all the files it references.

Installing python-vtk fixes this.

I get similar warnings that are resolved by installing libvtk-java:

-- The imported target "vtkHybridJava" references the file
   "/usr/lib/jni/libvtkHybridJava.so.5.8.0"
but this file does not exist.  Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
   "/usr/lib/vtk-5.8/VTKTargets-release.cmake"
but not all the files it references.

missing nodelet dependencies

building desktop-full from source, pcl_ros fails:
Adding "nodelet nodelet_topic_tools" to find_package fixes that.

Compile errors below:

In file included from /home/kruset/groovy_underlay/src/pcl_ros/src/pcl_ros/io/concatenate_fields.cpp:42:0:
/home/kruset/groovy_underlay/src/pcl_ros/include/pcl_ros/io/concatenate_fields.h:42:29: fatal error: nodelet/nodelet.h: No such file or directory

/home/kruset/groovy_underlay/src/pcl_ros/src/pcl_ros/io/io.cpp:42:45: fatal error: nodelet_topic_tools/nodelet_mux.h: No such file or directory

Linking issue in bag_to_pcd

I have an issue with linking libraries to that executable. CMake does all right in finding all libs, but then in the making process i get:

Scanning dependencies of target bag_to_pcd
[ 5%] Building CXX object CMakeFiles/bag_to_pcd.dir/tools/bag_to_pcd.cpp.o
Linking CXX executable /Users/DeFrenZ/ros_catkin_ws/devel_isolated/pcl_ros/lib/pcl_ros/bag_to_pcd
Undefined symbols for architecture x86_64:
"pcl::PCDWriter::writeASCII(std::string const&, sensor_msgs::PointCloud2_std::allocator const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, int)", referenced from:
pcl::PCDWriter::write(std::string const&, sensor_msgs::PointCloud2_std::allocator const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, bool) in bag_to_pcd.cpp.o
"pcl::PCDWriter::writeBinary(std::string const&, sensor_msgs::PointCloud2_std::allocator const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&)", referenced from:
pcl::PCDWriter::write(std::string const&, sensor_msgs::PointCloud2_std::allocator const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, bool) in bag_to_pcd.cpp.o
ld: symbol(s) not found for architecture x86_64

Any idea why? those functions don't even appear in bag_to_pcd.cpp, even if savePCDFile(...) does. But <pcl/io/pcd_io.h> is the file where those should be defined, and I've also checked the CMake generated files and they correctly use the path of the .dylib and .h that I need...

Mac OS X 10.8, pcl got from trunk (and already builded with catkin)

Running node which uses groovy-unstable-devel brings CAIRO_STATUS_SUCCESS' failed

Hi,

when i use the groovy-unstable-devel branch of PCL for my projects, i always get the following after starting a node that uses PCL:

AssertionMessage: claws-mail: /build/buildd/cairo-1.10.2/src/cairo-surface.c:1287: cairo_surface_set_device_offset: Assertion `status == CAIRO_STATUS_SUCCESS' failed.

Sorry, im not very familiar with ros and that stuff.

Timestamp is not maintained on hydro

timestamp is not maintained if nodelets of pcl_ros are used because timestamp of pcl is in usec and timestamp of ROS is in nsec.

It means that we cannot use ExactTime policy of message_filters with pcl_ros nodelets.

why class_loader_hide_library_symbols is needed?

Hi,

We're developing pcl::FIlter based PCL nodelet library at http://svn.code.sf.net/p/jsk-ros-pkg/code/trunk/jsk_pcl_ros, but it does not work since groovy.
Some of our code uses pcl_ros::Filter as a super class, for example resize_points_publisher.cpp, but it fails to load as following message.

However, the code works, if we remove
class_loader_hide_library_symbols(pcl_ros_filters)
from CMakeLists.txt,

So, why class_loader_hide_library_symbols is needed? if it is not important, is it possible to remove this line from CMakeLists.txt?

[ERROR] [1367521319.699211347]: Failed to load nodelet [/depth_image_creator_nodelet] of type [jsk_pcl/DepthImageCreator]: Failed to load library /home/k-okada/ros/groovy/jsk-ros-pkg/jsk_pcl_ros/lib/libjsk_pcl_ros.so. Make sure that you are calling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consistent between this macro and your XML. Error string: Could not load library (Poco exception = /home/k-okada/ros/groovy/jsk-ros-pkg/jsk_pcl_ros/lib/libjsk_pcl_ros.so: undefined symbol: _ZN7pcl_ros6Filter15config_callbackERNS_12FilterConfigEj)
[FATAL] [1367521319.699405536]: Service call failed!

pcl_rosConfig.cmake expects missing system install of libflann_cpp_s.a in precise

In ubuntu precise (12.04), hydro packages compiled against pcl_ros fails because:

/opt/ros/hydro/lib/pkgconfig/pcl_ros.pc
/opt/ros/hydro/share/pcl_ros/cmake/pcl_rosConfig.cmake

looks for

/usr/lib/libflann_cpp_s.a

However, system install of libflann-dev does not provide a static version of the library in /usr/lib, it is found in

/usr/lib/x86_64-linux-gnu/libflann_cpp_s.a

This worked in groovy because

/opt/ros/groovy/lib/pkgconfig/pcl_ros.pc
/opt/ros/groovy/share/pcl_ros/cmake/pcl_rosConfig.cmake

depends on groovy custom package of static libflann library:

/opt/ros/groovy/lib/libflann_cpp_s.a

Boost.Signals is no longer being maintained and is now deprecated.

Building indigo with Ubuntu 14.04

[ 34%] Building CXX object perception_pcl/pcl_ros/CMakeFiles/pcl_ros_tf.dir/src/transforms.cpp.o
In file included from /usr/include/boost/signals.hpp:9:0,
                 from /opt/ros/indigo/include/tf/tf.h:45,
                 from /opt/ros/indigo/include/tf/transform_listener.h:38,
                 from /home/lucid/catkin_ws/src/perception_pcl/pcl_ros/include/pcl_ros/transforms.h:43,
                 from /home/lucid/catkin_ws/src/perception_pcl/pcl_ros/src/transforms.cpp:41:
/usr/include/boost/signal.hpp:17:4: warning: #warning "Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING." [-Wcpp]
 #  warning                  "Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING."

Allow pcl/PassThrough nodelet to have filter limits outside the range [-5, 5]

Restricting allowed values for filter_limit_min, filter_limit_max parameters to range [-5, 5] is very limiting and makes the filter useless for many use cases, especially for outdoor scenarios where corresponding values are often in the order of tens or hundreds. I don't understand why to introduce such limitations. (Having a nice step size for reconfigure_gui is not a good reason, IMHO.)

Deb package build?

Is there a way to generate deb packages for perception_pcl? I didn't see any make targets.

cmake errors using released version of pcl_ros in hydro

Hi,

I am currently getting the following cmake errors in packages using the binary pcl_ros package from the hydro repositories. I am using Ubuntu precise amd64. The current version is ros-hydro-pcl-ros 1.1.5-0precise-20130830-1312-+0000.

CMake Error at /opt/ros/hydro/share/pcl_ros/cmake/pcl_rosConfig.cmake:98 (message):
  Project 'pcl_ros' specifies '/usr/include/ni' as an include dir, which is
  not found.  It does neither exist as an absolute directory nor in
  '/opt/ros/hydro//usr/include/ni'.  Ask the maintainer 'William Woodall
  <[email protected]>, Julius Kammerl <[email protected]>' to fix it.
Call Stack (most recent call first):
  /opt/ros/hydro/share/gazebo_plugins/cmake/gazebo_pluginsConfig.cmake:154 (find_package)
  /opt/ros/hydro/share/catkin/cmake/catkinConfig.cmake:72 (find_package)
  CMakeLists.txt:7 (find_package)


-- Configuring incomplete, errors occurred!

I do not have the include folder /usr/include/ni on my system, although all dependencies are fulfilled. If I install the package libopenni-dev which contains this folder manually, apt-get wants to remove ros-hydro-pcl-ros and all kind of libpcl-* packages. There seems to be a conflict / dependency error related to ros-hydro-pcl-ros, openni-dev and libopenni-dev.

Johannes

Filter class should be compiled separately from pcl_ros_filters library

Documentation about the pcl_ros::Filter class http://ros.org/doc/groovy/api/pcl_ros/html/classpcl__ros_1_1Filter.html makes it appear that it is a class which can be used by implementers of new pcl filter nodelets.

However as pointed out in #9 the CMakeLists.txt file includes the line "class_loader_hide_library_symbols(pcl_ros_filters)", and pcl_ros_filters is the only library containing the compiled contents of pcl_ros::Filter. Therefore pcl_ros::Filter is not actually usable by outside programmers. If it is really intended to be only an internal helper class for the pcl_ros_filters library, then it should be documented as such.

However it appears to be a more generally useful helper class, making it easy to write PCL filter nodelets without a bunch of boilerplate. To make this possible, a new library should be defined, say pcl_ros_filter or pcl_ros_filter_base which contains only pcl_ros::Filter. That library would naturally not have class_loader_hide_library_symbols() because it would not be defining a plugin. Then implementors of new filters would link against that library, as would the existing pcl_ros_filters library.

In the meantime the solution to my problem is to copy pcl_ros/filters/filter.cpp into my own code and do a bunch of renaming.

SACSegmentation problems

As a follow-up for #29, I'm trying to use the segmentation nodelets to get a plane model out of a point cloud.

First, I added the segmentation library to the pcl_nodelets.xml (don't know why this is missing here):

<!-- PCL Segmentation library component -->
<library path="lib/libpcl_ros_segmentation">
  <class name="pcl/ExtractPolygonalPrismData" type="ExtractPolygonalPrismData" base_class_type="nodelet::Nodelet">
    <description>
      ExtractPolygonalPrismData uses a set of point indices that represent a planar model, and together with a given
      height, generates a 3D polygonal prism. The polygonal prism is then used to segment all points lying inside it.
    </description>
  </class>

   <class name="pcl/EuclideanClusterExtraction" type="EuclideanClusterExtraction" base_class_type="nodelet::Nodelet">
     <description>
       EuclideanClusterExtraction represents a segmentation class for cluster extraction in an Euclidean sense.
    </description>
  </class>

  <class name="pcl/SACSegmentationFromNormals" type="SACSegmentationFromNormals" base_class_type="nodelet::Nodelet">
    <description>
      SACSegmentation represents the Nodelet segmentation class for Sample Consensus methods and models, in the sense that
      it just creates a Nodelet wrapper for generic-purpose SAC-based segmentation.
    </description>
  </class>

  <class name="pcl/SACSegmentation" type="SACSegmentation" base_class_type="nodelet::Nodelet">
    <description>
      SACSegmentation represents the Nodelet segmentation class for Sample Consensus methods and models, in the sense that
      it just creates a Nodelet wrapper for generic-purpose SAC-based segmentation.
    </description>
  </class>

  <class name="pcl/SegmentDifferences" type="SegmentDifferences" base_class_type="nodelet::Nodelet">
     <description>
       SegmentDifferences obtains the difference between two spatially aligned point clouds and returns the
       difference between them for a maximum given distance threshold.
    </description>
  </class>

</library>

Then, I launch the nodelet in a launch file (which I found on ros answers):

<node pkg="nodelet" type="nodelet" name="voxel_grid" args="load pcl/VoxelGrid sensor_manager" output="screen">
    <remap from="~input" to="/camera/depth/points" />
    <rosparam>
      filter_field_name: z
      filter_limit_min: 0.3
      filter_limit_max: 3
      filter_limit_negative: False
      leaf_size: 0.03
    </rosparam>
  </node>

  <!-- Run a SACSegmentation filter to find the points lying on the floor --> 
   <node pkg="nodelet" type="nodelet" name="find_plane" args="load pcl/SACSegmentation sensor_manager" output="screen" machine="$(arg robot_machine)">
      <remap from="~input" to="/voxel_grid/output"/>
      <remap from="~inliers" to="find_plane/plane_indices"/>
      <rosparam>
        model_type: 9 
        method_type: 0        
        distance_threshold: 0.02
        max_iterations: 500
        optimize_coefficients: true
        axis: [0.0, -0.906, -0.423] 
        eps_angle: 0.7 
        </rosparam>
    </node>

Then, I got a memory problem(I change the NODELET_DEBUG to NODELET_WARN, because I don't know how to show the debug message...):

[ WARN] [1374738349.448059144]: [/find_plane::input_indices_callback] PointCloud with 28 data points, stamp 1374738349.399502, and frame /camera_depth_optical_frame on topic /voxel_grid/output received.
*** glibc detected *** /opt/ros/hydro/lib/nodelet/nodelet: free(): invalid pointer: 0xb0302ab0 ***

I figured this is also a shared pointer initialization problem, in the callback

pcl_ros::SACSegmentation::input_indices_callback

The IndicesPtr at line 307 is not initialized, since the PointIndicesConstPtr is empty. So, I did

IndicesPtr indices_ptr(new std::vector<int>);

in the callback function, but then, the segmentation algorithm doesn't work out anymore:

[ WARN] [1374738830.275080933]: [/find_plane::input_indices_callback] PointCloud with 60 data points, stamp 1374738830.219591, and frame /camera_depth_optical_frame on topic /voxel_grid/output received.
[pcl::SampleConsensusModel::getSamples] Can not select 0 unique points out of 0!
[pcl::RandomSampleConsensus::computeModel] No samples could be selected!
[pcl::SACSegmentation::segment] Error segmenting the model! No solution found.
[ WARN] [1374738830.276829872]: [/find_plane::input_indices_callback] No inliers found!

The subscriber I used in my program to get model and indices are initialized as:

message_filters::Subscriber<sensor_msgs::PointCloud2> sub_input_filter;
message_filters::Subscriber<pcl_msgs::PointIndices> sub_indices_filter;
message_filters::Subscriber<pcl_msgs::ModelCoefficients> sub_model_filter;

And these subscribers are placed in a boost shared pointer synchronizer.

Could anyone please check this problem?
Thanks!

pointcloud_to_laserscan 1.2.4 broken

pointcloud_to_laserscan seems to have been broken by 331cd9c [1] on Fedora.

I can't really figure out how it is working on Ubuntu but not Fedora. I'd be more than willing to test fixes, or even supply a Fedora machine for you to test on, but I'm at my wit's end trying to find a solution...

This is blocking a pretty fair amount of packages from building on Fedora...

Thanks,

--scott

[1] http://csc.mcs.sdsmt.edu/jenkins/job/ros-indigo-pointcloud-to-laserscan_binaryrpm_heisenbug_x86_64/21/consoleFull

EDIT: Duh, I forgot to post the error:

Linking CXX executable ~/pcl_ws/devel_isolated/pointcloud_to_laserscan/lib/pointcloud_to_laserscan/pointcloud_to_laserscan_node
~/pcl_ws/devel_isolated/pointcloud_to_laserscan/lib/libpointcloud_to_laserscan.so: undefined reference to `void tf2::doTransform<geometry_msgs::Point32_<std::allocator<void> > >(geometry_msgs::Point32_<std::allocator<void> > const&, geometry_msgs::Point32_<std::allocator<void> >&, geometry_msgs::TransformStamped_<std::allocator<void> > const&)'
~/pcl_ws/devel_isolated/pointcloud_to_laserscan/lib/libpointcloud_to_laserscan.so: undefined reference to `std::string const& tf2::getFrameId<geometry_msgs::Point32_<std::allocator<void> > >(geometry_msgs::Point32_<std::allocator<void> > const&)'
~/pcl_ws/devel_isolated/pointcloud_to_laserscan/lib/libpointcloud_to_laserscan.so: undefined reference to `ros::Time const& tf2::getTimestamp<geometry_msgs::Point32_<std::allocator<void> > >(geometry_msgs::Point32_<std::allocator<void> > const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [~/pcl_ws/devel_isolated/pointcloud_to_laserscan/lib/pointcloud_to_laserscan/pointcloud_to_laserscan_node] Error 1
make[1]: *** [CMakeFiles/pointcloud_to_laserscan_node.dir/all] Error 2
make: *** [all] Error 2

Indigo Release

This is just a request for there to be an indigo release of pcl_ros, so that people can track the maintainer's progress.

bag_to_pcd does not support tf2

Support for tf2 needed for Hydro and later

This is the quick way of fixing it.

Patch

diff --git a/pcl_ros/tools/bag_to_pcd.cpp b/pcl_ros/tools/bag_to_pcd.cpp
index b9114cf..d1ec14e 100644
--- a/pcl_ros/tools/bag_to_pcd.cpp
+++ b/pcl_ros/tools/bag_to_pcd.cpp
@@ -91,6 +91,7 @@ int

   view.addQuery (bag, rosbag::TypeQuery ("sensor_msgs/PointCloud2"));
   view.addQuery (bag, rosbag::TypeQuery ("tf/tfMessage"));
+  view.addQuery (bag, rosbag::TypeQuery ("tf2_msgs/TFMessage"));
   view_it = view.begin ();

   std::string output_dir = std::string (argv[3]);

If there is an example of the preferred migration approach I'd be happy to produce a patch.

bag_to_pcd fails mysteriously with unindexed bags

user@system:~$ rosrun pcl_ros bag_to_pcd input.bag ./velodyne_points ./pcd
Error opening file ./input.bag

user@system:~$ rosbag info input.bag
ERROR bag unindexed: input.bag. Run rosbag reindex.

pcl/* nodelets no longer load under Groovy/Precise

Tested using the latest Groovy debs and Ubuntu 12.04LTS. Also reported on answers.ros.org on Feb 9, 2013.

To reproduce:

Terminal 1:

$ rosrun nodelet nodelet manager __name:=nodelet_manager
[ INFO] [1362419668.982743970]: Initializing nodelet with 4 worker threads.

Terminal 2:

$ rosrun nodelet nodelet load pcl/PassThrough nodelet_manager ~input:="/camera/depth_registered/points"
[FATAL] [1362419158.720559530]: Service call failed!

and in Terminal 1 we get the error:

[ERROR] [1362419929.099306606]: Failed to load nodelet [/pcl_PassThrough] of type [pcl/PassThrough]: According to the loaded plugin descriptions the class pcl/PassThrough with base class type nodelet::Nodelet does not exist. Declared types are ccny_rgbd/RGBDImageProcNodelet cmd_vel_mux/CmdVelMuxNodelet depth_image_proc/convert_metric depth_image_proc/disparity depth_image_proc/point_cloud_xyz depth_image_proc/point_cloud_xyzrgb depth_image_proc/register depthimage_to_laserscan/DepthImageToLaserScanNodelet image_proc/crop_decimate image_proc/debayer image_proc/rectify image_view/disparity image_view/image kobuki_auto_docking/AutoDockingNodelet kobuki_bumper2pc/Bumper2PcNodelet kobuki_controller_tutorial/BumpBlinkControllerNodelet kobuki_node/KobukiNodelet kobuki_safety_controller/SafetyControllerNodelet nodelet_tutorial_math/Plus openni_camera/driver stereo_image_proc/disparity stereo_image_proc/point_cloud stereo_image_proc/point_cloud2 turtlebot_follower/TurtlebotFollower yocs_velocity_smoother/VelocitySmootherNodelet

Same error for VoxelGrid and StatisticalOutlierRemoval filters.

pcl_ros, bag_to_pcd assumes TF

ticket from: https://code.ros.org/trac/ros-pkg/ticket/5257

bag_to_pcd assumes TF to be present in the bag which is absolutely not necessary for just converting a bag file to a pcd file. The fact that it requires the TF topic is not documented anywhere and even worse, it assumes to always see the frame base_link.

I suggest to make the transform part optional, document it, and make the frame name easily configurable through one single, documented, ROS parameter.

provide a migration path so client code can support both Hydro and Groovy

Most of this can be done with #ifdef tests in the client code.

But, there is least one problem with that: the new Hydro version requires pcl_conversions, which did not exist before. We need some way to make that dependency conditional and testable within client code.

One idea is for the Hydro version of pcl_ros to depend on pcl_conversions. That dependency could be removed in Indigo as a tick-tock update.

Existing clients already depend on pcl_ros. Maybe they could do some kind of conditional find_package() and test the result. Then, clients could only use that dependency when PCL 1.7 is present. I don't understand all the details, yet.

Perhaps there is a better solution. I am still trying to figure out how to deal with this problem. See: ros-drivers/velodyne#11.

Converting between pcl and ROS classes

As per discussions on the pcl mailing list (http://www.pcl-developers.org/Separating-pcl-and-ROS-td5707911.html) and github (PointCloudLibrary/pcl#110), we're looking to get rid of ROS/pcl conflicts. That means PointCloud2, Header, Image, and PointField will no longer directly be used in pcl.

To make this easier on ROS users, it'd be great to have code which converts between the two formats. I'm happy to write it (the two classes are almost identical), but since I'm not an active pcl_ros user, it might make more sense for someone on this end to write and test it. Or, if nothing else, let me know where and how you'd find migration code the most convenient.

You can find the new headers at http://stanford.edu/~sdmiller/dropbox/new_pcl_headers.tar.gz

StatisticalOutlierRemoval hangs on zeroed data

I have a uniq PC sensor that can occasioanlly send a single PC that is large but all the values are 0. Obviously, there is an issue in the hardware driver that needs fixing, but this also highlighted an issue in the StatisticalOutlierRemoval class, where a cloud of all zeroes (and presumably any cloud with all the same points) will hang forver and the program must be killed with SIGTERM as CTRL-C not sufficient.

This is easy to reproduce. Make a pointcloud of size 200,000 containing all x=y=z=0; Then run StatisticalOutlierRemoval with that cloud as the input. The call to filter() hangs. This happens in 1.5 and 1.7.

perception_pcl broken on ros-fuerte-desktop-full 1.0.0-s1367681458~precise deb

I am running 12.04 with ROS Fuerte. Yesterday there was an update released to the official repositories that appears to have broken most (all?) nodes that use pcl libraries in them. I have simple nodes that just call one or two pcl functions, I have launch files that start various filter nodelets, as well as more complicated examples. Every node I have tried crashes. I tried reinstalling all of ROS, rebuilding things, different computers, etc., and nothing has fixed the situation.

To illustrate the typical issue, see the following simple launch file:

<launch>
  <arg name="input" default="points" />

  <include file="$(find openni_launch)/launch/openni.launch"/>

  <!-- launch the nodelet manager -->
  <node pkg="nodelet" type="nodelet" name="pcl_manager" args="manager" output="screen"
    launch-prefix="gdb -ex run --args"/>  
  <group ns="/cloud_downsampler">
    <node pkg="nodelet" type="nodelet" name="voxel" args="load pcl/VoxelGrid /pcl_manager" output="screen">  
      <remap from="~input" to="/camera/depth/$(arg input)" />
      <rosparam>
        filter_field_name: z
        filter_limit_min: 0
        filter_limit_max: 2.5
        fiter_limit_negative: True
        leaf_size: 0.01
      </rosparam>
    </node>
  </group>
</launch>

This produces the following output+backtrace as soon as something subscribes to the output of the voxel filter:

Program received signal SIGILL, Illegal instruction.
[Switching to Thread 0x7fffe9ffb700 (LWP 3348)]
0x00007fffd088c933 in pcl::VoxelGrid<sensor_msgs::PointCloud2_<std::allocator<void> > >::applyFilter(sensor_msgs::PointCloud2_<std::allocator<void> >&) ()
   from /opt/ros/fuerte/lib/libpcl_filters.so.1.5
[ INFO] [1368045397.119973387]: Bond broken, exiting
[cloud_downsampler/voxel-29] process has finished cleanly
log file: /home/jarvis/.ros/log/efe9d78e-b81e-11e2-9290-0026b914e003/cloud_downsampler-voxel-29*.log
(gdb) bt

#0  0x00007fffd088c933 in pcl::VoxelGrid<sensor_msgs::PointCloud2_<std::allocator<void> > >::applyFilter(sensor_msgs::PointCloud2_<std::allocator<void> >&) ()
   from /opt/ros/fuerte/lib/libpcl_filters.so.1.5
#1  0x00007fffd07c6dd8 in pcl::Filter<sensor_msgs::PointCloud2_<std::allocator<void> > >::filter(sensor_msgs::PointCloud2_<std::allocator<void> >&) ()
   from /opt/ros/fuerte/lib/libpcl_filters.so.1.5
#2  0x00007fffe859524d in pcl_ros::VoxelGrid::filter (this=0x7bad80, input=..., indices=..., output=...)
    at /tmp/buildd/ros-fuerte-perception-pcl-1.2.3/debian/ros-fuerte-perception-pcl/opt/ros/fuerte/stacks/perception_pcl/pcl_ros/src/pcl_ros/filters/voxel_grid.cpp:64
#3  0x00007fffe8509c48 in pcl_ros::Filter::computePublish (this=0x7bad80, input=..., indices=...)
    at /tmp/buildd/ros-fuerte-perception-pcl-1.2.3/debian/ros-fuerte-perception-pcl/opt/ros/fuerte/stacks/perception_pcl/pcl_ros/src/pcl_ros/filters/filter.cpp:68
#4  0x00007fffe850aa59 in pcl_ros::Filter::input_indices_callback (this=0x7bad80, cloud=..., indices=...)
    at /tmp/buildd/ros-fuerte-perception-pcl-1.2.3/debian/ros-fuerte-perception-pcl/opt/ros/fuerte/stacks/perception_pcl/pcl_ros/src/pcl_ros/filters/filter.cpp:229
#5  0x00007fffe851676a in operator() (a0=..., this=<optimized out>) at /usr/include/boost/function/function_template.hpp:1013
#6  boost::detail::function::void_function_obj_invoker1<boost::function<void (boost::shared_ptr<sensor_msgs::PointCloud2_<std::allocator<void> > const> const&)>, void, boost::shared_ptr<sensor_msgs::PointCloud2_<std::allocator<void> > const> >::invoke(boost::detail::function::function_buffer&, boost::shared_ptr<sensor_msgs::PointCloud2_<std::allocator<void> > const>) (function_obj_ptr=..., a0=...) at /usr/include/boost/function/function_template.hpp:153
#7  0x00007fffe854ad96 in operator() (a0=<error reading variable: access outside bounds of object referenced via synthetic pointer>, this=0x852658)
    at /usr/include/boost/function/function_template.hpp:1013
#8  ros::SubscriptionCallbackHelperT<boost::shared_ptr<sensor_msgs::PointCloud2_<std::allocator<void> > const> const&, void>::call (this=0x852650, params=...)
    at /opt/ros/fuerte/include/ros/subscription_callback_helper.h:180
#9  0x00007ffff7b861d7 in ros::SubscriptionQueue::call() () from /opt/ros/fuerte/lib/libroscpp.so
#10 0x00007ffff7b38c09 in ros::CallbackQueue::callOneCB(ros::CallbackQueue::TLS*) () from /opt/ros/fuerte/lib/libroscpp.so
#11 0x00007ffff7b39a83 in ros::CallbackQueue::callOne(ros::WallDuration) () from /opt/ros/fuerte/lib/libroscpp.so
#12 0x00007ffff6dc2628 in callOne (this=0x7bcdd0) at /opt/ros/fuerte/include/ros/callback_queue.h:80
#13 nodelet::detail::CallbackQueue::callOne (this=0x7bcdb0)
    at /tmp/buildd/ros-fuerte-nodelet-core-1.6.5/debian/ros-fuerte-nodelet-core/opt/ros/fuerte/stacks/nodelet_core/nodelet/src/callback_queue.cpp:78
#14 0x00007ffff6dc3962 in nodelet::detail::CallbackQueueManager::workerThread (this=0x71c230, info=0x7e4f08)
    at /tmp/buildd/ros-fuerte-nodelet-core-1.6.5/debian/ros-fuerte-nodelet-core/opt/ros/fuerte/stacks/nodelet_core/nodelet/src/callback_queue_manager.cpp:272
#15 0x00007ffff5471ce9 in thread_proxy () from /usr/lib/libboost_thread.so.1.46.1
#16 0x00007ffff6459e9a in start_thread (arg=0x7fffe9ffb700) at pthread_create.c:308
#17 0x00007ffff6186dbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#18 0x0000000000000000 in ?? ()

It seems like there might be some incompatibility between the *.so libs packaged with this release? Regardless, this is a major issue! Not absolutely sure if this is the right package/stack/metapackage/repository to be filing the bug report with.

Serializer<pcl::PointCloud<T>>::read(stream,m) segfaults for some values of m.width, m.height

Consider the following program.

#include <ros/ros.h>
#include <pcl_ros/point_cloud.h>
#include <pcl/point_types.h>

void
cloud_cb (const pcl::PointCloud<pcl::PointXY>::ConstPtr& input)
{
  ROS_INFO("received a point cloud");
}

int
main (int argc, char** argv)
{
  ros::init (argc, argv, "cloud_listener");
  ros::NodeHandle nh;
  ros::Subscriber sub = nh.subscribe<pcl::PointCloud<pcl::PointXY> > ("cloud", 1, cloud_cb);
  ros::spin ();
}

We can get this program to segfault if we send the following message:

$ rostopic pub /cloud sensor_msgs/PointCloud2 "{'width':0xffffffff, 'height':0xffffffff, 'point_step':1, 'fields':[{'name':'x', 'datatype':7, 'count':1}, {'name':'y', 'datatype':7, 'offset':4, 'count':1}], 'data':[0]}" -1

The current version of pcl_ros/point_cloud.h attempts to guard against such messages with the assertion:

assert(data_size == m.height * m.width * point_step);

All of these variables have type uint32_t, making the assertion vulnerable to overflows, as the above message shows.

It would be safer to have these two assertions:

assert((uint64_t) row_step == (uint64_t) m.width * point_step);
assert((uint64_t) data_size == (uint64_t) row_step * m.height);

It would perhaps be even better to throw an exception instead of triggering an assert failure here. Then the node would not die on receiving such a message.

pcl_ros errors while installing rgbdslam hydro

Hey,
I just followed the procedure from this website: (http://felixendres.github.io/rgbdslam_v2/) to install rgbdslam, it goes well until the step 4: To build RGBDSLAMv2 go to your catkine workspace and execute "catkin_make".

After I execute "catkin_make", the following errors occurred:

      CMake Error at /opt/ros/hydro/share/pcl_ros/cmake/pcl_rosConfig.cmake:106 (message):
  Project 'pcl_ros' specifies '/usr/include/ni' as an include dir, which is
  not found.  It does neither exist as an absolute directory nor in
  '/opt/ros/hydro//usr/include/ni'.  Ask the maintainer 'Paul Bovbel
  <[email protected]>, Bill Morris <[email protected]>' to fix it.
Call Stack (most recent call first):
  /opt/ros/hydro/share/catkin/cmake/catkinConfig.cmake:72 (find_package)
  rgbdslam_v2/CMakeLists.txt:42 (find_package)

-- Configuring incomplete, errors occurred!
make: *** [cmake_check_build_system] Error 1
Invoking "make cmake_check_build_system" failed

Could anyone provide some suggestions? Thank you so much in advance!

Best,
Lili

pointcloud_to_laserscan package not working in ROS indigo

The pointcloud_to_laserscan package is not working properly in ROS Indigo. The Indigo build is done recently and seems to contain some error. As required by the node I have published the pointcloud data from Kinect in PointCloud2 format in /cloud_in topic. But the laserscan data that must be produced and published by Kinect in /scan topic seems erroneous. It returns an array full of 'Inf'. Please fix the error.

My code for publishing in /cloud_in is as follows,

#!/usr/bin/env python
import roslib
import rospy
import geometry_msgs.msg
from sensor_msgs.msg import PointCloud2

def callback(data):
    pub = rospy.Publisher('/cloud_in', PointCloud2,queue_size=10)
    pub.publish(data)

def pcl_2D():
    rospy.init_node('pcl_2D', anonymous=True)
    global listener 
    rospy.Subscriber("/camera/depth/points", PointCloud2, callback)
    rospy.spin()

if __name__=='__main__':
    pcl_2D()

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.