BUSINESS 연구 자료
    • AMA 소스코드
  • 로봇윤리 이론
  • Soar
  • ROS
  • HRI
  • 참고문헌
  • main_banner02.png

    AMA 과제 소개
    인공윤리 에이전트 개발

    인간과 로봇이 서로 진정한 소통을 하기 위해서는 인공지능에 도덕적인 요소들이 함께 접목되어 개발되어야 한다. 

  • main_banner02.png

    AMA 소스코드
    AMA메타패키지 다운로드

    OP용 AMA 버전1.0 메타패키지를 다운받으세요. 

소형 휴머노이드 로봇인 ROBOTIS-OP2(이하 OP)에 구현한 AMA 버전1.0 메타패키지는 로봇윤리의 핵심 기능인 Objection to Immoral Directive에 해당되는 기초적 HRI 태스크를 수행한다.

전체 시나리오를 설명하면, 사람이"Go"라고 명령해서 OP가 걸어가고 있을 때 허용되지 않는(예를 들어 OP가 탁자 끝으로 다가가고 있는 위험한) 상황임을 나타내는 'X'가 그려진 종이를 OP의 얼굴 앞에 보여주면 OP는 이 심볼을 카메라로 인식해서 제자리에 서고, 그 다음부터는 "Go" 명령에 대해서는 반응하지 않는다(반면에 제자리에서 하는 동작은 허용되므로 명령대로 수행한다). 그 후에 OP에게'O'가 그려진 종이를 얼굴 앞에 보여주면 Immoral 모드가 해제되어"Go" 명령을 내리면 앞으로 걸어간다. 이를 각 단계별로 설명하면 다음과 같다.

* 로봇은"Stand","Down","Yes","No","Go","Stop"의 여섯 가지 기본적인 음성 명령을 인식할 수 있다.

* 로봇은 종이에 그려진'O','X','△'의 세 가지 상징을 인식할 수 있다.

* 초기 자세에서 "Stand" 명령으로 로봇이 일어서게 한 후, "Go"라고 명령하면 앞으로 걸어간다.

* 만약 로봇이 테이블 끝에 서있는 위험한 상황에 처하거나 사람으로부터 비도덕적 명령(immoral imperative)이 주어진 것을 의미하는'X'를 보면 그 자리에 멈추고, 그 다음부터는"Go"라고 명령해도 반응하지 않는다. 또한 로봇이 "Sorry, I cannot walk."라고 대답함으로써 부적절한 명령에 대해 거부하고 있음을 사람에게 표현한다.

* 이러한 상황에서도 제자리에서 하는 동작("Stand","Down","Yes","No")은 허용되므로 정상적으로 명령을 따른다.

* 이러한 비정상적인 상태가 종료되었음을 의미하는'O'가 그려진 종이를 로봇에게 보여주면 그 다음부터는 "Go"를 포함한 모든 명령대로 수행한다.

OP용 AMA 버전1.0 메타패키지는 다음과 같은 패키지 및 폴더로 구성되어 있다.

* SoarSuite950 : Soar의 라이브러리들을 포함하고 있으며 9.5.0 버전임

* soarwrapper: Soar main 코드를 포함하고 있음

* robotis_op_camera: OP 카메라 패키지
  - github : https://github.com/ROBOTIS-OP/robotis_op_camera

* robotis_op_common: OP 설명 패키지
  - github : https://github.com/ROBOTIS-OP/robotis_op_common

* robotis_op_framework: OP 프레임워크 패키지
  - github : https://github.com/ROBOTIS-OP/robotis_op_framework

*robotis_op_launch: ROS의 론치(launch) 패키지
  - github : https://github.com/ROBOTIS-OP/robotis_op_launch

*robotis_op_ros_control: ROS의 OP 제어 패키지
  - github : https://github.com/ROBOTIS-OP/robotis_op_ros_control

* find-object: SIFT, SURF, FAST, BRIEF 등의 detector와 descriptor를 OpenCV에서 구현하기 위한 간단한 Qt 인터페이스.
   ROS에서 실행될 때 robotis_op_camera 패키지에 토픽을 구독함
  - 홈페이지 : https://introlab.github.io/find-object/
  - github : https://github.com/introlab/find-object

* pocketsphinx: CMU Sphinx에서 제공하는 음성인식 ROS 패키지로서 패키지 내부의 사전 (dictionary) 파일에 저장된 단어들만 인식 가능함.
   ROS에서 실행될 때 음성 토픽 발행
  - 홈페이지 : http://cmusphinx.sourceforge.net/
  - github : https://github.com/mikeferguson/pocketsphinx
  - wiki : http://wiki.ros.org/pocketsphinx

*sound_play: festival(C++ 기반으로 만들어진 음성합성 시스템)을 이용한 음성합성과 WAV/OGG 파일 재생 기능 제공.
   C++과 Python 기반으로 둘 다 사용 가능함.
  - 홈페이지 : http://wiki.ros.org/sound_play
  - github : https://github.com/ros-drivers/audio_commonwiki

AMA 메타패키지를 OP에 내장되어 있는 PC에서 실행하기 위해서는 ROS Hydro 버전을 설치해야 하는데, 이를 위해 아래의 웹사이트에 접속해서 Ubuntu Linux를 설치하는 과정을 따른다.
http://wiki.ros.org/hydro/Installation/Ubuntu

그리고 아래 웹사이트에 들어가서 Linux OS에서 Soar를 설치하는 법을 배운다.
http://soar.eecs.umich.edu/articles/articles/building-soar/81-building-on-linux

다음의 안내를 따라 AMA 패키지를 위한 ROS용 workspace(작업공간)를 생성하고, 전체 패키지를 실행하기 위해 단계별로 따라 하기 바란다.
(주의: 여러분이 이미 catkin을 설치했고 개발환경을 sourcing 했다고 가정함)

1) ROS의 workspace로서 "home/robotis/ama_op2_v1/src" 디렉토리를 아래와 같이 생성한다.

- catkin workspace 생성

$ mkdir -p ~/ama_op2_v1/src
$ cd ~/ama_op2_v1/src
$ catkin_init_workspace

- workspace 빌드

$ cd ~/ama_op2_v1/
$ catkin_make

- 계속하기 전에 새로운 setup.bash 파일 소싱

$ source devel/setup.bash

2) 이 페이지의 맨위에 있는 AMA 패키지를 임의의 폴더에 다운로드한다.

3) 앞에서 만든 "ama_op2_v1/src" 디렉토리에 다운로드 받은 AMA 패키지의 ama/src 디렉토리에 있는 모든 파일들과 하위 폴더들을 복사한다.


4) 새 터미널을 열고 다음 명령으로 AMA 패키지를 컴파일한다. 에러 메시지가 없으면 이 패키지는 실행 준비 상태가 된 것이다.

$ cd ~/ama_op2_v1/
$ catkin_make

5) 다음과 같이 chmod 명령으로 파일과 디렉토리의 권한을 수정함으로써 파일이 실행가능한 상태가 된다.

$ chmod +x /home/robotis/ama_op2_v1/src/robotis_op_camera/config/robotis_op_camera.cfg
$ chmod +x /home/robotis/ama_op2_v1/src/robotis_op_ros_control/config/robotis_op_ros_control.cfg
$ chmod +x /home/robotis/ama_op2_v1/src/soarwrapper/src/soar7.py
$ chmod +x /home/robotis/ama_op2_v1/src/soarwrapper/src/soarvoicekey_talker.py

6) 모든 패키지들이 다 설치되었다면 새 터미널을 열고 다음과 같이 roscore를 실행한다.

$ roscore

7) 다른 터미널을 새로 열고 다음과 같이 find_object_2d를 실행한다.

$ rosrun find_object_2d find_object_2d image:=robotis_op/camera/image_raw

그 결과 Find-Object 인터페이스 창이 뜨면 File-Load 메뉴에서 Load session을 선택한다.
robotis/ama/src/find-object/objects 디렉토리를 찾아가서"lesson_2.bin"을 불러오면 로봇이 학습한'O','X',''이미지들을 다음과 같이 볼 수 있다.

8) launch 파일에서 OP 실행

새 터미널을 열고 다음의 명령을 실행하면 OP가 음성인식을 시작하며 HRI 태스크를 실행할 준비를 한다. 이때 로봇의 파손을 방지하기 위해 준비자세로서 OP가 무릎을 가지런히 굽히고 앉아있도록 조정한다.

$ roslaunch robotis_op_onboard_launch robotis_op_whole_robot.launch

만약 "Controller Spawner couldn't find the expected controller_manager ROS interface."라는 에러 메시지가 뜨면 OP의 리셋 버튼을 다시 누르고 위 명령을 다시 실행한다.
아래와 같은 메시지가 출력될 때까지 기다린다.
"Controller Spawner: Loaded controllers: j_shoulder_r_position_controller, ...,j_tilt_position_controller."

9) 새 터미널을 열고 다음 명령을 실행하여 soar7.py 파일이 실행가능하게 만든다.

$ chmod +x ~/ama_op2_v1/src/soarwrapper/src/soar7.py

다음 명령을 실행한다. 여섯 가지 음성 명령("Stand","Down", "Yes", "No","Go","Stop") 중 "Stand" 명령으로 OP를 일으켜 세운 후 나머지 명령을 말하면 OP가 명령을 실행한다.

$ rosrun soarwrapper soar7.py

 

다음은 AMA 메타패키지의 구조와 ROS 노드 구조를 나타낸다.

다음은 OP에서 AMA 버전1.0을 실행했을 때의 스크린 샷들과 YouTube 동영상이다.