Main Content

공유 가능한 ROS 2 사용자 지정 메시지 패키지 생성하기

이 예제에서는 MATLAB에서 공유 가능한 ROS 2 사용자 지정 메시지 패키지를 생성합니다. 필수적인 msg 파일이 포함되어 있는 ROS 2 패키지가 있어야 합니다. 다음 그림은 적절한 폴더 구조의 예를 보여줍니다.

ROS 2 Custom Messages Folder

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

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

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

genDir = fullfile(pwd,'ros2CustomMessages');
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 2 정의에서 사용자 지정 메시지를 생성합니다. 생성된 사용자 지정 메시지의 공유 가능한 ZIP 아카이브를 CreateShareableFile 이름-값 인수를 사용하여 만듭니다.

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

ros2genmsg(genDir,CreateShareableFile=true);
Identifying message files in folder 'C:/Users/echakrab/OneDrive - MathWorks/Documents/MATLAB/ExampleManager/echakrab.Bdoc23a.ROS2transform/ros-ex71849911/ros2CustomMessages'.Validating message files in folder 'C:/Users/echakrab/OneDrive - MathWorks/Documents/MATLAB/ExampleManager/echakrab.Bdoc23a.ROS2transform/ros-ex71849911/ros2CustomMessages'.Done.
Creating a Python virtual environment.Done.
Adding required Python packages to virtual environment.Done.
Copying include folders.Done.
Copying libraries.Done.
Done.
[1/1] Generating MATLAB interfaces for custom message packages... Done.
Running colcon build in folder 'C:/Users/echakrab/OneDrive - MathWorks/Documents/MATLAB/ExampleManager/echakrab.Bdoc23a.ROS2transform/ros-ex71849911/ros2CustomMessages/matlab_msg_gen/win64'.
Build in progress. This may take several minutes...

명령 창에서 ros2 msg list를 입력하여 새 사용자 지정 메시지가 생성되었는지 확인합니다.