ros와 matlab 간의 통신은 ros의 master-slave 전략을 사용합니다.
1 준비 조건
1, 우선 우리는 matlab "Robotics_System_Toolbox"도구 상자, matlab2015B에 설치해야하며 나중에 자동으로이 키트를 설치했지만 활성화로 인해 rosinit 명령을 입력 할 때 나타나는 이유 일 수 있습니다. " Undefined function or variable 'rosinit' "
이때 다음 명령을 사용하여 라이센스가 올바른지 확인할 수 있습니다.
license('checkout','Robotics_System_Toolbox')
다음 메시지가 나타나면 (반환 메시지는 0) 라이선스에 문제가 있으며 다시 활성화해야 함을 의미합니다. 또는 간단한 방법은" MATLAB2016 재설치 "
matlab2015B 버전을 제거하고 2016B 버전을 설치하여 문제를 해결 한 다음 rosinit 명령을 입력하면 다음 정보가 정상적으로 출력됩니다.
2. 마스터-슬레이브 통신
먼저 matlab을 실행하는 컴퓨터와 Ubuntu를 실행하는 컴퓨터가 동일한 LAN에 연결되어 있는지 확인하십시오.
2.1 Ubuntu 설정
1. / etc / hosts 파일을 수정하여 matlab을 실행하는 컴퓨터의 IP 주소를 추가합니다. 예를 들어, 내 컴퓨터 이름은 "DESKTOP-FS5A9TU"이고 IP 주소는 10.5.3.219입니다. etc / hosts 파일에 "10.5.3.219 DESKTOP-FS5A9TU"추가
sudo vim /etc/hosts
2. 새 터미널을 열어 Ubuntu에서 roscore를 실행합니다.
roscore
2.2 MATLAB 설정
matlab에 입력하십시오 : (ROS 호스트의 IP 주소를 Ubuntu 컴퓨터의 IP로 설정하십시오)
setenv('ROS_MASTER_URI','http://10.5.3.11:11311')
rosinit
그런 다음 rostopic list 명령을 사용하여 주제 이름을 확인합니다.
rostopic list
이때 '/ rosout'및 '/ rosout_agg'주제를 볼 수 있습니다.
MATLAB 측에서 "help robotics.ros"명령을 사용하여 관련 명령을 볼 수 있습니다.
help robotics.ros
여기에는 일반적으로 사용되는 두 가지 명령이 있습니다.
- rosinit- ROS 시작을 의미합니다.
- rosshutdown- ROS를 종료하는 것을 의미합니다.
3 사용 사례 테스트
다음으로 Ubuntu 측에서 pr2 로봇을 시작하고 pr2 로봇의 센서 데이터를 수신하여 MATLAB 측에 표시 함과 동시에 제어 명령 채널 / cmd_vel 토픽을 발행하여 pr2 로봇의 동작을 제어합니다.
1. Ubuntu에서 pr2 로봇 시작
roslaunch pr2_gazebo pr2_empty_world.launch
2. matlab 측에서 먼저 ROS 호스트를 우분투 컴퓨터로 설정 한 다음 matlab에서 ros를 초기화하고 마지막으로 rostopic 목록을 사용하여 호스트에 게시 된 주제를 봅니다.
setenv('ROS_MASTER_URI','http://10.5.3.11:11311')
rosinit
rostopic list
시작 후 matlab 측에서 pr2에서 게시 한 주제를 올바르게 표시 할 수 있음을 알 수 있습니다. rostopic list, rostopic info, rostolic echo
와 같이 일반적으로 사용되는 일부 토픽 명령은 matlab에서 직접 사용할 수 있습니다. 1) List the topic list
rostopic list
2) 주제 정보보기
rostopic info /torso_lift_imu/data
3) 주제 정보 인쇄
rostopic echo /torso_lift_imu/data
3. 메시지 받기
다음으로, PR2에서 공개 한 라이더 데이터를 수신하고 표시합니다. matlab에서 토픽을 수신하는 ROS의 기능은 rossubscriber (topic_name, @function)으로 ros의 수신 기능과 다릅니다 .matlab에서는이 토픽의 데이터 유형을 지정할 필요가 없으며 자동으로 메시지 유형을 감지합니다. function은 지정하거나 기본값으로 설정할 수있는 콜백 함수를 나타냅니다. 다음으로 matlab 명령 창에 입력합니다.
>> laser = rossubscriber('/base_scan');
>> scandata = receive(laser,10);
>> plot(scandata)
다음과 같은 효과를 볼 수 있습니다.
4. 메시지 게시
1) 게시자 만들기
chatterpub = rospublisher('/chatter',rostype.std_msgs_String);
2) 데이터 입력
chattermsg = rosmessage(chatterpub);
chattermsg.Data = 'hello world';
send(chatterpub,chattermsg)
3) 우리는 ROS 호스트에서 실행됩니다.
rostopic echo /chatter
matlab 측에서 " send (chatterpub, chattermsg) "함수 를 호출 할 때마다 "hello world"
요약 이 ROS 측에 인쇄됩니다 .이 시점에서 우리는 matlab에 ROS 플러그인을 성공적으로 설치하고 matlab을 슬레이브로 수신했습니다. ROS 호스트의 토픽에 대한 데이터가 생성되고 MATLAB 측에 새 토픽이 생성되며 토픽을 통해 데이터가 ROS 측으로 전송됩니다.
4. 참고 자료
Matlab의 ROS 탐색 (35) -ROS 요약 : http://www.guyuehome.com/1006