Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[binary filter] change boolean ros params #3796

Open
wants to merge 351 commits into
base: main
Choose a base branch
from

Conversation

enricosutera
Copy link

@enricosutera enricosutera commented Sep 5, 2023

Basic Info

Info Please fill out this column
Ticket(s) this addresses #3511
Primary OS tested on Ubuntu 22.04, Rolling (debian)
Robotic platform tested on None

Description of contribution in a few bullet points

  • The binary filter is now able to change boolean ros parameters using a service. The parameters can be changed accordingly to filter binary value or opposite to it (this can be specified for each parameter).

Description of documentation updates required from your changes

Future work that may be required in bullet points

  • Not required, but an extension or another filter could be developed to change also double parameters dynamically.

For Maintainers:

  • Check that any new parameters added are updated in navigation.ros.org
  • Check that any significant change is added to the migration guide
  • Check that any new features OR changes to existing behaviors are reflected in the tuning guide
  • Check that any new functions have Doxygen added
  • Check that any new features have test coverage
  • Check that any new plugins is added to the plugins page
  • If BT Node, Additionally: add to BT's XML index of nodes for groot, BT package's readme table, and BT library lists

Copy link
Member

@SteveMacenski SteveMacenski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think also this entire thing could use a single https://docs.ros2.org/bouncy/api/rclcpp/classrclcpp_1_1_async_parameters_client.html, having the individual /set_parameter clients seems not great

nav2_costmap_2d/plugins/costmap_filters/binary_filter.cpp Outdated Show resolved Hide resolved
param.param_name.c_str(), param.node_name.c_str());

auto change_parameters_client_ = node->create_client<rcl_interfaces::srv::SetParameters>(
"/" + param.node_name + "/set_parameters");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if we have a namespace applied?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can removed the absolute slash ("/" +) to make it automatically handle namespaces, but I guess then there would be an issue with /local_costmap//global_costmap sub-namespace of the costmap, which - I think - is the same reason why you use /scan (instead of scan) in the obstacle layers (using a relative source, e.g. scan creates a subscription to /global_costmap/scan).

I mean, I kept it absolute to have more control. This way a user can add the namespace in the params file, while if the namespace would be handled automatically a user would need to do a remap.
What do you suggest?
I think something like this (from costmap_2d_ros would solve it:

     "map_topic", rclcpp::ParameterValue(
      (parent_namespace_ == "/" ? "/" : parent_namespace_ + "/") + std::string("map")));

But I don't have such information (parent_namespace_) at costmap filter level

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be honest I'm not sure about how I could solve this... As I said, the filter has not the access level to distinguish between the two namespaces, so only workarounds come to my mind (e.g. the only two sub_namespace I can image for these filter are global_costmap and local_costmap, so I could simply cut them from the service name), but I don't think that having earthbound reasoning is acceptable

Copy link
Collaborator

@AlexeyMerzlyakov AlexeyMerzlyakov Dec 8, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What will be happened, if you will just remain the

 auto change_parameters_client_ = node->create_client<rcl_interfaces::srv::SetParameters>(
      param.node_name + "/set_parameters");

without leading "/"?

  • If param.node_name is specified in absolute path (e.g. /some_node) will be will applied as /some_node/set_parameters service.
  • If param.node_name is specified in relative path (e.g. some_node), won't service will be created relative to current BinaryFilter namespace: some_node/set_parameters which will be treated as /my_namespace/some_node/set_parameters when operating with it in the run-time?

auto change_parameters_client_ = node->create_client<rcl_interfaces::srv::SetParameters>(
"/" + param.node_name + "/set_parameters");
change_parameters_clients_.push_back(change_parameters_client_);
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perform wait for service here to make sure up before continuing

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did, I have to figure out what do if the service is not available (comment here)
496ce37

void BinaryFilter::changeParameters(const bool state)
{
for (size_t param_index = 0; param_index < binary_parameters_info_.size(); ++param_index) {
if (!change_parameters_clients_.at(param_index)->wait_for_service(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove wait for service here

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This wait for service cycle seems to be moved to the end of BinaryFilter::initializeFilter()

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also related to previous comment:

Perform wait for service here to make sure up before continuing

Do you mean that if any service goes timeout at the beginning we should not add it or just give an error/warning? What if the server is temporary offline (e.g. from a plugin)?
Also, a node could go offline at a certain point and since the service is checked only at initialization time, there would not be information for the user to understand that parameters are not updated.
I understand that adding the wait_for_server slows down the execution, but in my opinion it should be the user to keep attention to the selected parameters (e.g. too many "offline" servers).

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once the BF is being configured, we need to check that services/nodes are available on that stage. Later on we are assuming that everything is OK, and we are working with bringed-up nodes. If something goes wrong (e.g. node became offline), service request should fail by timeout. For that, see Steve comment from above and please use spin_until_future_complete(future_result, change_parameter_timeout_) API to not have infinite loops. Anyway, loosing the service with the node - is extraordinary situation, which could be handled by other than each time checking for service availability way (performance for usual serivce calls in this way will be faster, and we still could handle error situations).

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi there. I agree with using spin_until_future_complete(future_result, change_parameter_timeout_). However to me it's still not clear what should the filter do if a node is offline. I mean, service request fail by timeout and then? Should I throw an error? While log seems not much substantial, as I was saying this seems to be a little bit much. What if a node is not active yet or has just crashed and will be up again in a few seconds?
Anyway, it is only a matter of choices. If you want this to work only with nodes that are always up, it's ok!
By the way I could also add another parameter to somehow distinguish between "always-up" nodes and "discontinuous" ones (for instance plugin). Or adding a "global" timeout (not for the service request timeout but for the node in general, for instance 10 seconds timeout after the first service request timeout... this would implies some re-call logic, even when there's no binary state change). Or simply logging but also exposing error information for any third part diagnostic nodes... I really don't know, just shooting ideas

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is no need to add global timeouts and try to re-send the service again. This should be a responsibility of DDS implementation, and if some node is not online for some reasons (e.g. bad network connection), DDS to re-try to deliver the request to the given node within a timeout. So, there is no need to do the same job twice.

Regarding throwing an exception, this is a good question. Changing the state of node - is a serious situation that might break full logic working mechanisms on the end-developer side. Imagine, if you have some handling "NodeA" that is having two sub-algorithms: robot local planning and hand manipulation. By moving into some marked area, the BinaryFilter decides to stop the robot and send a binary state to "NodeA" to switch algorithm from navigation -> to hand manipulation. If this signal won't be delivered to "NodeA", it will continue to working as previously, so the normal operation logic will break.
Additionally, this situation could be treated as ROS-parameter setting error, which is also always going with exceptions throwing.

So from this, I'd more inclined that we need to throw an error in service failure situation (and thus, stop normal BF execution).

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean, I agree a log is not enough, while an exception may be too much in some cases. What do you think of adding a parameter for letting the user decide this one?

Each parameter can have a parameter for this: something like a boolean critical (default True).
Any suggestion on the name is appreciated! It could be reverse also, like is_optional (default False).
Configuration would be:

    ParamNamespace:
      node_name: "node"
      param_name: "param"
      default_state: True
      is_critical: False

Hence the code should look like this:

    if (!change_parameters_client->wait_for_service(
        std::chrono::milliseconds(change_parameter_timeout_)))
    {
      if (param.is_critical){
        throw std::runtime_error("BinaryFilter: Service " + 
          std::string(change_parameters_client->get_service_name()) + 
          "not available!");
      }
      RCLCPP_ERROR(
        logger_, "BinaryFilter:  service %s not available. Skipping ...",
        change_parameters_client->get_service_name());
    } else {
      RCLCPP_INFO(
        logger_, "BinaryFilter:  service %s available.",
        change_parameters_client->get_service_name());
    }
  }

We could also think of having just one global parameter for the filter, without giving the chance to specify the behavior for each parameter, but I don't see great advantages a part from having less parameters.

What do you think?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the example when we have the parameter of some node not changed, but we are still normally operating? Is this worth to skip this node in the config file at all, which is not reliable and not necessary for us?
I doubt about such situation: imagine - you have some node which might be offline or online. And you can not guarantee it's parameters consistency. Is it real worth to support? In this case, I believe it is better to throw to developer an exception causing an error, allowing the developer to remove this unreliable node from config at all. Since the node is unreliable, it's binary param won't be guaranteed to be consistent, and thus I do not think, this is normal situation.

In other words, not-changing / not-setting of ROS parameters - is already a critical situation which throws and error in ROS2 API. For these cases, we could compare setting the parameter through a service request and thus it could be treated with exception.
Adding additional parameter to choose throw exceptions or not for the unreliable nodes, in my opinion - over-complicating the structure, since we are still could not rely on this flaky node parameter, so why don't throw error instead in all times?

nav2_costmap_2d/plugins/costmap_filters/binary_filter.cpp Outdated Show resolved Hide resolved
binary_parameters_info_.at(param_index).param_name.c_str(),
bool_param.value.bool_value ? "true" : "false");
auto future_result = change_parameters_clients_.at(param_index)->async_send_request(
request, response_received_callback);
Copy link
Member

@SteveMacenski SteveMacenski Sep 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove callback. Spin until future complete. Then check the value and throw something more substantial than a log if it failed. Just a log failure isn't good enough

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess it depends on what you think about this

Copy link
Collaborator

@AlexeyMerzlyakov AlexeyMerzlyakov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main code has been checked. Please check the first Steve review and these items. After the code will be more-less stabilized, we could advance to next step with testcases and documentation verification.

nav2_costmap_2d/plugins/costmap_filters/binary_filter.cpp Outdated Show resolved Hide resolved
nav2_costmap_2d/plugins/costmap_filters/binary_filter.cpp Outdated Show resolved Hide resolved
void BinaryFilter::changeParameters(const bool state)
{
for (size_t param_index = 0; param_index < binary_parameters_info_.size(); ++param_index) {
if (!change_parameters_clients_.at(param_index)->wait_for_service(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This wait for service cycle seems to be moved to the end of BinaryFilter::initializeFilter()

nav2_costmap_2d/plugins/costmap_filters/binary_filter.cpp Outdated Show resolved Hide resolved
@AlexeyMerzlyakov
Copy link
Collaborator

@enricosutera, this is kind ping, since there are no news more than one month. Are there any updates on this PR?

@enricosutera
Copy link
Author

I think also this entire thing could use a single https://docs.ros2.org/bouncy/api/rclcpp/classrclcpp_1_1_async_parameters_client.html, having the individual /set_parameter clients seems not great

@SteveMacenski
Honestly I'm not entirely sure what you mean. I still have to create a client for each node I think (the client constructor needs the remote_node_name), so at most I could create each time I need to change parameters a client and then destroy it, but I don't see the advantage. This Am I losing any piece of information?

@SteveMacenski
Copy link
Member

@enricosutera good point, let me look at this again - but you have not yet responded to the bulk of the comments in my last review

@SteveMacenski
Copy link
Member

SteveMacenski commented Oct 25, 2023

But generally looks good! Much better now

@AlexeyMerzlyakov
Copy link
Collaborator

@enricosutera, thank you for the update and taking care on this. Started the review, but I'm running out-of-time today. Will complete it at the beginning of next week.

Copy link
Collaborator

@AlexeyMerzlyakov AlexeyMerzlyakov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding the review comments for the main code. There are some items remaining to fix from this and previous reviews.

void BinaryFilter::changeParameters(const bool state)
{
for (size_t param_index = 0; param_index < binary_parameters_info_.size(); ++param_index) {
if (!change_parameters_clients_.at(param_index)->wait_for_service(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once the BF is being configured, we need to check that services/nodes are available on that stage. Later on we are assuming that everything is OK, and we are working with bringed-up nodes. If something goes wrong (e.g. node became offline), service request should fail by timeout. For that, see Steve comment from above and please use spin_until_future_complete(future_result, change_parameter_timeout_) API to not have infinite loops. Anyway, loosing the service with the node - is extraordinary situation, which could be handled by other than each time checking for service availability way (performance for usual serivce calls in this way will be faster, and we still could handle error situations).

nav2_costmap_2d/plugins/costmap_filters/binary_filter.cpp Outdated Show resolved Hide resolved
Copy link
Collaborator

@AlexeyMerzlyakov AlexeyMerzlyakov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a few items remained:

Test code coverage is >95% for binary_filter.cpp which is OK (some exceptions were not covered):
Screenshot 2023-11-21 at 14-28-52 LCOV - bf info - plugins_costmap_filters

nav2_costmap_2d/plugins/costmap_filters/binary_filter.cpp Outdated Show resolved Hide resolved
nav2_costmap_2d/plugins/costmap_filters/binary_filter.cpp Outdated Show resolved Hide resolved
nav2_costmap_2d/plugins/costmap_filters/binary_filter.cpp Outdated Show resolved Hide resolved
nav2_costmap_2d/plugins/costmap_filters/binary_filter.cpp Outdated Show resolved Hide resolved
@enricosutera
Copy link
Author

There are a few items remained:

* Throw an exception if service was failed (discussable)

* Remove unnecessary calling of `wait_for_service` from `changeParameters()`

* Allow to use relative namespaces in ROS-parameters ([[binary filter] change boolean ros params #3796 (comment)](https://github.com/ros-planning/navigation2/pull/3796#discussion_r1317581467))

* Switch to use non-default ROS-parameters instead of empty strings

* Future destroyed after end-of-loop question ([[binary filter] change boolean ros params #3796 (comment)](https://github.com/ros-planning/navigation2/pull/3796#discussion_r1372142376))

* Other minor changes / nitpicks from the items below

Test code coverage is >95% for binary_filter.cpp which is OK (some exceptions were not covered): Screenshot 2023-11-21 at 14-28-52 LCOV - bf info - plugins_costmap_filters

@AlexeyMerzlyakov All the above points are satisfied a part from these two:

  1. Just waiting for an answer on this
  2. Concerning this:
* Allow to use relative namespaces in ROS-parameters ([[binary filter] change boolean ros params #3796 (comment)](https://github.com/ros-planning/navigation2/pull/3796#discussion_r1317581467))

have you read my comment? Do you have any suggestion?

@AlexeyMerzlyakov
Copy link
Collaborator

@enricosutera, apologies for late respond: I was overkilled with other activities on prev. two weeks. Please refer to my comments on remaining two questions (exceptions and namespaces in service calls) from above

Copy link

codecov bot commented Apr 5, 2024

Codecov Report

Attention: Patch coverage is 73.77049% with 16 lines in your changes are missing coverage. Please review.

Project coverage is 89.84%. Comparing base (0be2f25) to head (aa40776).

Files Patch % Lines
...stmap_2d/plugins/costmap_filters/binary_filter.cpp 73.77% 16 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3796      +/-   ##
==========================================
+ Coverage   89.75%   89.84%   +0.09%     
==========================================
  Files         431      431              
  Lines       19571    19632      +61     
==========================================
+ Hits        17566    17639      +73     
+ Misses       2005     1993      -12     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@SteveMacenski
Copy link
Member

@enricosutera is it your intent to finish up this PR? I generally don't like to leave things hanging like this indefinitely

@enricosutera
Copy link
Author

Thank you for pinging. Yes I do. I will give a last shot asap

SteveMacenski and others added 13 commits May 19, 2024 23:32
…d acceleration limits (ros-navigation#3731)

Signed-off-by: enricosutera <enricosutera@outlook.com>
* Fix GoalUpdater QoS

* Fixes

Signed-off-by: enricosutera <enricosutera@outlook.com>
…vigation#3733)

* smach_planner_hybrid: add support visualization for hybrid Astar

* smac_planner_hyrid: revert some

* smach_planner_hybrid: improving code quality

* utils: add some useful functions

* utils: fix mistake

* nav2_smac_planner: fix format problem

* utils: fix format and revise functions

* smach_planner_hybrid: delete _viz_expansion parameter

* smac_planner_hybrid: fix format

* README: update parameter

* utils: corrct mistake return

* utils: make timestamp a const reference

* nav2_smac_planner: correct format problem

* add unit test functions

* further detection of element equality

* test_utils: add non-trival translation and rotation

* smac_planner_hybrid: pass value instead of references

* completing hybrid A* visualization

---------

Co-authored-by: xianglunkai <1322099375@qq.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
* Update README.md

* Update README.md

Signed-off-by: enricosutera <enricosutera@outlook.com>
* adding uid to the logged message

Signed-off-by: Christian Henkel <christian.henkel2@de.bosch.com>

* less changes

Signed-off-by: Christian Henkel <christian.henkel2@de.bosch.com>

---------

Signed-off-by: Christian Henkel <christian.henkel2@de.bosch.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
…ion#3751)

* rviz view straight in default xy orientation

Signed-off-by: Christian Henkel <christian.henkel2@de.bosch.com>

* gazebo orientation to match rviz

Signed-off-by: Christian Henkel <christian.henkel2@de.bosch.com>

* rotating in direction of view

---------

Signed-off-by: Christian Henkel <christian.henkel2@de.bosch.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
1. Set forward_prune_distance to 1.0 to robot not getting lost
2. Correct map name for costmap filter tests

Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: ymd-stella <world.applepie@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
…ore launch navigation. (ros-navigation#3572)

* Make it possible to launch namspaced robot which rewrites `<robot_namespace>` to namespace.
- It allows to apply namespace automatically on specific target topic path in costmap plugins.

Add new nav2 params file for multi-robot(rewriting `<robot_namespace>`) as an example.
- nav2_multirobot_params_all.yaml

Modify nav2_common.ReplaceString
- add condition argument

* Update nav2_bringup/launch/bringup_launch.py

Co-authored-by: Steve Macenski <stevenmacenski@gmail.com>

* Add new luanch script for multi-robot bringup

Rename luanch script for multi-robot simulation bringup

Add new nav2_common script
- Parse argument
- Parse multirobot pose

Update README.md

* Update README.md

Apply suggestions from code review

Fix pep257 erors

Co-authored-by: Steve Macenski <stevenmacenski@gmail.com>

---------

Co-authored-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
tonynajjar and others added 27 commits May 19, 2024 23:32
Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
* Rename PushRosNamespace to PushROSNamespace

* Fix min_points checking

* Add polygon source

* Revert "Merge branch 'add-collision-points-debug' into add-polygon-source"

This reverts commit 15c261c, reversing
changes made to 5a63584.

* .

* fix

* fix

* fix lint

* PR comments fixes

* fixes

* add test

* fix space

* use standard msg Polygonstamped

* draft

* .

* fixes

* fixes

* fixes

* fix

* revert

* fixes

* add detector test

* rebasing fixes

* Adding polygon source

* adjusting tests

* linting

---------

Co-authored-by: Tony Najjar <tony.najjar@logivations.com>
Co-authored-by: Tony Najjar <tony.najjar.1997@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: James Ward <j.ward@sydney.edu.au>
Signed-off-by: enricosutera <enricosutera@outlook.com>
* provide validation_message.hpp

Signed-off-by: goes <GoesM@buaa.edu.cn>

* fix typo

Signed-off-by: goes <GoesM@buaa.edu.cn>

* add test_validation_messages.cpp

Signed-off-by: goes <GoesM@buaa.edu.cn>

* change include-order

Signed-off-by: goes <GoesM@buaa.edu.cn>

* reformat

Signed-off-by: goes <GoesM@buaa.edu.cn>

* update test

Signed-off-by: goes <GoesM@buaa.edu.cn>

---------

Signed-off-by: goes <GoesM@buaa.edu.cn>
Co-authored-by: goes <GoesM@buaa.edu.cn>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: Silvio Traversaro <silvio@traversaro.it>
Signed-off-by: enricosutera <enricosutera@outlook.com>
)

When the path is shorter than ´forward_sampling_distance´ the
rotatitonShimController would directly give control to the primary
controller to navigate to the goal. This would lead to the exact
behavior that was tried to be fixed by the rotationShimController: "The
result is an awkward, stuttering, or whipping around behavior" [1]. It
often resulted in navigation failure.

In this case, the controller should try to rotate towards the last point
of the path, so that the primary controller can have a better starting
orientation.

[1] https://navigation.ros.org/tuning/index.html#rotate-in-place-behavior

Signed-off-by: enricosutera <enricosutera@outlook.com>
…os-navigation#4293)

% `ruff check`
```
Error: nav2_system_tests/src/system/test_wrong_init_pose_launch.py:117:21: F601 Dictionary key literal `'use_composition'` repeated
```
% ` ruff rule F601`
# multi-value-repeated-key-literal (F601)

Derived from the **Pyflakes** linter.

Fix is sometimes available.

## What it does
Checks for dictionary literals that associate multiple values with the
same key.

## Why is this bad?
Dictionary keys should be unique. If a key is associated with multiple values,
the earlier values will be overwritten. Including multiple values for the
same key in a dictionary literal is likely a mistake.

## Example
```python
foo = {
    "bar": 1,
    "baz": 2,
    "baz": 3,
}
foo["baz"]  # 3
```

Use instead:
```python
foo = {
    "bar": 1,
    "baz": 2,
}
foo["baz"]  # 2
```

## References
- [Python documentation: Dictionaries](https://docs.python.org/3/tutorial/datastructures.html#dictionaries)

Signed-off-by: Christian Clauss <cclauss@me.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
* Add footprint clearing for static layer

Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com>

* fix flckering

---------

Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
…#4300)

Signed-off-by: PRP <padhupradheep@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
* 64 bit for index

Signed-off-by: Guillaume Doisy <guillaume@dexory.com>

* Graph storing in uint64

* Remove incorrect usage

---------

Signed-off-by: Guillaume Doisy <guillaume@dexory.com>
Co-authored-by: Guillaume Doisy <guillaume@dexory.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Update link to docs

Signed-off-by: João Britto <cbn.joao@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: Pradheep <padhupradheep@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
…n#4313)

Signed-off-by: enricosutera <enricosutera@outlook.com>
When I build `nav2_amcl` with `-Wl,--no-undefined` I noticed
`libpf_lib.so` has undefined symbols. This PR correctly links
`libpf_lib.so` to `libm` so all symbols can be found.

You can verify this by executing the following command:
```
ldd -r ./build/nav2_amcl/src/pf/libpf_lib.so
	linux-vdso.so.1 (0x00007ffd1f8c0000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000074e909a00000)
	/lib64/ld-linux-x86-64.so.2 (0x000074e909e60000)
undefined symbol: ceil	(./build/nav2_amcl/src/pf/libpf_lib.so)
undefined symbol: atan2	(./build/nav2_amcl/src/pf/libpf_lib.so)
undefined symbol: sin	(./build/nav2_amcl/src/pf/libpf_lib.so)
undefined symbol: hypot	(./build/nav2_amcl/src/pf/libpf_lib.so)
undefined symbol: cos	(./build/nav2_amcl/src/pf/libpf_lib.so)
undefined symbol: log	(./build/nav2_amcl/src/pf/libpf_lib.so)
undefined symbol: sqrt	(./build/nav2_amcl/src/pf/libpf_lib.so)
undefined symbol: floor	(./build/nav2_amcl/src/pf/libpf_lib.so)
```

Signed-off-by: Ramon Wijnands <ramon.wijnands@nobleo.nl>
Signed-off-by: enricosutera <enricosutera@outlook.com>
…n#4301)

* add validation check for PoseWithCovarianceStamped

Signed-off-by: goes <GoesM@buaa.edu.cn>

* remove rebundant check before

Signed-off-by: goes <GoesM@buaa.edu.cn>

* reformat

Signed-off-by: goes <GoesM@buaa.edu.cn>

* typo fixed

Signed-off-by: goes <GoesM@buaa.edu.cn>

* change the type-name

Signed-off-by: goes <GoesM@buaa.edu.cn>

* update test

Signed-off-by: goes <GoesM@buaa.edu.cn>

* reformat

Signed-off-by: goes <GoesM@buaa.edu.cn>

* .

Signed-off-by: goes <GoesM@buaa.edu.cn>

* add comment

Signed-off-by: goes <GoesM@buaa.edu.cn>

* update comment

Signed-off-by: goes <GoesM@buaa.edu.cn>

* change header

Signed-off-by: goes <GoesM@buaa.edu.cn>

* update test

Signed-off-by: goes <GoesM@buaa.edu.cn>

* typo fixed

Signed-off-by: goes <GoesM@buaa.edu.cn>

---------

Signed-off-by: goes <GoesM@buaa.edu.cn>
Co-authored-by: goes <GoesM@buaa.edu.cn>
Signed-off-by: enricosutera <enricosutera@outlook.com>
…::getClosestAngularBin. (ros-navigation#4324)

Signed-off-by: Krzysztof Pawełczyk <k.t.pawelczyk@gmail.com>
Co-authored-by: Krzysztof Pawełczyk <kpawelczyk@autonomous-systems.pl>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
* add bond_heartbeat_period

Signed-off-by: Guillaume Doisy <guillaume@dexory.com>

* lint

Signed-off-by: Guillaume Doisy <guillaume@dexory.com>

---------

Signed-off-by: Guillaume Doisy <guillaume@dexory.com>
Co-authored-by: Guillaume Doisy <guillaume@dexory.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Fix the bug that isPathUpdated function will return false for the reason that it compare the timestaped between new path and old path's last pose

Signed-off-by: StetroF <120172218+StetroF@users.noreply.github.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
…os-navigation#4346)

Signed-off-by: Guillaume Doisy <guillaume@dexory.com>
Co-authored-by: Guillaume Doisy <guillaume@dexory.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
* remove spin test that is failing reliably

* cont.

Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
Signed-off-by: enricosutera <enricosutera@outlook.com>
@enricosutera enricosutera force-pushed the (binary-filter)-change-boolean-ros-params branch from 2e0795f to e50c168 Compare May 19, 2024 21:33
Signed-off-by: enricosutera <enricosutera@outlook.com>
Copy link

codecov bot commented May 19, 2024

Codecov Report

Attention: Patch coverage is 90.45139% with 110 lines in your changes are missing coverage. Please review.

Files Coverage Δ
nav2_amcl/src/pf/pf.c 91.66% <ø> (ø)
nav2_amcl/src/pf/pf_vector.c 100.00% <100.00%> (ø)
..._amcl/src/sensors/laser/likelihood_field_model.cpp 97.50% <100.00%> (ø)
...nclude/nav2_behavior_tree/behavior_tree_engine.hpp 100.00% <ø> (ø)
...tree/include/nav2_behavior_tree/bt_action_node.hpp 85.82% <100.00%> (ø)
...ee/include/nav2_behavior_tree/bt_action_server.hpp 83.33% <ø> (ø)
...clude/nav2_behavior_tree/bt_cancel_action_node.hpp 80.64% <100.00%> (ø)
...avior_tree/include/nav2_behavior_tree/bt_utils.hpp 100.00% <100.00%> (ø)
...ior_tree/plugins/action/assisted_teleop_action.hpp 100.00% <ø> (ø)
...v2_behavior_tree/plugins/action/back_up_action.hpp 100.00% <ø> (ø)
... and 144 more

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.