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

Allow manual specification of parameter type #797

Open
zhangyx1998 opened this issue Sep 17, 2024 · 0 comments
Open

Allow manual specification of parameter type #797

zhangyx1998 opened this issue Sep 17, 2024 · 0 comments
Labels

Comments

@zhangyx1998
Copy link

zhangyx1998 commented Sep 17, 2024

Feature request

Feature description

  1. ROS Launch should allow manual type specification in a similar manner used by ROS1
  2. For ambiguous value types, roslaunch should generate a warning, not silently falls back to whatever it prefers.
  3. Alternatively, roslaunch should preserve both raw string value and the auto inferred value, let developer choose at runtime. i.e. get_parameter("vid").as_string() should return the raw string, including preceding spaces and zeros.

Examples:

  1. xml format - with ROS1 like "type" attribute
<launch>
  <node pkg="serial" exec="serial">
    <param name="vid" type="str" value="0483"/>
    <param name="pid" type="str" value="5740"/>
    <param name="baud" type="int" value="115200"/>
  </node>
</launch>
  1. python format - stick to python's type system
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
  return LaunchDescription(
    [
      Node(
        package="serial",
        executable="serial",
        parameters=[
          {
            # Python's type system is good enough to be used like this.
            "vid": str("0483"),  # Optional str()
            "pid": "5740",       # This should also produce string, not int
            "baud": int(115200), # Should produce int, with or without int()
            "...": float(123),   # Or 123.0, should produce float
          }
        ],
      )
    ]
  )

Implementation considerations

The rationale of the requested feature is well explained in this stackexchange post. To the best of my knowledge, roslaunch for ROS2 currently does not allow any type specification. Instead it always "infers" type from the string.

For example, the current type inference will behave like this:

  1. USB Pid "26ce" -> string
  2. USB Pid "8087" -> int
  3. USB Pid "0483" -> double (due to preceding zero)

This induces extra burdens on developer side. And more importantly, it will cause potential crash upon parameter change. A system that worked fine could be brought down just because the "smart" auto type inference. This is both dangerous and inconvenient.

@wjwwood wjwwood added the backlog label Oct 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants