小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
lauch命令启动2个ros2节点,但会马上自动关闭这2个ros2的节点,为何?
-
问题描述:
使用lauch命令启动2个ros2节点,但会马上自动关闭这2个ros2的节点,原因是什么?为何有错误提示:undefined bool flag -r in -ros-args,如何消除?
[在这里详细描述您遇到的问题。请确保您提供了足够的背景信息,以便其他人能够理解您的问题。]
具体细节和上下文:
虚拟机:ubuntu22.04.4
ros2版本:hubmle单个ros2的节点可以在各自的terminal中成功启动。
log文件:
1724825223.1759136 [INFO] [launch]: All log files can be found below /home/ah/.ros/log/2024-08-28-14-07-03-174888-ubuntu2204-51926
1724825223.1760838 [INFO] [launch]: Default logging verbosity is set to INFO
1724825223.2611883 [INFO] [canbus_node-1]: process started with pid [51930]
1724825223.2614608 [INFO] [alarmlight_node-2]: process started with pid [51932]
1724825223.2634103 [canbus_node-1] undefined bool flag -r in -ros-args
1724825223.2639744 [INFO] [canbus_node-1]: process has finished cleanly [pid 51930]
1724825223.2666111 [alarmlight_node-2] undefined bool flag -r in -ros-args
1724825223.2681978 [INFO] [alarmlight_node-2]: process has finished cleanly [pid 51932]launch文件内容:
def generate_launch_description():
action_canbus_node = Node(
package='cc_canbus',
executable='canbus_node',
output='log',
)action_alarmlight_node = Node( package='cc_canbus', executable='alarmlight_node', output='log', ) launch_description = LaunchDescription ([ action_canbus_node, action_alarmlight_node ]) return launch_description
尝试过的解决方法:
目前在社区中没有搜索到答案。
-
@flashman2002 https://fishros.org.cn/forum/topic/151/提问前必看-不符合要求的问题拒绝回答
注意格式啊喂
@flashman2002 在 lauch命令启动2个ros2节点,但会马上自动关闭这2个ros2的节点,为何? 中说:
1724825223.2634103 [canbus_node-1] undefined bool flag -r in -ros-args
参数冲突了啊喂
换个启动方式啊喂
action_alarmlight_node = Node(
package='cc_canbus',
executable='alarmlight_node',
output='log',
)action_alarmlight_node = launch.actions.ExecuteProcess( cmd=['ros2', 'run', 'cc_canbus', alarmlight_node'], output='screen' )
-
根据你提供的日志和
launch
文件内容,问题出现在ROS 2的节点启动参数上,尽管在你的launch
文件中并没有直接指定任何-ros-args
。然而,这个错误提示通常意味着ROS 2的某个组件(可能是节点本身或其依赖的库)试图解析一个不存在的布尔型命令行参数(-r
)。分析问题
-
检查节点代码:
检查canbus_node
和alarmlight_node
的代码,特别是它们如何处理命令行参数。可能在这些节点的某个地方(如main()
函数或其他初始化代码中)使用了rclcpp::get_node_options()
或类似机制来解析命令行参数,并且错误地假设了-r
参数的存在。 -
检查依赖库:
如果这两个节点使用了外部库,特别是那些可能自动添加命令行参数的库,这些库可能尝试解析-r
参数。 -
环境变量:
检查是否有环境变量(如ROS_ARGS
)被设置,该环境变量可能包含了-r
参数。
解决步骤
-
修改节点代码:
如果节点代码中确实存在对-r
参数的引用,你需要删除或修改这些代码。如果这是不必要的,简单地移除对-r
的引用即可。如果-r
参数是必需的,你需要确保在启动节点时通过-ros-args
正确传递它。例如,如果节点确实需要
-r
参数,你可以在launch
文件中这样添加它:action_canbus_node = Node( package='cc_canbus', executable='canbus_node', output='log', arguments=['--ros-args', '-r', 'true'] # 假设-r是布尔型参数 )
但根据你的
launch
文件,你并没有这样做,所以这一步可能不是必需的。 -
检查并修改外部库:
如果问题是由外部库引起的,你可能需要更新这些库,或者找到一种方法来禁用它们对命令行参数的解析。 -
清除环境变量:
如果ROS_ARGS
环境变量被设置,并且包含了-r
参数,尝试清除或修改这个环境变量。你可以在启动节点之前运行:unset ROS_ARGS
-
重新编译和测试:
在做出任何更改后,重新编译你的ROS 2包,并使用修改后的launch
文件再次尝试启动节点。 -
查看文档和社区:
如果问题仍然存在,查看相关ROS 2包或库的文档,或搜索ROS 2社区(如ROS Answers, ROS Discourse等)是否有其他人遇到并解决了类似的问题。
通过这些步骤,你应该能够诊断并解决节点自动关闭的问题。
以上为生成回答,仅供参考~
-
-
@flashman2002 https://fishros.org.cn/forum/topic/151/提问前必看-不符合要求的问题拒绝回答
注意格式啊喂
@flashman2002 在 lauch命令启动2个ros2节点,但会马上自动关闭这2个ros2的节点,为何? 中说:
1724825223.2634103 [canbus_node-1] undefined bool flag -r in -ros-args
参数冲突了啊喂
换个启动方式啊喂
action_alarmlight_node = Node(
package='cc_canbus',
executable='alarmlight_node',
output='log',
)action_alarmlight_node = launch.actions.ExecuteProcess( cmd=['ros2', 'run', 'cc_canbus', alarmlight_node'], output='screen' )
-
-
@小鱼 在 lauch命令启动2个ros2节点,但会马上自动关闭这2个ros2的节点,为何? 中说:
action_alarmlight_node = launch.actions.ExecuteProcess(
cmd=['ros2', 'run', 'cc_canbus', alarmlight_node'],
output='screen'
)现在的问题是用launch启动1个节点也会启动后马上关闭这1个节点,看来不是启动后参数冲突的原因。
-
@flashman2002 一定是这个原因,那就是不能ROS2 Run ,代码里获取参数的方法有bug