diff --git a/datafiles/BlockDeTreasureLeft.csv b/datafiles/BlockDeTreasureLeft.csv index 79257ab4..61aeba9e 100644 --- a/datafiles/BlockDeTreasureLeft.csv +++ b/datafiles/BlockDeTreasureLeft.csv @@ -1,8 +1,8 @@ PR,60,60,clockwise,右回頭 -EC,right,エッジ切替 DS,80,250,直進 CS,BLACK,150,黒まで直進、ブロックエリア侵入 DS,50,150,黒線から外れるよう直進 +EC,right,エッジ切替 PR,60,60,anticlockwise,左回頭 CL,BLUE,200,-10,0.4,0.22,0.1,青サークルまで移動(2 0 N), IS,交点内直進, diff --git a/rear_camera_py/tests/test_navigator.py b/rear_camera_py/tests/test_navigator.py new file mode 100644 index 00000000..4bca3a6a --- /dev/null +++ b/rear_camera_py/tests/test_navigator.py @@ -0,0 +1,128 @@ +"""Navigatorクラスのテストを記述するモジュール. + +@author: miyashita64 +""" + +import unittest + +import numpy as np + +from ..src.navigator import Navigator +from ..src.block_area_map import BlockAreaMap +from ..src.navigator import Navigator +from ..src.robot import Robot, Direction + + +class TestNavigator(unittest.TestCase): + def test_navigate_left_course(self): + """Lコースについて、想定しているコマンドファイルを返すかを検証する.""" + # コース情報生成 + length = 4 + block_map = np.zeros((length, length)) + dummy_block_coords = [(3, 3), (0, 3)] + treasure_block_coord = (0, 0) + for (y, x) in dummy_block_coords: + block_map[y][x] = 1 + block_map[treasure_block_coord[0], treasure_block_coord[1]] = 2 + + # ブロックエリアのマップ初期化 + block_area_map = BlockAreaMap(is_left_course, block_map) + # ナビゲーター初期化 + navigator = Navigator(block_area_map) + + # ロボット初期化 + start_robot = Robot(*(2, 0), Direction.N, []) + end_robot = Robot(*(1, 3), Direction.E) + + # 動作を計画する + robot = navigator.navigate(start_robot, end_robot) + # コマンドを出力する + actual_commands = "" + for motion in robot.motions: + actual_commands += f"{motion.make_command()}\n" + expected_commands = """IS,交点内直進, +CC,RED,(1 0 N), +IS,交点内直進, +CC,RED,(0 0 N), +BT,ブロック移動, +IR,(0 0 E), +XR,0,100,回頭補正, +IS,交点内直進, +CC,RED,(0 1 E), +IS,交点内直進, +CC,YELLOW,(0 2 E), +IS,交点内直進, +CC,YELLOW,(0 3 E), +BT,ブロック移動, +IR,(0 3 S), +XR,0,100,回頭補正, +IS,交点内直進, +CC,YELLOW,(1 3 S), +IS,交点内直進, +CC,GREEN,(2 3 S), +IS,交点内直進, +CC,GREEN,(3 3 S), +BR,(3 3 N), +XR,0,100,回頭補正, +IS,交点内直進, +CC,GREEN,(2 3 N), +IS,交点内直進, +CC,YELLOW,(1 3 N), +PR,75,60.0,clockwise,(1 3 E),""" + self.assertEqual(actual_commands, expected_commands) + + def test_navigate_right_course(self): + """Rコースについて、想定しているコマンドファイルを返すかを検証する.""" + # コース情報生成 + length = 4 + block_map = np.zeros((length, length)) + dummy_block_coords = [(3, 3), (0, 3)] + treasure_block_coord = (0, 0) + for (y, x) in dummy_block_coords: + block_map[y][x] = 1 + block_map[treasure_block_coord[0], treasure_block_coord[1]] = 2 + + # ブロックエリアのマップ初期化 + block_area_map = BlockAreaMap(is_left_course, block_map) + # ナビゲーター初期化 + navigator = Navigator(block_area_map) + + # ロボット初期化 + start_robot = Robot(*(2, 3), Direction.N, []) + end_robot = Robot(*(1, 0), Direction.W) + + # 動作を計画する + robot = navigator.navigate(start_robot, end_robot) + # コマンドを出力する + actual_commands = "" + for motion in robot.motions: + actual_commands += f"{motion.make_command()}\n" + expected_commands = """BR,(2 3 S), +XR,0,100,回頭補正, +IS,交点内直進, +CC,BLUE,(3 3 S), +BT,ブロック移動, +BR,(3 3 N), +XR,0,100,回頭補正, +IS,交点内直進, +CC,BLUE,(2 3 N), +IS,交点内直進, +CC,RED,(1 3 N), +IS,交点内直進, +CC,RED,(0 3 N), +BT,ブロック移動, +IL,(0 3 W), +XR,0,100,回頭補正, +IS,交点内直進, +CC,RED,(0 2 W), +IS,交点内直進, +CC,YELLOW,(0 1 W), +IS,交点内直進, +CC,YELLOW,(0 0 W), +IL,(0 0 S), +XR,0,100,回頭補正, +IS,交点内直進, +CC,YELLOW,(1 0 S), +PR,75,60.0,clockwise,(1 0 W), +""" + self.assertEqual(actual_commands, expected_commands) \ No newline at end of file