Webots 을 이용해 보신 분들이라면 아시겠지만
Webots 내부에서 제공되는 에디터를 이용해 프로그램을 작성하는게 여간 불편한게 아닙니다.

메뉴얼에 이미 있는 내용이지만, 한번 다시 정리해 보겠습니다.
순서대로만 따라서 하면 아주 쉽게 이용하실 수 있습니다.

1. 새로운 Project 생성

사용자 삽입 이미지


 위의 그림에서 보이듯이 New 를 눌러서 새로운 Project 를 생성해 줍니다.

2. Project 생성(세부)

사용자 삽입 이미지


Win32 Console Application 을 선택해 주신 후, Project name 에 이용하실 Controller의 이름을 넣어줍니다.

3. Project Settings

사용자 삽입 이미지



그리고 Project 가 생성된 후 Project -> Settings 메뉴를 통해 설정을 해 줍니다. 저 메뉴를 누르게되면 아래와 같은 화면을 보게 됩니다. 이 화면에서 왼쪽에 보이는 최 상위 노드(testController) 를 선택하게 되면 아래와 같은 탭들을 보실 수 있습니다.

사용자 삽입 이미지


4. Debug 설정

사용자 삽입 이미지


Webots 메뉴얼을 보시게되면 기본 Release 상태만 남겨놓고 Debug 를 지우라는 말이 있습니다. 하지만 그렇게 하게되면 실행 도중에 발생되는 문제들에 대해 디버그를 해볼 수가 없습니다. 그렇기에 그냥 그 부분은 무시하시고, Debug 탭을 선택하시면 Executable for debug session: 부분의 Debug\ 부분만을 지워 줍니다. 결론적으로 c:\.....\testController\testController.exe 가 되겠죠.
 

사용자 삽입 이미지



5. 전처리기(Include) 설정

사용자 삽입 이미지


위와 같이 C/C++ 탭을 누르시고 Category 를 Preprocessor 로 변경하시면 Additional include directories : 부분이 있습니다. 이부분에 c:\Program Files\Webots\Include 를 추가해 주시면 됩니다.

6. Link 설정

사용자 삽입 이미지


Link 탭을 눌러보시면 Output file name 이 있습니다. 이것을 Debug/testController.exe 로 되어있는 것을 testController.exe 만 남기고 지워줍니다. 그리고 아래와 같이 Object/Library modules 부분에 controller.lib 를 추가해 줍니다.

사용자 삽입 이미지


7. Link 설정 (Library Path Link)

사용자 삽입 이미지


마지막으로 Category 를 Input 으로 변경하신 후, c:\Program Files\Webots\Lib 를 Additional library path 에 추가시켜 주시면 Webots 의 Controller 를 컴파일 하실 준비가 끝납니다.

(*) 마치며..

  위의 작업을 다 끝내게 되면 기존에 Webots 환경에서 이용하던 Controller 파일을 그대로 VS 6.0 에서 컴파일하고 이용하실 수 있습니다. 그리고 오류가 생기면 디버깅까지 할 수 있기에 작업하실때, 리눅스로 이용하시는 것이 아니시라면 위의 방식을 이용하시는게 더 편한 작업을 하실 수 있을 것입니다.
Posted by SHHyun

크게 두가지 방법이 있습니다.

Physics Controller 를 이용한 접근

혹은

Supervisor Controller 를 이용한 접근


이렇게 두가지 방법이 있는데
제가 테스트 해본 바로는 신뢰성이 Physics Controller 가 더 높아보입니다.

Aibo ERS-7 의 Trajectory 를 구성하고 로봇이 실제 움직이는 모양이
Trajectory 와 어느정도 비슷한지를 평가하기 위해 Supervisor Controller 의
supervisor_field_get 함수를 이용해서 값을 추출해 봤는데
좌표값이 제대로 매칭이 안되는 것으로 판단됩니다.

로봇의 루트 노드를 타겟으로 잡고 값을 추출 할 때는 매칭이 되지만
하나의 일부 노드를 타겟으로 잡고 값을 추출 할 때는 제대로 매칭이되지 않는 것 같습니다.

반면에

Physics Controller 에서 ODE 라이브러리의 dBodyGetPosition 함수를 통해 값을 추출했을때는 로봇의 위치와 추출된 좌표값이 제대로 매칭이 되는 것으로 판단됩니다.

그리고 상대적 좌표값으로 변환했을 때, 나타나는 점들의 자취또한 Physics Controller 를 이용해 추출해 낸 값들에서 더 올바른 형태가 나타났습니다.

정리해보면

로봇이 현재 위치한 포인트를 잡아내는 방법은 두가지가 있는데
Physics ControllerdBodyGetPosition 이 있고,
Supervisor Controllersupervisor_field_get 이 있는데,

로봇의 한 노드의 포인트를 잡아내기에는 Physics Controller 를 쓰는것이 더 좋고,
현재 로봇의 루트노드의 포인트를 잡아 위치한 곳을 판단하기에는
Supervisor Controller 를 이용하는 것이 더 편합니다.

P.S 아직 정확히 왜 차이를 보이는지는 알아내지 못했습니다. -ㅠ-

Posted by SHHyun

Webots 시뮬레이터를 혹시라도 이용하시는 분이 있으시다면

참고해 볼만한 내용 입니다.

제작자인 Olivier 씨에게 문의를 해 보았는데

x,y,z 좌표계의 1 이라는 수치가 의미하는 길이가

실세계의 1 미터 라고 하는 군요

그리고 Webots 에서 구현되어 있는 모든 로봇들의 좌표계에 대한 것인데

좌표들은 다 부모 노드에 종속되어 있는 상대적 좌표계 라고 하네요

즉 가장 외부로 나와 있는 것은 dWorld 객체에 종속되어 있는 좌표계를 이용하는 것이고

로봇의 각각의 부분은 그것이 부착되어 있는 부모 노드의 좌표를 원점으로 종속되어 있다고 하는군요.

혹시 웹봇을 이용하시는분이 계신다면 저한테 연락좀 주시겠습니까?

서로 자료에 대해 공유도 하고 토론도 하게요 ^^

Posted by SHHyun