188 lines
5.9 KiB
Python
188 lines
5.9 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
低头匍匐步态集成测试脚本
|
||
用于验证所有模块是否正确导入和配置
|
||
"""
|
||
|
||
import sys
|
||
import os
|
||
|
||
# 添加路径
|
||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
||
def test_imports():
|
||
"""测试所有模块导入"""
|
||
print("测试模块导入...")
|
||
|
||
try:
|
||
# 测试基本模块导入
|
||
from task_2.crawl_gait import (
|
||
low_crawl_gait,
|
||
transition_to_crawl_position,
|
||
recover_from_crawl_position,
|
||
run_low_crawl_demo
|
||
)
|
||
print("✓ crawl_gait模块导入成功")
|
||
|
||
from task_2.task_2 import (
|
||
run_task_2_with_crawl_demo,
|
||
test_crawl_gait_only,
|
||
test_crawl_transition_only
|
||
)
|
||
print("✓ task_2模块导入成功")
|
||
|
||
from task_2.file_send_lcmt import file_send_lcmt
|
||
from task_2.robot_control_cmd_lcmt import robot_control_cmd_lcmt
|
||
print("✓ LCM消息模块导入成功")
|
||
|
||
return True
|
||
|
||
except ImportError as e:
|
||
print(f"✗ 导入失败: {e}")
|
||
return False
|
||
|
||
def test_config_files():
|
||
"""测试配置文件存在性"""
|
||
print("\n测试配置文件...")
|
||
|
||
files_to_check = [
|
||
"./task_2/Gait_Def_crawl.toml",
|
||
"./task_2/Gait_Params_crawl.toml",
|
||
]
|
||
|
||
all_exist = True
|
||
for file_path in files_to_check:
|
||
if os.path.exists(file_path):
|
||
print(f"✓ {file_path} 存在")
|
||
else:
|
||
print(f"✗ {file_path} 不存在")
|
||
all_exist = False
|
||
|
||
return all_exist
|
||
|
||
def test_toml_syntax():
|
||
"""测试TOML文件语法"""
|
||
print("\n测试TOML文件语法...")
|
||
|
||
try:
|
||
import toml
|
||
|
||
# 测试步态定义文件
|
||
with open("./task_2/Gait_Def_crawl.toml", 'r') as f:
|
||
gait_def = toml.load(f)
|
||
print(f"✓ Gait_Def_crawl.toml 语法正确,包含 {len(gait_def['section'])} 个步态段")
|
||
|
||
# 测试步态参数文件
|
||
with open("./task_2/Gait_Params_crawl.toml", 'r') as f:
|
||
gait_params = toml.load(f)
|
||
print(f"✓ Gait_Params_crawl.toml 语法正确,包含 {len(gait_params['step'])} 个步态参数")
|
||
|
||
return True
|
||
|
||
except ImportError:
|
||
print("! toml模块未安装,跳过语法检查")
|
||
return True
|
||
except Exception as e:
|
||
print(f"✗ TOML文件语法错误: {e}")
|
||
return False
|
||
|
||
def validate_gait_parameters():
|
||
"""验证步态参数的合理性"""
|
||
print("\n验证步态参数...")
|
||
|
||
try:
|
||
import toml
|
||
|
||
with open("./task_2/Gait_Params_crawl.toml", 'r') as f:
|
||
gait_params = toml.load(f)
|
||
|
||
# 检查关键参数
|
||
first_step = gait_params['step'][0]
|
||
|
||
# 检查body_pos_des
|
||
body_pos = first_step['body_pos_des']
|
||
if len(body_pos) == 6:
|
||
print(f"✓ body_pos_des格式正确: roll={body_pos[0]}, pitch={body_pos[1]}, yaw={body_pos[2]}, x={body_pos[3]}, y={body_pos[4]}, z={body_pos[5]}")
|
||
else:
|
||
print(f"✗ body_pos_des格式错误,应为6个元素,实际{len(body_pos)}个")
|
||
return False
|
||
|
||
# 检查body_vel_des
|
||
body_vel = first_step['body_vel_des']
|
||
if len(body_vel) == 3:
|
||
print(f"✓ body_vel_des格式正确: vx={body_vel[0]}, vy={body_vel[1]}, vyaw={body_vel[2]}")
|
||
else:
|
||
print(f"✗ body_vel_des格式错误,应为3个元素,实际{len(body_vel)}个")
|
||
return False
|
||
|
||
# 检查landing_pos_des
|
||
landing_pos = first_step['landing_pos_des']
|
||
if len(landing_pos) == 12:
|
||
print(f"✓ landing_pos_des格式正确: 12个落足位置参数")
|
||
else:
|
||
print(f"✗ landing_pos_des格式错误,应为12个元素,实际{len(landing_pos)}个")
|
||
return False
|
||
|
||
# 检查step_height
|
||
step_height = first_step['step_height']
|
||
if len(step_height) == 4:
|
||
print(f"✓ step_height格式正确: FR={step_height[0]}, FL={step_height[1]}, RR={step_height[2]}, RL={step_height[3]}")
|
||
else:
|
||
print(f"✗ step_height格式错误,应为4个元素,实际{len(step_height)}个")
|
||
return False
|
||
|
||
return True
|
||
|
||
except ImportError:
|
||
print("! toml模块未安装,跳过参数验证")
|
||
return True
|
||
except Exception as e:
|
||
print(f"✗ 参数验证失败: {e}")
|
||
return False
|
||
|
||
def main():
|
||
"""主测试函数"""
|
||
print("=" * 50)
|
||
print("低头匍匐步态集成测试")
|
||
print("=" * 50)
|
||
|
||
tests = [
|
||
("模块导入", test_imports),
|
||
("配置文件检查", test_config_files),
|
||
("TOML语法检查", test_toml_syntax),
|
||
("参数验证", validate_gait_parameters),
|
||
]
|
||
|
||
results = []
|
||
for test_name, test_func in tests:
|
||
print(f"\n[{test_name}]")
|
||
result = test_func()
|
||
results.append((test_name, result))
|
||
|
||
print("\n" + "=" * 50)
|
||
print("测试结果汇总:")
|
||
print("=" * 50)
|
||
|
||
all_passed = True
|
||
for test_name, result in results:
|
||
status = "✓ 通过" if result else "✗ 失败"
|
||
print(f"{test_name:15} {status}")
|
||
if not result:
|
||
all_passed = False
|
||
|
||
print("\n" + "=" * 50)
|
||
if all_passed:
|
||
print("🎉 所有测试通过!低头匍匐步态已准备就绪。")
|
||
print("\n使用方法:")
|
||
print("1. 完整演示: run_low_crawl_demo(ctrl, msg, distance=2.0)")
|
||
print("2. 与任务2集成: run_task_2_with_crawl_demo(ctrl, msg)")
|
||
print("3. 仅测试步态: test_crawl_gait_only(ctrl, msg)")
|
||
print("4. 仅测试姿态: test_crawl_transition_only(ctrl, msg)")
|
||
else:
|
||
print("❌ 部分测试失败,请检查配置。")
|
||
print("=" * 50)
|
||
|
||
if __name__ == "__main__":
|
||
main()
|
||
|