이번 시간에는, 지난 강의에서 살펴보았던 미로찾기 예제의 코드를 분석해보고자 하며, 분석 과정에서, 제가 마주쳤던 문제들과, 디버깅 포인트들도 함께 공유하고자 합니다.

$ roslaunch gcamp_gazebo maze_world.launch

# 새 터미널
$ rosrun action_tutorial maze_action_server.py
==== MazeActionClass Constructed ====
==== Waiting for Client Goal...  ====

# 새 터미널
$ rosrun action_tutorial maze_action_client.py
[INFO] [1610254457.453111, 322.000000]: Action Server Found.../maze_action_server
Enter numbers [or stop] : 

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ac2df524-a089-49f5-a04f-dd9d8be03273/Untitled.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d5f8983b-93e3-467b-8fc3-a58c90d51692/Untitled.png

action_tutorial/
├── CMakeLists.txt
├── action
**│   └── Maze.action**
├── launch
│   ├── fibonacci_server.launch
**│   └── maze_runner.launch**
├── package.xml
└── src
    ├── fibonacci_action_client.py
    ├── fibonacci_action_server.py
    ├── gazebo_handler_test.py
    **├── maze_action_client.py
    ├── maze_action_server.py**
    └── **mazepkg**
        ├── **__init__.py**
        ├── **basic_cmd_vel.py**
        ├── **gazebo_handler.py**
        └── **image_converter.py**

gcamp_gazebo/
├── CMakeLists.txt
├── launch
│   ├── gazebo_world.launch
**│   ├── maze_world.launch**
│   └── robot_description.launch
└── ...
    
<launch>
    <node pkg="action_tutorial" type="maze_action_server.py" name="maze_action_server" output="screen" />
</launch>

server 부터 살펴보겠습니다. class 설계를 하기 앞서, 해당 클래스에게 필요한 instance, method를 기능에 맞추어 생각해 보겠습니다.

  1. client로부터 경로의 배열이 들어오면
  2. 해당 방향으로 우선 위치를 틀고 (이전 service 시간에 했던 기능과 동일하네요)
  3. 벽이 나올때까지 전진합니다. (이건, topic시간에 parking 예제로 살펴보았습니다.)
  4. 경로의 배열 끝에 다다를 때까지 위 과정을 반복합니다. (action으로 설계하면, feedback으로 진행 상황을 공유할 수 있고, 그동안 client는 다른 일을 할 수 있겠지요.)