gazebo에서 오픈매니퓰레이터 프로가 시뮬레이션을 실행하니 분해됩니다.

안녕하세요, 제가 ros를 이용해 gazebo에서 오픈매니퓰레이터 프로의 모델로 제가 원하는 운동을 구현하고자 합니다.

Ubuntu 18.04, ros melodic 환경에서 e-manual(OpenMANIPULATOR-P)에 나와있는대로 패키지들을 설치했습니다.

지금은 원하는 궤적 대로 움직이는데는 성공했고, 그 궤적을 움직일 때 조인트의 토크를 확인하려고 합니다.

그런데 sensor_msgs의 JointState에서 받아오는 effort 값들이 모두 0으로 나왔습니다.

그래서 패키지들을 분석한 결과, 'open_manipulator_p_simulations/open_manipulator_p_gazebo/config/arm_controller.yaml’에 정의된 컨트롤러가 position_controllers라는 것을 보고 이를 effort_controller로 아래와 같이 바꿨습니다.

joint1_position:
  type: effort_controllers/JointPositionController
  joint: joint1
  pid: {p: 100.0, i: 0.1, d: 1.0}

joint2_position:
  type: effort_controllers/JointPositionController
  joint: joint2
  pid: {p: 100.0, i: 0.1, d: 1.0}

joint3_position:
  type: effort_controllers/JointPositionController
  joint: joint3
  pid: {p: 100.0, i: 0.1, d: 1.0}

joint4_position:
  type: effort_controllers/JointPositionController
  joint: joint4
  pid: {p: 100.0, i: 0.1, d: 1.0}

joint5_position:
  type: effort_controllers/JointPositionController
  joint: joint5
  pid: {p: 100.0, i: 0.1, d: 1.0}

joint6_position:
  type: effort_controllers/JointPositionController
  joint: joint6
  pid: {p: 100.0, i: 0.1, d: 1.0}

그리고 그에 따라 'open_manipulator_p_simulations/open_manipulator_p_gazebo/urdf/open_manipulator_p.transmission.xacro도 아래와 같이 바꿨습니다.

<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">

  <!-- Transmission macro -->
  <xacro:macro name="SimpleTransmissionPosition" params="joint n">
    <transmission name="tran${n}">
      <type>transmission_interface/SimpleTransmission</type>
      <joint name="${joint}">
        <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
      </joint>
      <actuator name="motor${n}">
        <mechanicalReduction>1</mechanicalReduction>
      </actuator>
    </transmission>
  </xacro:macro>

  <!-- Transmission macro -->
  <xacro:macro name="SimpleTransmissionEffort" params="joint n">
    <transmission name="tran${n}">
      <type>transmission_interface/SimpleTransmission</type>
      <joint name="${joint}">
        <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
      </joint>
      <actuator name="motor${n}">
        <mechanicalReduction>1</mechanicalReduction>
      </actuator>
    </transmission>
  </xacro:macro>

  <!-- Transmission 1 -->
  <xacro:SimpleTransmissionEffort n="1" joint="joint1" />

  <!-- Transmission 2 -->
  <xacro:SimpleTransmissionEffort n="2" joint="joint2" />

  <!-- Transmission 3 -->
  <xacro:SimpleTransmissionEffort n="3" joint="joint3" />

  <!-- Transmission 4 -->
  <xacro:SimpleTransmissionEffort n="4" joint="joint4" />

  <!-- Transmission 5 -->
  <xacro:SimpleTransmissionEffort n="5" joint="joint5" />

  <!-- Transmission 6 -->
  <xacro:SimpleTransmissionEffort n="6" joint="joint6" />

</robot>

위와 같이 컨트롤러를 변경하고 gazebo 시뮬레이션을 실행했는데, 로봇이 아래와 같이 분해됐습니다.

Screenshot from 2023-09-01 11-47-34

제가 건드린 부분들 중에서 어디가 잘못됐길래 이렇게 된건지 도무지 알 수가 없어서 도움을 요청합니다.

그리고 만약 로봇이 움직일 때 조인트 토크를 확인할 수 있는 다른 방법이 존재할 경우, 이를 알려주신다면 감사하겠습니다.