ROS 및 MATLAB 통신

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
Alt
와 같이 일반적으로 사용되는 일부 토픽 명령은 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

추천

출처blog.csdn.net/crp997576280/article/details/102718771