Giter Club home page Giter Club logo

filters's Introduction

Robot Operating System (ROS)
===============================================================================

ROS is a meta-operating system for your robot.  It provides
language-independent and network-transparent communication for a
distributed robot control system.

Installation Notes
------------------

For full installation instructions, including system prerequisites and
platform-specific help, see:

  http://wiki.ros.org/ROS/Installation

filters's People

Contributors

bgromov avatar bulwahn avatar jonbinney avatar mvieth avatar peci1 avatar seanyen avatar tfoote avatar wjwwood 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

Watchers

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

filters's Issues

Create branch for foxy

The change to how parameters are declared in ros2/rclcpp#1522 means there isn't a good way to declare a dynamic parameter that works on both foxy and galactic/rolling. Options I've considered:

  1. Using SFINAE could to check for the existence of ParameterDescriptor::dynamic_typing. This type of code seems too unreadable.
  2. In CMakeLists.txt, set a compiler definition for the version of rclcpp. Then use that to determine how to create a dynamic variable. This works within this package, but since the code is in a header file, anyone other package who uses it would need to define the same variable. Seems like it could cause problems downstream.

Since we should only really have bugfixes on foxy at this point, I think backporting from the ros2 branch shouldn't be too much of a burden. I'll create the new foxy branch and do a release from it (I assume that jenkins is using the releases to figure out what branch to test with which rosdistro....?)

[ROS2] Multiple definitions linking errors for functions defined in header files

Related to ANYbotics/grid_map#266

I am trying to build a library with multiple filter plugins, where in each filter filter_base.hpp is being included. I am getting linking errors (CI output) complaining about multiple definitions of filters::impl::normalize_param_prefix. Same thing is happening with filters::impl::load_chain_config.

I am getting this behaviour on ROS2 Rolling using bfb5917 and on Foxy using the binaries.

Exact errors:

/usr/bin/ld: CMakeFiles/grid_map_filters.dir/src/MinInRadiusFilter.cpp.o: in function `filters::impl::normalize_param_prefix(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
MinInRadiusFilter.cpp:(.text+0xc0): multiple definition of `filters::impl::normalize_param_prefix(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'; CMakeFiles/grid_map_filters.dir/src/ThresholdFilter.cpp.o:ThresholdFilter.cpp:(.text+0xc0): first defined here

/usr/bin/ld: CMakeFiles/filters_demo.dir/src/FiltersDemo.cpp.o: in function `filters::impl::load_chain_config(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<rclcpp::node_interfaces::NodeLoggingInterface> const&, std::shared_ptr<rclcpp::node_interfaces::NodeParametersInterface> const&, std::vector<filters::impl::FoundFilter, std::allocator<filters::impl::FoundFilter> >&)':
FiltersDemo.cpp:(.text+0xd00): multiple definition of `filters::impl::load_chain_config(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<rclcpp::node_interfaces::NodeLoggingInterface> const&, std::shared_ptr<rclcpp::node_interfaces::NodeParametersInterface> const&, std::vector<filters::impl::FoundFilter, std::allocator<filters::impl::FoundFilter> >&)'; CMakeFiles/filters_demo.dir/src/filters_demo_node.cpp.o:filters_demo_node.cpp:(.text+0x210): first defined here

I think this could be fixed be making the functions mentioned above static as to make their scope local to their receptive files, does that sound right?

Please let me know if you need any further information, thanks in advance for your help :)

Ros2 crystal

I have ported filters package for crystal. Request you to create new branch for it so that i can raise a Pull request.

Stricter filter finding strategy?

As described by @v4n here, there are some pitfalls to the current filter finding strategy. Currently if there is no package name specified for a filter in the yaml, then the first filter with the specified string anywhere in its name is chosen:

if (std::string(config[i]["type"]).find("/") == std::string::npos)

That does output a warning, but given that it can create some really subtle errors when the wrong filter is chosen, it might be better if it actually errored out. For better or worse, many robots have lots of warnings output by various packages, and one more can be easily missed. I can think of a few possible solutions (these would probably only be applied in lunar and later ROS distros):

  1. When no package is specified, require an exact string match (not just a substring) between the string specified in yaml and the name of the plugn (without the package)
  2. Require specification of the full plugin name, including the package. Error out if the package name isn't there. This is the strictest option. I prefer it since it removes ambiguity from the start, but it could require a lot of people to update their robot configs.
  3. Error out if more than one plugin matches the string from the yaml. In theory this would only break robot configurations that are already silently broken.

@tfoote @v4hn what do you guys think?

Filters uses deprecated pluginlib macros.

Using the deprecated pluginlib macros causes a warning to be printed for any node that directly or indirectly uses filters.

These should be updated to the new pluginlib API.

pluginlib WARNING: In file __FILE__ PLUGINLIB_DECLARE_CLASS is deprecated, please use PLUGINLIB_EXPORT_CLASS instead. You can run the script 'plugin_macro_update' provided with pluginlib in your package source folder to automatically and recursively update legacy macros.  Base = base_class_type, Derived = derived_class_type

Location:
/tmp/buildd/ros-hydro-filters-1.7.3-0precise-20130721-0336/src/transfer_function.cpp::34

CI is broken

See the build status of #35 . CI could not install catkin :(

Why not updating in-place?

Is there a good reason for not having function

virtual bool update(T& data)=0;

in FilterBase?

It seems to me it might help getting the filter chain even more efficient.

Regarding backwards compatibility, it'd probably need to have a default implementation that calls the copying update(data_in, data_out), but filters that are capable of working in-place would get the chance to do so.

create ROS2 branch

Could you please create ros2 branch so that we can use it to create pull request ?
We have just started filters porting to ROS2

indigo-devel

why not have indigo-devel
how i use the filters in indigo

Interface library causes build failure on Humble/20.04

I am trying to build this using colcon build command. But it is not working, following error shows up:
`--- stderr: filters
CMake Error at CMakeLists.txt:26 (add_library):
add_library INTERFACE library requires no source arguments.

CMake Error at CMakeLists.txt:31 (target_link_libraries):
Cannot specify link libraries for target "realtime_circular_buffer" which
is not built by this project.


Failed <<< filters [6.26s, exited with code 1]`

It says INTERFACE library requires no source arguments. how can I resolve this without specifying the source files?

Boolean parameters are not supported by FilterBase::getParam()

Currently getParam() is not overloaded for boolean type parameters. At the same time string parameters cannot mimic that behavior since the parser (?) recognize it as boolean and getParam() returns false as if parameter of requested type was not found.

[ros2] RCLCPP parameter API change

I believe the recent ros2/rclcpp#1522 breaks filters at runtime
When running FilterChain::configure I get:

scan_to_scan_filter_chain-1] terminate called after throwing an instance of 'rclcpp::exceptions::InvalidParameterTypeException'
[scan_to_scan_filter_chain-1]   what():  parameter 'filter1.name' has invalid type: cannot declare a statically typed parameter with an uninitialized value

Release 2.1.1 to rolling

There have been a few changes, most notably the addition of target-specific dependency info in cmake.

ROS2 port

We are working on laser assembler porting to ROS2 but its dependent on Filters package.
So we have taken up this package for porting.

Regarding Read Only Setting in getParamImpl()

Hi everyone, I am trying to implement "Parameters On Set Parameter Callback" feature, which I can update the parameters through a callback function. However, it seems like if I use the GetParam method, the declared parameter is set to a read only state.

Is there a special reason why it is set to read only?

It is set at this line here.

desc.read_only = true;

If I set param through the terminal, I will get this output.

Setting parameter failed: parameter 'filter1.params.output_frame' cannot be set because it is read-only

Release a ros package like ros-version-filters?

Hi,

I'm using Ubuntu and I can't find this package in apt search.

Almost all other packages I need to install can be find in apt search, this might be the only one that I need to build from source, so a apt package should be nice.

Iterable circular_buffer compilation broken with boost 1.71

Hi all,

Trying to compile filters with ros2 humble and boost 1.71. Unfortunately, that is broken:

Starting >>> filters
--- stderr: filters
In file included from /home/dev_ws/src/filters/test/test_realtime_circular_buffer.cpp:35:
/home/dev_ws/src/filters/include/filters/realtime_circular_buffer.hpp: In instantiation of ‘filters::RealtimeCircularBuffer<T>::const_iterator filters::RealtimeCircularBuffer<T>::begin() const [with T = int; filters::RealtimeCircularBuffer<T>::const_iterator = boost::cb_details::iterator<boost::circular_buffer<int, std::allocator<int> >, boost::cb_details::const_traits<boost::cb_details::allocator_traits<std::allocator<int> > > >]’:
/home/dev_ws/src/filters/test/test_realtime_circular_buffer.cpp:64:25:   required from here
/home/dev_ws/src/filters/include/filters/realtime_circular_buffer.hpp:91:16: error: ‘const class boost::circular_buffer<int, std::allocator<int> >’ has no member named ‘cbegin’; did you mean ‘begin’?
   91 |     return cb_.cbegin();
      |            ~~~~^~~~~~
      |            begin
/home/dev_ws/src/filters/include/filters/realtime_circular_buffer.hpp: In instantiation of ‘filters::RealtimeCircularBuffer<T>::const_iterator filters::RealtimeCircularBuffer<T>::end() const [with T = int; filters::RealtimeCircularBuffer<T>::const_iterator = boost::cb_details::iterator<boost::circular_buffer<int, std::allocator<int> >, boost::cb_details::const_traits<boost::cb_details::allocator_traits<std::allocator<int> > > >]’:
/home/dev_ws/src/filters/test/test_realtime_circular_buffer.cpp:64:25:   required from here
/home/dev_ws/src/filters/include/filters/realtime_circular_buffer.hpp:100:16: error: ‘const class boost::circular_buffer<int, std::allocator<int> >’ has no member named ‘cend’; did you mean ‘end’?
  100 |     return cb_.cend();
      |            ~~~~^~~~
      |            end
make[2]: *** [CMakeFiles/realtime_buffer_test.dir/build.make:63: CMakeFiles/realtime_buffer_test.dir/test/test_realtime_circular_buffer.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:569: CMakeFiles/realtime_buffer_test.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:141: all] Error 2

This change was introduced in #65 . I confirmed that compilation with 5507bc5175cb74e825ee20b9dc19e67ef6a4a022 (the last commit before the merge of #65 is successful.

Release into Melodic

It looks like all of the dependencies for this are available in Melodic, so it would be great to get this released. Thanks in advance!

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.