Main Content

ros2genmsg

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

R2019b 이후

설명

예제

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

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

참고

  • ROS 2 사용자 지정 메시지를 생성하려면 ROS 2 패키지를 빌드해야 합니다. 이 과정을 수행하려면 해당 플랫폼용 C++ 컴파일러가 필요합니다. 자세한 내용은 ROS Toolbox 시스템 요구 사항 항목을 참조하십시오.

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

  • MATLAB에서 생성하는 사용자 지정 메시지는 이제 eProsima Fast DDS 미들웨어와 Eclipse Cyclone DDS 미들웨어를 지원합니다. ROS 미들웨어 구현에 대한 자세한 내용은 Switching Between ROS Middleware Implementations 항목을 참조하십시오.

예제

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

예제

모두 축소

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

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

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

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

이 예제에서는 MATLAB에서 ROS 2 사용자 지정 메시지를 만듭니다. 필수적인 msg 파일이 포함되어 있는 ROS 2 패키지가 있어야 합니다.

사용자 지정 메시지 패키지가 올바른지 확인한 다음에는 부모 폴더의 경로를 지정하고 지정된 경로로 ros2genmsg를 호출합니다. 다음 예제에서는 종속성이 있는 세 개의 메시지 example_package_a,, example_package_b, example_package_c를 제공했습니다. 이 예제에서는 여러 메시지가 포함된 폴더를 사용하여 이들을 동시에 생성할 수 있음을 보여줍니다.

새 MATLAB 세션을 열고 로컬 폴더에 사용자 지정 메시지 폴더를 만듭니다.

folderPath = fullfile(pwd,"custom");
copyfile("example_*_msgs",folderPath);

사용자 지정 메시지 파일의 폴더 경로를 지정하고 ros2genmsg를 사용하여 사용자 지정 메시지를 만듭니다.

ros2genmsg(folderPath)
Identifying message files in folder 'C:/Work/custom'.Done.
Removing previous version of Python virtual environment.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:/Work/custom'.Done.
[3/3] Generating MATLAB interfaces for custom message packages... Done.
Running colcon build in folder 'C:/Work/custom/matlab_msg_gen/win64'.
Build in progress. This may take several minutes...
Build succeeded.build log

ros2 msg list를 호출하여 새 사용자 지정 메시지가 생성되었는지 확인합니다.

ros2 msg list
action_msgs/CancelGoalRequest
action_msgs/CancelGoalResponse
action_msgs/GoalInfo
action_msgs/GoalStatus
action_msgs/GoalStatusArray
actionlib_msgs/GoalID
actionlib_msgs/GoalStatus
actionlib_msgs/GoalStatusArray
builtin_interfaces/Duration
builtin_interfaces/Time
composition_interfaces/ListNodesRequest
composition_interfaces/ListNodesResponse
composition_interfaces/LoadNodeRequest
composition_interfaces/LoadNodeResponse
composition_interfaces/UnloadNodeRequest
composition_interfaces/UnloadNodeResponse
diagnostic_msgs/AddDiagnosticsRequest
diagnostic_msgs/AddDiagnosticsResponse
diagnostic_msgs/DiagnosticArray
diagnostic_msgs/DiagnosticStatus
diagnostic_msgs/KeyValue
diagnostic_msgs/SelfTestRequest
diagnostic_msgs/SelfTestResponse
example_a_msgs/DependsOnB
example_b_msgs/Standalone
example_c_msgs/DependsOnB
example_interfaces/AddTwoIntsRequest
example_interfaces/AddTwoIntsResponse
example_interfaces/Bool
example_interfaces/Byte
example_interfaces/ByteMultiArray
example_interfaces/Char
example_interfaces/Empty
example_interfaces/Float32
example_interfaces/Float32MultiArray
example_interfaces/Float64
example_interfaces/Float64MultiArray
example_interfaces/Int16
example_interfaces/Int16MultiArray
example_interfaces/Int32
example_interfaces/Int32MultiArray
example_interfaces/Int64
example_interfaces/Int64MultiArray
example_interfaces/Int8
example_interfaces/Int8MultiArray
example_interfaces/MultiArrayDimension
example_interfaces/MultiArrayLayout
example_interfaces/SetBoolRequest
example_interfaces/SetBoolResponse
example_interfaces/String
example_interfaces/TriggerRequest
example_interfaces/TriggerResponse
example_interfaces/UInt16
example_interfaces/UInt16MultiArray
example_interfaces/UInt32
example_interfaces/UInt32MultiArray
example_interfaces/UInt64
example_interfaces/UInt64MultiArray
example_interfaces/UInt8
example_interfaces/UInt8MultiArray
example_interfaces/WString
geometry_msgs/Accel
geometry_msgs/AccelStamped
geometry_msgs/AccelWithCovariance
geometry_msgs/AccelWithCovarianceStamped
geometry_msgs/Inertia
geometry_msgs/InertiaStamped
geometry_msgs/Point
geometry_msgs/Point32
geometry_msgs/PointStamped
geometry_msgs/Polygon
geometry_msgs/PolygonStamped
geometry_msgs/Pose
geometry_msgs/Pose2D
geometry_msgs/PoseArray
geometry_msgs/PoseStamped
geometry_msgs/PoseWithCovariance
geometry_msgs/PoseWithCovarianceStamped
geometry_msgs/Quaternion
geometry_msgs/QuaternionStamped
geometry_msgs/Transform
geometry_msgs/TransformStamped
geometry_msgs/Twist
geometry_msgs/TwistStamped
geometry_msgs/TwistWithCovariance
geometry_msgs/TwistWithCovarianceStamped
geometry_msgs/Vector3
geometry_msgs/Vector3Stamped
geometry_msgs/Wrench
geometry_msgs/WrenchStamped
lifecycle_msgs/ChangeStateRequest
lifecycle_msgs/ChangeStateResponse
lifecycle_msgs/GetAvailableStatesRequest
lifecycle_msgs/GetAvailableStatesResponse
lifecycle_msgs/GetAvailableTransitionsRequest
lifecycle_msgs/GetAvailableTransitionsResponse
lifecycle_msgs/GetStateRequest
lifecycle_msgs/GetStateResponse
lifecycle_msgs/State
lifecycle_msgs/Transition
lifecycle_msgs/TransitionDescription
lifecycle_msgs/TransitionEvent
logging_demo/ConfigLoggerRequest
logging_demo/ConfigLoggerResponse
map_msgs/GetMapROIRequest
map_msgs/GetMapROIResponse
map_msgs/GetPointMapROIRequest
map_msgs/GetPointMapROIResponse
map_msgs/GetPointMapRequest
map_msgs/GetPointMapResponse
map_msgs/OccupancyGridUpdate
map_msgs/PointCloud2Update
map_msgs/ProjectedMap
map_msgs/ProjectedMapInfo
map_msgs/ProjectedMapsInfoRequest
map_msgs/ProjectedMapsInfoResponse
map_msgs/SaveMapRequest
map_msgs/SaveMapResponse
map_msgs/SetMapProjectionsRequest
map_msgs/SetMapProjectionsResponse
nav_msgs/GetMapRequest
nav_msgs/GetMapResponse
nav_msgs/GetPlanRequest
nav_msgs/GetPlanResponse
nav_msgs/GridCells
nav_msgs/MapMetaData
nav_msgs/OccupancyGrid
nav_msgs/Odometry
nav_msgs/Path
nav_msgs/SetMapRequest
nav_msgs/SetMapResponse
pendulum_msgs/JointCommand
pendulum_msgs/JointState
pendulum_msgs/RttestResults
rcl_interfaces/DescribeParametersRequest
rcl_interfaces/DescribeParametersResponse
rcl_interfaces/FloatingPointRange
rcl_interfaces/GetParameterTypesRequest
rcl_interfaces/GetParameterTypesResponse
rcl_interfaces/GetParametersRequest
rcl_interfaces/GetParametersResponse
rcl_interfaces/IntegerRange
rcl_interfaces/ListParametersRequest
rcl_interfaces/ListParametersResponse
rcl_interfaces/ListParametersResult
rcl_interfaces/Log
rcl_interfaces/Parameter
rcl_interfaces/ParameterDescriptor
rcl_interfaces/ParameterEvent
rcl_interfaces/ParameterEventDescriptors
rcl_interfaces/ParameterType
rcl_interfaces/ParameterValue
rcl_interfaces/SetParametersAtomicallyRequest
rcl_interfaces/SetParametersAtomicallyResponse
rcl_interfaces/SetParametersRequest
rcl_interfaces/SetParametersResponse
rcl_interfaces/SetParametersResult
rosgraph_msgs/Clock
sensor_msgs/BatteryState
sensor_msgs/CameraInfo
sensor_msgs/ChannelFloat32
sensor_msgs/CompressedImage
sensor_msgs/FluidPressure
sensor_msgs/Illuminance
sensor_msgs/Image
sensor_msgs/Imu
sensor_msgs/JointState
sensor_msgs/Joy
sensor_msgs/JoyFeedback
sensor_msgs/JoyFeedbackArray
sensor_msgs/LaserEcho
sensor_msgs/LaserScan
sensor_msgs/MagneticField
sensor_msgs/MultiDOFJointState
sensor_msgs/MultiEchoLaserScan
sensor_msgs/NavSatFix
sensor_msgs/NavSatStatus
sensor_msgs/PointCloud
sensor_msgs/PointCloud2
sensor_msgs/PointField
sensor_msgs/Range
sensor_msgs/RegionOfInterest
sensor_msgs/RelativeHumidity
sensor_msgs/SetCameraInfoRequest
sensor_msgs/SetCameraInfoResponse
sensor_msgs/Temperature
sensor_msgs/TimeReference
shape_msgs/Mesh
shape_msgs/MeshTriangle
shape_msgs/Plane
shape_msgs/SolidPrimitive
simple_msgs/AddTwoIntsRequest
simple_msgs/AddTwoIntsResponse
simple_msgs/Num
statistics_msgs/MetricsMessage
statistics_msgs/StatisticDataPoint
statistics_msgs/StatisticDataType
std_msgs/Bool
std_msgs/Byte
std_msgs/ByteMultiArray
std_msgs/Char
std_msgs/ColorRGBA
std_msgs/Empty
std_msgs/Float32
std_msgs/Float32MultiArray
std_msgs/Float64
std_msgs/Float64MultiArray
std_msgs/Header
std_msgs/Int16
std_msgs/Int16MultiArray
std_msgs/Int32
std_msgs/Int32MultiArray
std_msgs/Int64
std_msgs/Int64MultiArray
std_msgs/Int8
std_msgs/Int8MultiArray
std_msgs/MultiArrayDimension
std_msgs/MultiArrayLayout
std_msgs/String
std_msgs/UInt16
std_msgs/UInt16MultiArray
std_msgs/UInt32
std_msgs/UInt32MultiArray
std_msgs/UInt64
std_msgs/UInt64MultiArray
std_msgs/UInt8
std_msgs/UInt8MultiArray
std_srvs/EmptyRequest
std_srvs/EmptyResponse
std_srvs/SetBoolRequest
std_srvs/SetBoolResponse
std_srvs/TriggerRequest
std_srvs/TriggerResponse
stereo_msgs/DisparityImage
test_msgs/Arrays
test_msgs/ArraysRequest
test_msgs/ArraysResponse
test_msgs/BasicTypes
test_msgs/BasicTypesRequest
test_msgs/BasicTypesResponse
test_msgs/BoundedSequences
test_msgs/Builtins
test_msgs/Constants
test_msgs/Defaults
test_msgs/Empty
test_msgs/EmptyRequest
test_msgs/EmptyResponse
test_msgs/MultiNested
test_msgs/Nested
test_msgs/Strings
test_msgs/UnboundedSequences
test_msgs/WStrings
trajectory_msgs/JointTrajectory
trajectory_msgs/JointTrajectoryPoint
trajectory_msgs/MultiDOFJointTrajectory
trajectory_msgs/MultiDOFJointTrajectoryPoint
unique_identifier_msgs/UUID
visualization_msgs/GetInteractiveMarkersRequest
visualization_msgs/GetInteractiveMarkersResponse
visualization_msgs/ImageMarker
visualization_msgs/InteractiveMarker
visualization_msgs/InteractiveMarkerControl
visualization_msgs/InteractiveMarkerFeedback
visualization_msgs/InteractiveMarkerInit
visualization_msgs/InteractiveMarkerPose
visualization_msgs/InteractiveMarkerUpdate
visualization_msgs/Marker
visualization_msgs/MarkerArray
visualization_msgs/MenuEntry

이제 위에서 만든 사용자 지정 메시지를 표준 메시지로 사용할 수 있습니다. 메시지를 주고받는 것에 대한 자세한 내용은 ROS 2 Publisher 및 ROS 2 Subscriber를 사용해 데이터 교환하기 항목을 참조하십시오.

example_b_msgs/Standalone 메시지를 사용할 publisher를 생성합니다.

node = ros2node("/node_1");
pub = ros2publisher(node,"/example_topic","example_b_msgs/Standalone");

동일한 토픽에 대한 subscriber를 생성합니다.

sub = ros2subscriber(node,"/example_topic");

메시지를 만들고 만든 메시지를 보냅니다.

custom_msg = ros2message("example_b_msgs/Standalone");
custom_msg.int_property = uint32(12);
custom_msg.string_property='This is ROS 2 custom message example';
send(pub,custom_msg);
pause(3) % Allow a few seconds for the message to arrive

LatestMessage 필드를 사용하여 subscriber가 받은 최근 메시지를 확인합니다.

sub.LatestMessage
ans = struct with fields:
        MessageType: 'example_b_msgs/Standalone'
       int_property: 12
    string_property: 'This is ROS 2 custom message example'

생성된 ROS 객체를 제거합니다.

clear node pub sub

내장 메시지의 정의를 사용자 지정 정의로 바꾸기

MATLAB에는 많은 ROS 2 메시지 유형이 내장되어 있습니다. 위에서 자세히 설명한 사용자 지정 메시지 생성 워크플로를 사용하여 이러한 메시지 유형의 정의를 새 정의로 바꿀 수 있습니다. 내장된 메시지 패키지의 정의를 바꿀 때는 해당 내장 메시지 패키지의 모든 메시지 유형에 대한 새 정의(.msg 파일)가 사용자 지정 메시지 패키지 폴더에 포함되어 있는지 확인해야 합니다.

이 예제에서는 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를 입력하여 새 사용자 지정 메시지가 생성되었는지 확인합니다.

입력 인수

모두 축소

ROS 메시지 패키지의 부모 폴더인 ROS 인터페이스 폴더의 경로로, string형 스칼라 또는 문자형 벡터로 지정됩니다. 부모 폴더는 패키지 .xml과 패키지 폴더를 포함해야 합니다. 패키지 폴더는 메시지 정의를 위한 .msg 파일이 있는 /msg라는 이름의 폴더, 서비스 정의를 위한 .srv 파일이 있는 /srv라는 이름의 폴더, 액션 정의를 위한 .action 파일이 있는 /action이라는 이름의 폴더를 포함합니다. 자세한 내용은 About ROS 2 Interfaces 항목을 참조하십시오.

예: 'C:/test/ros2CustomMessages'

데이터형: char | string

이름-값 인수

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

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

예: BuildConfiguration='fasterruns'

빌드 구성으로, BuildConfiguration과 함께 'fasterbuilds' 또는 'fasterruns'를 포함하는 문자형 벡터 또는 string형 스칼라가 쉼표로 구분되어 지정됩니다.

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

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

예: ros2genmsg('C:/test/ros2CustomMessages',BuildConfiguration='fasterruns')

데이터형: char | string

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

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

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

예: ros2genmsg('C:/test/ros2CustomMessages',CreateShareableFile=true)

데이터형: logical

제한 사항

노드 재시작

  • 사용자 지정 메시지를 생성한 다음 기존 ROS 2 노드를 다시 시작합니다.

사용자 지정 메시지를 통한 코드 생성:

  • 사용자 지정 메시지 및 서비스 유형을 ROS 2 기능과 함께 사용하여 독립형 ROS 2 노드에 대한 C++ 코드를 생성할 수 있습니다. 생성된 TGZ 아카이브는 사용자 지정 메시지에 대한 정의를 포함하지만 ROS 2 사용자 지정 메시지 패키지는 포함하지 않습니다. 함수가 대상에서 생성된 코드를 빌드할 때 colcon 작업 공간에서 사용자 지정 메시지 패키지를 사용할 수 있어야 합니다. 이 작업 공간을 현재 작업 디렉터리로 설정하십시오. 생성된 코드를 빌드하기 전에 사용자 지정 메시지 패키지를 시스템에 설치하거나 복사하십시오.

MATLAB Compiler

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

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

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

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

버전 내역

R2019b에 개발됨

모두 확장