docs: add physical rover setup reference

This commit is contained in:
2026-09-10 22:06:15 +03:00
parent 19d08523eb
commit 1b0ebe1b5a
7 changed files with 163 additions and 57 deletions
+39 -19
View File
@@ -6,6 +6,7 @@ import time
import rclpy
from rclpy.node import Node
from rclpy.qos import DurabilityPolicy, QoSProfile, ReliabilityPolicy
from std_msgs.msg import Float64, String
@@ -17,29 +18,48 @@ def main():
rclpy.init()
node = Node("mvch_basic_lift")
publisher = node.create_publisher(Float64, "/RMC2/lift", 10)
statuses = []
node.create_subscription(String, "/RMC2/lift_status", lambda msg: statuses.append(msg.data), 10)
exit_message = None
try:
publisher = node.create_publisher(Float64, "/RMC2/lift", 10)
statuses = []
status_qos = QoSProfile(
depth=1,
reliability=ReliabilityPolicy.RELIABLE,
durability=DurabilityPolicy.TRANSIENT_LOCAL,
)
node.create_subscription(
String,
"/RMC2/lift_status",
lambda msg: statuses.append(msg.data),
status_qos,
)
height = 0.1 if args.state == "up" else 0.0
print(f"RMC2 lift: {args.state}, команда {height}")
for _ in range(5):
publisher.publish(Float64(data=height))
rclpy.spin_once(node, timeout_sec=0.1)
height = 0.05 if args.state == "up" else 0.0
expected = "raised" if args.state == "up" else "lowered"
print(f"RMC2 lift: {args.state}, команда {height}")
for _ in range(5):
publisher.publish(Float64(data=height))
rclpy.spin_once(node, timeout_sec=0.1)
deadline = time.monotonic() + args.wait
while time.monotonic() < deadline and not statuses:
rclpy.spin_once(node, timeout_sec=0.1)
deadline = time.monotonic() + args.wait
while time.monotonic() < deadline:
rclpy.spin_once(node, timeout_sec=0.1)
if statuses and statuses[-1].strip().lower() == expected:
break
if statuses:
print(f"Статус: {statuses[-1]}")
else:
print("Нового lift_status нет. Это возможно, если лифт уже был в нужном положении.")
node.destroy_node()
rclpy.shutdown()
if statuses and statuses[-1].strip().lower() == expected:
print(f"Статус: {statuses[-1]}")
else:
current = statuses[-1] if statuses else "нет данных"
exit_message = (
f"Лифт не подтвердил {expected}; текущий статус: {current}"
)
finally:
node.destroy_node()
rclpy.shutdown()
if exit_message:
raise SystemExit(exit_message)
if __name__ == "__main__":
main()