리눅스/ROS

[ROS] 로봇팔 시뮬레이션 제어 및 통신

시그널보내 2023. 3. 18. 15:57

1. 개발환경

OS : Ubuntu 20.04
ROS : Noetic
OpenSource : OpenMANIPULATOR-X

2. 로봇팔 시뮬레이션 하기

※주의
모든 개발환경이 구성되어 있어야 하며 자세한 사항은 다음 링크를 참고할것
https://emanual.robotis.com/docs/en/platform/openmanipulator_x/quick_start_guide/#install-ros-on-pc

1) 오픈매니퓰레이터 가제보 실행

roslaunch open_manipulator_gazebo open_manipulator_gazebo.launch

- 가제보가 open되면 플레이버튼 누르기

2) 컨트롤러도 시뮬레이션으로 진행하기 위해 use_platform설정 false로 바꿔주기

roslaunch open_manipulator_controller open_manipulator_controller.launch use_platform:=false

3) GUI 시뮬레이션 프로그램 실행

roslaunch open_manipulator_control_gui open_manipulator_control_gui.launch

- Timer Start 실행


3. 통신 확인

단순히 시뮬레이션 하는것으로 끝내는 것이 아니라 실제로 통신이 어떻게 이루어지는지 직접 확인해 보자.

 

1) rostopic list 확인

rostopic list
  • 다음과 같은 토픽을 확인 할 수 있다. 그러나 토픽이 너무 많고 감이 잘 안와서 두번째 방법으로 확인해보자

2) rqtgraph로 직관적으로 확인하기

rqt_graph

  • rostopic list보다 보기 편하고 어떤 node에서 topic이 publish 되는지 subscribe되는지 확인 할 수 있다.
  • 특정 노드나 토픽에 마우스 커서를 올리면 해당 통신이 하이라이트 되면서 연관된 요소를 확인 할 수 있다.
  • GUI컨트롤러에서 가제보까지 어떻게 통신이 이루어지는지 확인하기 위해 해당 부분을 하이라이트 하면 위와 같다.

  • 사용자가 GUI컨트롤러에서 명령을 주면 /controm_gui라는 노드에서 /option 이라는 토픽이 publish되고 /open_manipulator_controller 라는 노드가 받고 이 컨트롤러가 다시 /gripper_position/command라는 토픽으로 가제보에게 전달한다.
  • 그러나 위의 rqt_graph에는 그리퍼에 대한 정보만 있을 뿐 로봇팔의 위치에 대한 정보는 표현이 되어있지 않다. 로봇팔이 움직이는 위치값도 확인하기 위해 rqt_graph의 표현을 다음과 같이 바꿔보자

  • /open_manipulator_controller에서 /joint#_position 토픽이 발행되는것을 확인 할 수 있게 되었으니 이를 확인해보자

3) rostopic echo /joint1_position

rostopic echo /joint1_position
rostopic echo /joint2_position
rostopic echo /joint3_position
rostopic echo /joint4_position
  • 우측 터미널창을 보면 4개의 조인트 위치를 움직이면서 확인 할 수 있다. 


4. 코드분석

위의 프로그램이 어떻게 동작하는지 코드를 분석해보자.

openmanipulator controller가 가제보 시뮬레이션으로 신호를 전송하는 파일은 다음과 같은 경로에 있다.

catkin_ws > src > open_manipulator > open_manipulator_control_gui > src > main_window.cpp

이러한 경로는 roslaunch <패키지 이름> <파일.launch> 에서 패키지 이름에 맞는 디렉토리를 확인해 보면 금방 찾을 수 있다.

소스코드를 보면 다음과 같이 짜여져 있으니 이를 참고해서 개발해보자!