hardware_interface가 어디서 어떻게 실행되는가?
정리필요
- dsr_bringup2_rviz.launch.py 실행 순서
- controller_manager pkg의 spawner실행
- dsr_controller
- joint_state_broadcaster
- 그러나 controller_manager pkg의 ros2_control_node가 실행되지 않아 wait중
- controller_manager pkg의 ros2_control_node 실행
- 실제 실행은 set_config_node가 제대로 실행 되어야 실행됨(emulator와 연결)
- 실행시 2개의 파라미터 받음
- dsr_controller.yaml : controller_manager에서 사용할 controller들 미리 정의
- robot description(urdf/xacro) : dsr_description2에 있는 robot_model.urdf.xacro확인
- 'm1013.urdf.xacro' 안에 'm1013.ros2_control.xacro'파일 include
- 'm1013.ros2_contro.xacro'파일 내부에서 'dsr_hardware2/DRHWInterface' plugin
- 이 plugin은 doosan-robot2 build과정에서 dsr_hardware2/src/dsr_hw_interface2.cpp에 작성된 내용에 따라 정의되고 plugin 수행됨
dsr_hardware2/src/dsr_hw_interface2.cpp 마지막 plugin수행 코드 - 이 내용은 해당 소스코드 뿐만 아니라 'CMakeLists.txt'와 그 안에 존재하는 'dsr_hardware2.xml'을 plugin참조한다는 내용으로 ros ws의 install/dsr_hardware2/lib/libdsr_hardware2.so 파일이 작성되는 것.
- 즉 실제 실행시 ros2_control_node가 xacro를 찾아 plugin하는 과정에서 DRHWInterface를 plugin하고 해당 내용은 dsr_hw_interface2.cpp 내부에 작성된 DRHWInterface class가 plugin되는 것.
- 'm1013.ros2_contro.xacro'파일 내부에서 'dsr_hardware2/DRHWInterface' plugin
- 'm1013.urdf.xacro' 안에 'm1013.ros2_control.xacro'파일 include
- ros2_control_node가 여러 controller들 + hardware_interface를 실행하게 되는 것이다.