(1) 젯슨보드에서 dynamixel_workbench_operators , dynamixel_workbench_controllers 패키지를 이용하여 로봇을 연구실을 1바퀴 회전하도록 원격제어해보시오. 이전에 작성한 카메라 패키지를 활용하여 카메라를 보면서 제어하시오.
(2) dynamixel_workbench_operators 는 PC에서 실행하고, dynamixel_workbench_controllers 패키지는 젯슨보드에서 실행하여 (1)번 과제를 수행하시오.
(3) dynamixel_workbench_operators , dynamixel_workbench_controllers 에서 정의된 토픽, 서비스, 파라미터의 종류를 조사하고 각각의 기능을 설명하시오. topic, service, parameter관련 ros2명령어를 이용하여 조사하라.
(4) rqt_graph를 통하여 각 노드(operators, controllers)사이에 전달되는 토픽을 파악하라.
(5) (4)번에서 파악한 토픽의 내용물을 자세히 설명하시오.
(6) wrapper class 가 무엇인가? |
1. 젯슨보드에서 dynamixel_workbench_operators , dynamixel_workbench_controllers 패키지를 이용하여 로봇을 연구실을 1바퀴 회전하도록 원격제어해보시오. 이전에 작성한 카메라 패키지를 활용하여 카메라를 보면서 제어하시오.
2. dynamixel_workbench_operators 는 PC에서 실행하고, dynamixel_workbench_controllers 패키지는 젯슨보드에서 실행하여 (1)번 과제를 수행하시오.
Ubuntu_24.04
3. dynamixel_workbench_operators , dynamixel_workbench_controllers 에서 정의된 토픽, 서비스,
파라미터의 종류를 조사하고 각각의 기능을 설명하시오. topic, service, parameter관련 ros2명령어를 이용하여
조사하라.
/dynamixel_controller
Subscribers
/cmd_vel
operator노드가 발행하는 속도명령을 받음.
/parameter_events
ROS 2의 시스템 토픽, 파라미터(설정값)이 변경될 때 발생하는 이벤트를 수신.
Publishers
/dynamixel_state
현재 연결된 다이너믹셀 모터들의 상세 상태를 통합해서 알려준다.
/joint_states
각 모터의 현재 각도, 속도, 힘 정보를 실시간으로 발행
/dynamixel_command
직접적인 하드웨어 명령을 내릴 때 사용하는 서비스
/dynamixel_workbench_operator
Subscribers
/parameter_events
ROS 2의 시스템 토픽, 파라미터(설정값)이 변경될 때 발생하는 이벤트를 수신.
Publishers
/cmd_vel
로봇의 이동 속도 명령을 발행
/parameter_events
파라미터 변경 사항을 다른 노드에 알림
/rosout
시스템 로그 메시지를 보냄
Service Servers ( /dynamixel_controller / /dynamixel_workbench_operator )
| /describe_parameters | 특정 파라미터의 타입(정수, 실수 등)과 설명, 값의 범위(최소/최대) 등 상세 정보를 알려준다. |
| /get_parameter_types | 요청한 파라미터들이 어떤 형식(bool, int64, string 등)인지 리스트로 반환 |
| /get_parameters | 가장 많이 쓰입니다. 특정 파라미터의 현재 설정값을 가져온다. |
| /list_parameters | 현재 이 노드가 가지고 있는 모든 파라미터의 이름 목록을 보여준다. |
| /set_parameters | 실행 중인 노드의 파라미터 값을 수정한다. |
| /set_parameters_atomically | 여러 개의 파라미터를 한 번에 수정함. |
토픽 / ros2 topic list
/cmd_vel
operator노드가 발행하는 속도명령을 받음.
/dynamixel_state
현재 연결된 다이너믹셀 모터들의 상세 상태를 통합해서 알려준다.
/joint_states
각 모터의 현재 각도, 속도, 힘 정보를 실시간으로 발행
/parameter_events
파라미터 변경 사항을 다른 노드에 알림
/rosout
시스템 로그 메시지를 보냄
서비스 / ros2 service list
| /describe_parameters | 특정 파라미터의 타입(정수, 실수 등)과 설명, 값의 범위(최소/최대) 등 상세 정보를 알려준다. |
| /get_parameter_types | 요청한 파라미터들이 어떤 형식(bool, int64, string 등)인지 리스트로 반환 |
| /get_parameters | 가장 많이 쓰입니다. 특정 파라미터의 현재 설정값을 가져온다. |
| /list_parameters | 현재 이 노드가 가지고 있는 모든 파라미터의 이름 목록을 보여준다. |
| /set_parameters | 실행 중인 노드의 파라미터 값을 수정한다. |
| /set_parameters_atomically | 여러 개의 파라미터를 한 번에 수정함. |
파라미터 / ros2 param list
dxl_read_period
다이내믹셀로부터 데이터를 읽어오는 주기를 설정(초 단위)
dxl_write_period
다이내믹셀에 명령(목표 위치 등)을 쓰는 주기를 설정
publish_period
토픽을 외부로 발행하는 주기를 결정
mobile_robot_config/radius_of_wheel : 로봇 바퀴의 반지름 값
mobile_robot_config/seperation_between_wheels : 양쪽 바퀴 사이의 거리
use_cmd_vel_topic
/cmd_vel 토픽을 통해 들어오는 속도 명령(선속도, 각속도)을 받아 로봇을 제어
use_joint_states_topic
모터의 상태 정보를 /joint_states 메시지로 발행
use_moveit
MoveIt(매니퓰레이션 소프트웨어) 인터페이스를 사용할지 여부
use_sim_time
시뮬레이션 환경의 시간 시스템을 사용할지 결정하는 ROS 2 공통 파라미터
4. rqt_graph를 통하여 각 노드(operators, controllers)사이에 전달되는 토픽을 파악하라.
노드
/dynamixel_controller
실제 모터 하드웨어를 제어하고 상태를 읽어오는 노드
/dynamixel_workbench_operator
사용자의 명령을 입력받아 컨트롤러에 전달하는 노드
/rqt_gui_py_node_13474
GUI를 통해 파라미터를 모니터링하거나 설정하는 도구 노드
토픽
/cmd_vel
속도명령을 받음.
/joint_states
각 모터의 현재 각도, 속도, 힘 정보를 실시간으로 발행
/dynamixel_state
현재 연결된 다이너믹셀 모터들의 상세 상태를 통합해서 알려줌
/parameter_events
파라미터 변경 사항을 다른 노드에 알림
/rosout
시스템 로그 메시지용 토픽
5. (4)번에서 파악한 토픽의 내용물을 자세히 설명하시오.
| 토픽 | 메시지 타 | 토픽 내용 |
| /cmd_vel | geometry_msgs/Twist | 로봇의 이동 속도 명령. 선속도/각속도 값이 x, y, z축 별로 포함된다. |
| /joint_states | sensor_msgs/JointState | 모터의 물리적 상태. 각 관절의 이름, 현재 위치(Position), 속도(Velocity), 모터에 걸리는 부하 또는 토크 (Effort)가 포함다. |
| /dynamixel_state | dynamixel_workbench_msgs/DynamixelStateList | 다이나믹셀 정보. 모터 ID, 모델 번호, 현재 전압(Present Voltage), 현재 모터 내부 온도(Present Temperature), 에러 상태(Error Code)등 데이터가 포함된다. |
| /parameter_events | rcl_interfaces/ParameterEvent | 노드의 설정값 변경 정보. 변경된 파라미터의 이름, 타입, 새로운 값 등이 포함된다. |
| /rosout | rcl_interfaces/Log | 시스템 로그. 디버그, 정보, 경고, 에러 메시지와 발생 시간 등이 포함된다. |
6. wrapper class 가 무엇인가?
다른 데이터 타입이나 자원(Pointer, Handle 등)을 멤버 변수로 감싸고,
그 위에 추가적인 기능이나 안전장치를 더한 클래스를 말한다.
래퍼 클래스를 사용하는 이유
자원(메모리, 파일, 뮤텍스 등)을 생성자에서 할당하고 소멸자에서 해제함으로써 자원 누수를 방지
서로 다른 용도의 데이터를 구분하기 위해 사용합니다.
ex) 똑같은 float이지만 '거리'와 '무게'를 서로 섞이지 않게 클래스로 분리
C++에서 가장 많이 쓰이는 래퍼 클래스 유형
스마트 포인터( std::unique_ptr, std::shared_ptr )
Raw Pointer를 감싸서 메모리 관리를 자동으로 해준다.
컨테이너 클래스( std::vector, std::string )
동적 배열이나 문자열(배열)을 감싸서 크기 조절, 메모리 할당 등을 알아서 처리해준다.