roslaunch启动apriltag_ros节点返回退出码2 rosrun运行正常如何解决
问题根因
roslaunch启动ROS节点时,会自动向启动命令追加__name:=<节点名>、__log:=<日志路径>两类内置重映射参数,用于配置节点的基础属性。你的代码直接使用argparse解析全部命令行参数,未过滤ROS自带的特殊参数,导致argparse将这两个参数识别为非法输入,触发错误返回退出码2。
直接用rosrun运行节点时不会自动追加上述特殊参数,因此不会触发报错。
修复方案
1. 启用ROS参数过滤
取消你代码中# rospy.myargv(argv=sys.argv)这行的注释,该方法会自动过滤掉命令行中ROS自带的特殊参数。
2. 修改参数解析逻辑
调整argparse的入参,只传入过滤后的非ROS参数,修改后的参数解析部分代码如下:
# 过滤ROS内置特殊参数 filtered_argv = rospy.myargv(argv=sys.argv) # 仅将过滤后的业务参数传入argparse解析,filtered_argv[0]为脚本文件名,无需传入 options = parser.parse_args(args=filtered_argv[1:])
修改完成后重新编译工作空间,再执行roslaunch即可正常启动节点。
内容的提问来源于stack exchange,提问作者NOVA1323
相关产品推荐
相关产品推荐

