MATLAB/Simulink에서 C++ ROS 노드 만들기

6133 단어 C++SimulinkmatlabROS
안녕하세요. 갑작스럽지만 ros_control은 굉장히 까다롭군요・・・어쩔 수 없는 것은 알겠습니다만, 나와 같은 인간으로부터 하면 좀 더 편하게 제어계의 노드를 만들고 싶다・・・
그러한 사람들에게 사용하기 쉬운 도구 중 하나는 MATLAB/Simulink입니다.
이번에는 MATLAB/Simulink에서 C++로의 변환 기능을 이용하여 C++ ROS 노드를 만드는 방법에 대해 남겨두고 싶습니다.
자세한 절차는 여기을 참조하십시오.
이 절차를 수행하려면 다음 도구 상자가 필요합니다.
Robotics System Toolbox, Simulink Coder,Simulink

matlab과 ROS 연결



roscore를 실행 한 다음 matlab 명령 줄에 rosinit을 입력하여 ROS와 matlab을 연결합니다.


Simulink 모델 만들기



이번에는 매우 간단한 노드를 만들고 싶습니다.
/input이라는 이름의 std_msgs/Float64형 메세지를 받고, 메세지를 받았을 때 그것과 같은 값을/output라고 하는 토픽으로 출력합니다.

Enabled Subsystem의 내용은 다음과 같습니다.

Subscriber, Publisher 블록의 수신, 송신 토픽, 그 타입 등은 블록을 더블 클릭하면 편집할 수 있습니다.

Simulink 모델의 동작 확인



아래와 같은 launch 후아일을 만들어서 launch 해주세요.

sample.launch
<?xml version="1.0" encoding="UTF-8"?>
<launch>
  <node name="input_node" pkg="rostopic" type="rostopic" args="pub -r 100 /input std_msgs/Float64 -- 1" output="screen" respawn="true">
  </node>
</launch>

모델을 저장하고 Simulink 실행 버튼을 누르십시오. 이때 시뮬레이션 종료 시간을 Inf(무한)로 하는 것을 잊지 마세요! 그렇지 않으면 실행이 순식간에 끝납니다!


C++로 변환



Simulink 모델을 만들고 동작 확인을 할 수 있는 곳에서 C++의 ROS 노드로 컨버트 해 봅시다.
Simulink의 바에서 기어 마크를 클릭하여 구성 매개 변수를 설정합니다.

여기에서 솔버 옵션을 고정 단계로 설정하십시오.
그 후 고정 스텝 사이즈를 자신이 만들고 싶은 제어계에 맞추어 설정해 주세요

그런 다음 하드웨어 실행 탭을 엽니다.

하드웨어 보드에서 ROS를 선택합니다.
설정이 끝나면 소스 코드로 확장합니다.
ctrl+B 바로 가기를 사용하거나 코드 -> C/C++ 코드 -> 하드웨어로 배포를 선택합니다.
잠시 후 이런 화면이 나오고 소스 코드가 생성됩니다.


생성한 디렉토리를 확인하면 뭔가 많아지고 있다고 생각합니다.


./build_ros_model.sh.sh의 지시대로 빌드 해 봅시다.


이 명령을 실행하면, 여러가지 경고는 나오는 것입니다만, 빌드에 성공했습니다! !

이제 조속히 테스트해 봅시다.

생성된 ROS 노드의 실행 테스트



다음과 같은 launch 파일을 작성하고 roslaunch하십시오.

sample.launch
<?xml version="1.0" encoding="UTF-8"?>
<launch>
    <node name="input_node" pkg="rostopic" type="rostopic" args="pub -r 100 /input std_msgs/Float64 -- 1" output="screen" respawn="true">
  </node>

  <node name="sample_node" pkg="sample" type="sample_node" args="" output="screen" respawn="true">
  </node>
</launch>


rqt_graph로 확인한 결과 노드끼리는 통신할 수 있네요! !


받고 있는 데이터에도 이상이 없고, topic의 게시율도 정확합니다.

요약



이상과 같은 느낌으로 Simulink 모델로부터 ROS의 노드를 생성하는 것이 가능합니다.
절차는 다소 어렵지만 그래픽으로 제어 시스템을 구축하는 것이 큰 이점이라고 생각합니다.
그리고, 확인은 하고 있지 않습니다만 Windows상에서도 아마 코드 생성까지는 할 수 있다고 생각합니다.

좋은 웹페이지 즐겨찾기