summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2026-10-10 09:59:13 +0000
committerCoprDistGit <infra@openeuler.org>2026-10-10 09:59:13 +0000
commit0d4d419f1c21a4c287b9f842c9795b49873110e4 (patch)
tree649e28b3f8656a666faf99e1df16b59ca25c1ed6
parent65eee29a6a10ef8271e5b4d1b1001fcad6bb956e (diff)
automatic import of ros-humble-as2-behaviors-perceptionopeneuler24.03_LTS_SP3
-rw-r--r--as2-behaviors-perception.spec91
1 files changed, 91 insertions, 0 deletions
diff --git a/as2-behaviors-perception.spec b/as2-behaviors-perception.spec
index 7a7b31f..7d918c6 100644
--- a/as2-behaviors-perception.spec
+++ b/as2-behaviors-perception.spec
@@ -79,6 +79,97 @@ autonomous multi-aerial-robot systems.
%prep
%autosetup -n as2-behaviors-perception-%{version}-%{release_num}
+# 兼容性修复:本地源码(main 分支)使用 as2::Node::getParameter<T>(...) 模板方法,
+# 但已安装的 as2-core(旧版 tag)node.hpp 不含此方法。创建等价自由函数
+# as2_compat::getParameter 并替换所有调用点(3 文件 / 25 处)。
+python3 - << 'PYEOF'
+import os, re
+
+base = "as2_behaviors/as2_behaviors_object_perception"
+
+# 1. 创建兼容头文件
+compat_path = os.path.join(base, "include/as2_behaviors_object_perception/as2_compat.hpp")
+if not os.path.exists(compat_path):
+ with open(compat_path, 'w') as f:
+ f.write(
+ '#ifndef AS2_BEHAVIORS_OBJECT_PERCEPTION__AS2_COMPAT_HPP_\n'
+ '#define AS2_BEHAVIORS_OBJECT_PERCEPTION__AS2_COMPAT_HPP_\n'
+ '\n'
+ '#include <string>\n'
+ '#include <rclcpp/rclcpp.hpp>\n'
+ '\n'
+ 'namespace as2_compat {\n'
+ '\n'
+ 'template<typename T>\n'
+ 'T getParameter(rclcpp::Node * node, const std::string & name, const T & default_value)\n'
+ '{\n'
+ ' if (!node->has_parameter(name)) {\n'
+ ' node->declare_parameter<T>(name, default_value);\n'
+ ' }\n'
+ ' const rclcpp::Parameter parameter = node->get_parameter(name);\n'
+ ' return parameter.template get_value<T>();\n'
+ '}\n'
+ '\n'
+ 'template<typename T>\n'
+ 'T getParameter(rclcpp::Node * node, const std::string & name)\n'
+ '{\n'
+ ' if (!node->has_parameter(name)) {\n'
+ ' node->declare_parameter<T>(name);\n'
+ ' }\n'
+ ' const rclcpp::Parameter parameter = node->get_parameter(name);\n'
+ ' return parameter.template get_value<T>();\n'
+ '}\n'
+ '\n'
+ '} // namespace as2_compat\n'
+ '#endif // AS2_BEHAVIORS_OBJECT_PERCEPTION__AS2_COMPAT_HPP_\n'
+ )
+ print("[fix] Created as2_compat.hpp")
+else:
+ print("[fix] as2_compat.hpp already exists")
+
+# 2. 需要修改的文件
+patch_files = [
+ os.path.join(base, "src/as2_behaviors_object_perception.cpp"),
+ os.path.join(base, "plugins/aruco/src/aruco.cpp"),
+ os.path.join(base, "include/as2_behaviors_object_perception/common/common.hpp"),
+]
+
+# 3. 正则替换: <receiver>->getParameter<<type>>(<args>)
+# => as2_compat::getParameter<<type>>(<receiver>, <args>)
+pat = re.compile(
+ r'(\w+)->getParameter<((?:[^<>]|<[^<>]*>)*)>+\(([^)]*)\)'
+)
+
+for fp in patch_files:
+ with open(fp) as f:
+ content = f.read()
+
+ # 添加 include(在最后一个 #include 之后)
+ if 'as2_compat.hpp' not in content:
+ lines = content.split('\n')
+ last_inc = -1
+ for i, ln in enumerate(lines):
+ if ln.strip().startswith('#include'):
+ last_inc = i
+ if last_inc >= 0:
+ lines.insert(last_inc + 1, '#include "as2_behaviors_object_perception/as2_compat.hpp"')
+ content = '\n'.join(lines)
+
+ # 替换调用
+ new_content, count = pat.subn(
+ lambda m: 'as2_compat::getParameter<' + m.group(2) + '>(' + m.group(1) + ', ' + m.group(3) + ')',
+ content
+ )
+
+ if count > 0:
+ with open(fp, 'w') as f:
+ f.write(new_content)
+ print("[fix] %s: replaced %d getParameter calls" % (fp, count))
+ else:
+ print("[fix] %s: no getParameter calls found" % fp)
+
+PYEOF
+
%build
# ROS 基座环境
[ -f /opt/ros/%{ros_distro}/setup.sh ] && source /opt/ros/%{ros_distro}/setup.sh || true