101 lines
3.5 KiB
Python
101 lines
3.5 KiB
Python
|
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()
|