RoboticArmTest/tests/test_config_loader.py
sladro 3b5306611a Implement KDL kinematics engine and complete core framework
Major Features Added:
- KDL-based kinematics engine with world/local coordinate transformation
- Complete GUI system with configuration management
- Robot loader with URDF parsing and joint control
- Enhanced environment system with transport object management
- Main application entry point with dependency validation

Technical Improvements:
- World coordinate to robot base coordinate transformation in KDL
- Real-time configuration updates through GUI
- Comprehensive error handling and validation
- Configuration-driven design throughout
- Robot model scaling adjusted to 0.2x for proper visualization

Files Added:
- src/robot/kinematics.py: KDL forward/inverse kinematics with coordinate transforms
- src/gui/: Complete GUI framework with main window and config management
- main.py: Application entry point with environment validation
- models/*.stl: Robot link mesh files for URDF visualization
- tests/: Unit test framework for core components

This commit establishes the complete foundation for robotic arm path planning
and task execution development.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 14:37:27 +08:00

87 lines
4.1 KiB
Python

#!/usr/bin/env python3
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from src.config_loader import ConfigLoader
def test_config_loader():
print("Testing ConfigLoader...")
# Test singleton pattern
loader1 = ConfigLoader()
loader2 = ConfigLoader()
assert loader1 is loader2, "ConfigLoader should be singleton"
print("✓ Singleton pattern works")
# Test config loading
config = loader1.get_full_config()
assert 'robot' in config, "Config should contain robot section"
assert 'wall' in config, "Config should contain wall section"
assert 'hole' in config, "Config should contain hole section"
assert 'task_points' in config, "Config should contain task_points section"
assert 'transport_object' in config, "Config should contain transport_object section"
assert 'simulation' in config, "Config should contain simulation section"
print("✓ All required config sections present")
# Test robot config
robot_config = loader1.get_robot_config()
assert robot_config['model_path'] == "models/manual_robot.urdf", "Robot model path should be correct"
assert len(robot_config['base_position']) == 3, "Robot base position should have 3 coordinates"
assert len(robot_config['base_orientation']) == 3, "Robot base orientation should have 3 angles"
print("✓ Robot config validation passed")
# Test wall config
wall_config = loader1.get_wall_config()
assert len(wall_config['position']) == 3, "Wall position should have 3 coordinates"
assert 'dimensions' in wall_config, "Wall should have dimensions"
assert wall_config['dimensions']['width'] > 0, "Wall width should be positive"
assert wall_config['dimensions']['height'] > 0, "Wall height should be positive"
assert wall_config['dimensions']['thickness'] > 0, "Wall thickness should be positive"
print("✓ Wall config validation passed")
# Test hole config
hole_config = loader1.get_hole_config()
assert len(hole_config['position_relative_to_wall']) == 3, "Hole position should have 3 coordinates"
assert 'dimensions' in hole_config, "Hole should have dimensions"
assert hole_config['dimensions']['width'] > 0, "Hole width should be positive"
assert hole_config['dimensions']['height'] > 0, "Hole height should be positive"
print("✓ Hole config validation passed")
# Test task points
task_points = loader1.get_task_points()
assert 'point_A' in task_points, "Should have point_A"
assert 'point_B' in task_points, "Should have point_B"
assert len(task_points['point_A']['position']) == 3, "Point A should have 3 coordinates"
assert len(task_points['point_B']['position']) == 3, "Point B should have 3 coordinates"
print("✓ Task points validation passed")
# Test transport object config
obj_config = loader1.get_transport_object_config()
assert len(obj_config['initial_position']) == 3, "Object initial position should have 3 coordinates"
assert 'dimensions' in obj_config, "Object should have dimensions"
assert obj_config['mass'] > 0, "Object mass should be positive"
print("✓ Transport object config validation passed")
# Test simulation config
sim_config = loader1.get_simulation_config()
assert sim_config['timestep'] > 0, "Timestep should be positive"
assert len(sim_config['gravity']) == 3, "Gravity should have 3 components"
print("✓ Simulation config validation passed")
print("\n✅ All tests passed! ConfigLoader is working correctly.")
# Print sample data
print("\nSample configuration data:")
print(f"Robot model: {robot_config['model_path']}")
print(f"Wall position: {wall_config['position']}")
print(f"Wall dimensions: {wall_config['dimensions']}")
print(f"Hole dimensions: {hole_config['dimensions']}")
print(f"Point A: {task_points['point_A']['position']}")
print(f"Point B: {task_points['point_B']['position']}")
print(f"Object mass: {obj_config['mass']} kg")
print(f"Simulation timestep: {sim_config['timestep']} s")
if __name__ == "__main__":
test_config_loader()