ros2 / ros2cli

ROS 2 command line interface tools
Apache License 2.0
164 stars 159 forks source link

Trivial patch to fix misprint of action server #911

Open sbarber-dsi opened 3 weeks ago

sbarber-dsi commented 3 weeks ago

I found this bug in humble working with actions and pulled the latest and it's not fixed in rolling. See ros2action/api/__init__.py:11

Code currently is: node_fqn = '/'.join(node_ns) + node_name

But I believe the intended code was: node_fqn = '/'.join([node_ns, node_name])

e.g. for our GPS reset action ros2 action info <action_path> currently prints: //v/2/2///a/u/t/o/n/o/m/y///s/e/n/s/o/r///g/p/snovatel but it should be /v22/autonomy/sensor/gps/novatel


diff --git a/ros2action/ros2action/api/__init__.py b/ros2action/ros2action/api/__init__.py
index d0bf18d..42e2317 100644
--- a/ros2action/ros2action/api/__init__.py
+++ b/ros2action/ros2action/api/__init__.py
@@ -34,7 +34,7 @@ def get_action_clients_and_servers(*, node, action_name):
     node_names_and_ns = node.get_node_names_and_namespaces()
     for node_name, node_ns in node_names_and_ns:
         # Construct fully qualified name
-        node_fqn = '/'.join(node_ns) + node_name
+        node_fqn = '/'.join([node_ns, node_name])

         # Get any action clients associated with the node
         client_names_and_types = node.get_action_client_names_and_types_by_node(
christophebedard commented 3 weeks ago

Thanks for reporting this! Would you be willing to open a pull request with this fix?

fujitatomoya commented 3 weeks ago

rolling reproduces this issue, i think we also can add test case with namespace as below.

root@tomoyafujita:~/ros2_ws/colcon_ws# ros2 run action_tutorials_cpp fibonacci_action_server --ros-args -r __ns:=/demo

root@tomoyafujita:~/ros2_ws/colcon_ws# ros2 action list
/demo/fibonacci
root@tomoyafujita:~/ros2_ws/colcon_ws# ros2 action info /demo/fibonacci
Action: /demo/fibonacci
Action clients: 0
Action servers: 1
    //d/e/m/ofibonacci_action_server