From cb6aa6a655c59ee8c9fe8b152e1ec2a9455b6bb7 Mon Sep 17 00:00:00 2001 From: mavxa Date: Mon, 14 Sep 2026 01:12:30 +0300 Subject: [PATCH] fix(basic): accept --target option --- basic/README.md | 3 +++ basic/drive_to_aruco.py | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/basic/README.md b/basic/README.md index bc12150..32c3d1f 100644 --- a/basic/README.md +++ b/basic/README.md @@ -38,6 +38,9 @@ python3 basic/drive_to_aruco.py 14 # То же в Webots; только здесь нужен --sim python3 basic/drive_to_aruco.py 14 --sim +# Равнозначная форма с именованным аргументом +python3 basic/drive_to_aruco.py --sim --target 14 + # Закрытые клетки и уменьшенная реальная скорость python3 basic/drive_to_aruco.py 14 --blocked 8 9 --max-speed 0.08 diff --git a/basic/drive_to_aruco.py b/basic/drive_to_aruco.py index 61440cc..d494450 100755 --- a/basic/drive_to_aruco.py +++ b/basic/drive_to_aruco.py @@ -176,6 +176,9 @@ class ArucoDrive(Node): ) def on_odometry(self, message): + frame = message.header.frame_id.strip("/") + if frame: + self.odom_frame = frame pose = message.pose.pose values = (pose.position.x, pose.position.y, yaw(pose.orientation)) if all(math.isfinite(value) for value in values): @@ -318,7 +321,13 @@ class ArucoDrive(Node): def arguments(): parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("target", type=int, help="ID целевой ArUco") + parser.add_argument("target", nargs="?", type=int, help="ID целевой ArUco") + parser.add_argument( + "--target", + dest="target_option", + type=int, + help="ID целевой ArUco (альтернатива позиционному аргументу)", + ) parser.add_argument("--robot", choices=("RMC1", "RMC2"), default="RMC2") parser.add_argument("--rows", type=int) parser.add_argument("--columns", type=int) @@ -334,6 +343,12 @@ def arguments(): parser.add_argument("--yes", action="store_true", help="Не ждать Enter") parser.add_argument("--sim", action="store_true", help="Использовать /clock Webots") args = parser.parse_args() + if args.target is not None and args.target_option is not None: + parser.error("укажите target один раз: позиционно или через --target") + if args.target is None: + args.target = args.target_option + if args.target is None: + parser.error("укажите ID цели: TARGET или --target TARGET") if args.rows is None: args.rows = 6 if args.sim else 5 if args.columns is None: