mi-task/test/test_center_on_tracks.py

101 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import sys
import os
import time
import argparse
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from utils.log_helper import LogHelper, get_logger, section, info, debug, warning, error, success, timing
def main():
"""
测试双轨道线居中功能
"""
# 解析命令行参数
parser = argparse.ArgumentParser(description='测试双轨道线居中功能')
parser.add_argument('--distance', type=float, default=0.0,
help='居中后要前进的距离(米)默认为0即仅执行居中操作')
parser.add_argument('--speed', type=float, default=0.5,
help='前进速度(米/秒)默认为0.5')
parser.add_argument('--max_time', type=float, default=15.0,
help='最大居中时间(秒)默认为15秒')
parser.add_argument('--stone_path', action='store_true',
help='强制使用石板路模式')
parser.add_argument('--normal_path', action='store_true',
help='强制使用普通路径模式')
args = parser.parse_args()
# 初始化日志
LogHelper.init('dual_track_centering')
section("双轨道线居中测试", "开始")
try:
# 导入机器人控制模块
from robot_controller import RobotCtrl
# 初始化机器人控制器
ctrl = RobotCtrl(observe=True)
msg = ctrl.initialize()
if msg is None:
error("初始化机器人控制器失败", "失败")
return
info("机器人控制器初始化成功", "初始化")
# 等待机器人准备就绪
time.sleep(1)
# 确定使用哪种模式
stone_path_mode = None # 默认自动检测
if args.stone_path:
stone_path_mode = True
info("强制使用石板路模式", "模式")
elif args.normal_path:
stone_path_mode = False
info("强制使用普通路径模式", "模式")
else:
info("使用自动检测模式", "模式")
# 导入双轨道线居中模块
from base_move.center_on_dual_tracks import center_on_dual_tracks, center_and_follow_dual_tracks
# 执行居中操作
if args.distance > 0:
# 居中后沿轨道前进
info(f"执行居中并前进 {args.distance} 米,速度 {args.speed} m/s", "任务")
success = center_and_follow_dual_tracks(
ctrl, msg,
distance=args.distance,
speed=args.speed,
max_centering_time=args.max_time,
observe=True,
stone_path_mode=stone_path_mode
)
else:
# 仅执行居中
info("仅执行居中操作", "任务")
success = center_on_dual_tracks(
ctrl, msg,
max_time=args.max_time,
observe=True,
stone_path_mode=stone_path_mode
)
# 显示结果
if success:
success("测试成功完成", "结果")
else:
warning("测试未完全成功", "结果")
# 清理资源
ctrl.cleanup()
except KeyboardInterrupt:
warning("用户中断测试", "中断")
except Exception as e:
error(f"测试过程中发生异常: {str(e)}", "异常")
section("双轨道线居中测试", "结束")
if __name__ == "__main__":
main()