Main Content

rosgenmsg

ROS 정의에서 사용자 지정 메시지 생성

설명

rosgenmsg(folderpath)는 지정된 폴더 경로에서 ROS 사용자 지정 메시지, 서비스 정의, 액션 정의를 읽어 ROS 사용자 지정 메시지를 생성합니다. 이 함수 폴더에는 하나 이상의 ROS 패키지 폴더가 포함되어 있어야 합니다. 이러한 패키지는 .msg 파일의 메시지 정의, .srv 파일의 서비스 정의, .action 파일의 액션 정의를 포함합니다.

사용자 지정 메시지를 생성하고 나면 지원되는 다른 모든 메시지처럼 MATLAB®에서 사용자 지정 메시지를 보내고 받을 수 있습니다. 이러한 메시지는 rosmessage를 사용하여 생성할 수 있습니다. 또는 MATLAB 명령 창에서 rosmsg list를 입력하여 메시지 목록을 볼 수 있습니다.

참고

  • ROS 사용자 지정 메시지를 생성하려면 ROS 패키지를 빌드해야 합니다. 이 과정을 수행하려면 해당 플랫폼용 CMake 소프트웨어와 C++ 컴파일러에 액세스할 수 있어야 합니다. 자세한 내용은 ROS Toolbox 시스템 요구 사항 항목을 참조하십시오

  • ROS 정의의 사용자 지정 메시지는 MATLAB의 새 릴리스마다 매번 다시 생성해야 합니다.

rosgenmsg(folderpath,Name=Value)는 하나 이상의 이름-값 인수를 사용하여 추가 옵션을 지정합니다.

예제

예제

모두 축소

사용자 지정 메시지를 사용하여 현재 ROS에서 지원되는 메시지 유형 세트를 확장할 수 있습니다. 사용자 지정 메시지는 사용자가 정의하는 메시지입니다. 현재 지원되는 메시지 유형을 보내고 받고 있다면 사용자 지정 메시지를 사용할 필요가 없습니다. 지원되는 메시지 유형의 목록을 보려면 MATLAB® 명령 창에 rosmsg list를 입력합니다. 지원되는 ROS 메시지에 대한 자세한 내용은 Work with Basic ROS Messages 항목을 참조하십시오.

ROS 사용자 지정 메시지를 처음 사용한다면 ROS Toolbox 시스템 요구 사항 항목을 참조하십시오.

ROS 사용자 지정 메시지는 이름이 msg인 폴더가 포함된 ROS 패키지 폴더에 지정됩니다. msg 폴더에는 모든 사용자 지정 메시지 유형 정의가 포함됩니다. 예를 들어 rosCustomMessages 폴더의 simple_msgs 패키지는 다음과 같은 폴더와 파일 구조를 갖습니다.

이 패키지는 사용자 지정 메시지 유형 Num.msg를 포함합니다. MATLAB은 이러한 파일을 사용하여 패키지에 포함된 사용자 지정 메시지를 사용하기 위해 필요한 파일을 생성합니다.

이 예제에서는 MATLAB에서 ROS 사용자 지정 메시지를 만들고 공유 가능한 ZIP 아카이브로 압축합니다. 필수적인 msg 파일이 포함되어 있는 ROS 패키지가 있어야 합니다.

사용자 지정 메시지 패키지 폴더를 준비한 다음에는 부모 폴더의 경로를 지정하고 지정된 경로로 rosgenmsg를 호출합니다.

새 MATLAB 세션을 열고 로컬 폴더에 사용자 지정 메시지 패키지 폴더를 만듭니다. Windows 시스템에서 사용자 지정 메시지를 생성하는 경우, 짧은 폴더 경로를 선택하면 폴더 경로의 문자 수 제한을 피할 수 있습니다. 예를 들면 다음과 같습니다.

genDir = fullfile('C:/test/rosCustomMessages')

genDir = fullfile(pwd,'rosCustomMessages');
packagePath = fullfile(genDir,'simple_msgs');
mkdir(packagePath)

사용자 지정 메시지 패키지 폴더 안에 이름이 msg인 폴더를 만듭니다.

mkdir(packagePath,'msg')

msg 폴더 안에 이름이 .msg인 파일을 만듭니다.

messageDefinition = {'int64 num'};

fileID = fopen(fullfile(packagePath,'msg', ...
               'Num.msg'),'w');
fprintf(fileID,'%s\n',messageDefinition{:});
fclose(fileID);

사용자 지정 메시지 패키지 폴더 안에 이름이 srv인 폴더를 만듭니다.

mkdir(packagePath,'srv')

srv 폴더 안에 이름이 .srv인 파일을 만듭니다.

serviceDefinition = {'int64 a'
                     'int64 b'
                     '---'
                     'int64 sum'};
 
fileID = fopen(fullfile(packagePath,'srv', ...
               'AddTwoInts.srv'),'w');
fprintf(fileID,'%s\n',serviceDefinition{:});
fclose(fileID);

사용자 지정 메시지 패키지 폴더 안에 이름이 action인 폴더를 만듭니다.

mkdir(packagePath,'action')

action 폴더 안에 이름이 .action인 파일을 만듭니다.

actionDefinition = {'int64 goal'
                    '---'
                    'int64 result'
                    '---'
                    'int64 feedback'};
 
fileID = fopen(fullfile(packagePath,'action', ...
               'Test.action'),'w');
fprintf(fileID,'%s\n',actionDefinition{:});
fclose(fileID);

.msg, .srv, .action 파일의 ROS 정의에서 사용자 지정 메시지를 생성합니다. 생성된 사용자 지정 메시지의 공유 가능한 ZIP 아카이브를 CreateShareableFile 이름-값 인수를 사용하여 만듭니다.

이 ZIP 아카이브를 사용해 다른 시스템에 사용자 지정 메시지를 등록하는 방법에 대한 자세한 내용은 rosRegisterMessages 항목을 참조하십시오.

rosgenmsg(genDir,CreateShareableFile=true)
Identifying message files in folder 'C:/test/rosCustomMessages'.Done.
Creating a Python virtual environment.Done.
Adding required Python packages to virtual environment.Done.
Copying include folders.Done.
Copying libraries.Done.
Validating message files in folder 'C:/test/rosCustomMessages'.Done.
[1/1] Generating MATLAB interfaces for custom message packages... Done.
Running catkin build in folder 'C:/test/rosCustomMessages/matlab_msg_gen_ros1/win64'.
Build in progress. This may take several minutes...
Build succeeded.build log
Generating zip file in the folder 'C:/test/rosCustomMessages'.Done.
 
To use the custom messages, follow these steps:
 
1. Add the custom message folder to the MATLAB path by executing:
 
addpath('C:\test\rosCustomMessages\matlab_msg_gen_ros1\win64\install\m')
savepath
 
2. Refresh all message class definitions, which requires clearing the workspace, by executing:
 
clear classes
rehash toolboxcache
 
3. Verify that you can use the custom messages. 
   Enter "rosmsg list" and ensure that the output contains the generated
   custom message types.
 

rosmsg list를 입력하여 새 사용자 지정 메시지가 생성되었는지 확인합니다.

입력 인수

모두 축소

ROS 메시지 패키지 경로로, string형 스칼라 또는 문자형 벡터로 지정됩니다. 부모 폴더에 패키지 폴더가 있어야 합니다. 패키지 폴더는 메시지 정의를 위한 .msg 파일이 있는 /msg라는 이름의 폴더, 서비스 정의를 위한 .srv 파일이 있는 /srv라는 이름의 폴더, 액션 정의를 위한 .action 파일이 있는 /action이라는 이름의 폴더를 포함합니다.

예: 'C:/test/rosCustomMessages'

데이터형: char | string

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 버전에서는 쉼표를 사용하여 각 이름과 값을 구분하고 따옴표로 Name을 묶으십시오.

예: BuildConfiguration='fasterruns'

빌드 구성으로, 다음 값 중 하나로 지정됩니다.

  • 'fasterbuilds' — 빌드 시간을 단축하는 컴파일러 최적화를 사용하여 메시지 라이브러리를 빌드합니다. 디폴트 구성입니다.

  • 'fasterruns' — 실행 속도를 높이는 컴파일러 최적화를 사용하여 메시지 라이브러리를 빌드합니다.

예: rosgenmsg('C:/test/rosCustomMessages',BuildConfiguration='fasterruns')

데이터형: char | string

공유 가능한 ZIP 아카이브를 생성하는 옵션으로, 숫자형 값 또는 논리값 1(true) 또는 0(false)로 지정됩니다.

이 인수를 1(true)로 지정하면 함수는 matlab_msg_gen_ros1 폴더에 있는 설치 폴더를 압축한 ZIP 아카이브를 생성합니다. 동일한 플랫폼에서 실행되고 있으면서 동일한 MATLAB 버전을 사용하는 다른 컴퓨터에서 이 파일을 사용할 수 있습니다.

이 인수를 0(false)으로 지정하면 함수는 ZIP 아카이브를 생성하지 않습니다.

예: rosgenmsg('C:/test/rosCustomMessages',CreateShareableFile=true)

데이터형: logical

제한 사항

MATLAB Compiler™는 ROS 사용자 지정 메시지와 rosgenmsg 함수를 지원하지 않습니다.

  • Microsoft® Visual Studio®를 설치할 때 Workload를 Desktop development with C++로 선택해야 합니다. 그러면 MSVC 컴파일러와 사용자 지정 메시지를 생성하는 데 필요한 모든 종속 항목이 설치됩니다.

  • 사용자 지정 메시지 폴더의 경로가 64자를 초과하지 않도록 합니다.

  • Python 환경 구성이 올바른지 확인하십시오. 자세한 내용은 ROS Toolbox 시스템 요구 사항 항목을 참조하십시오.

버전 내역

R2019b에 개발됨