-
Notifications
You must be signed in to change notification settings - Fork 7
Description
The code that converts desired quantities from actuated axis to physical joints and measured quantities from physical joints to actuated axis seems only consider desired positions and measured position and velocities, see:
gz-sim-yarp-plugins/plugins/controlboard/src/ControlBoard.cpp
Lines 382 to 390 in 1372014
if (m_controlBoardData.ijointcoupling){ m_controlBoardData.ijointcoupling->convertFromPhysicalJointsToActuatedAxesPos(m_physicalJointsPositionBuffer, m_actuatedAxesPositionBuffer); m_controlBoardData.ijointcoupling->convertFromPhysicalJointsToActuatedAxesVel(m_physicalJointsPositionBuffer, m_physicalJointsVelocityBuffer, m_actuatedAxesVelocityBuffer); for (int i = 0; i < m_controlBoardData.actuatedAxes.size(); i++) { m_controlBoardData.actuatedAxes[i].commonJointProperties.position = m_actuatedAxesPositionBuffer[i]; m_controlBoardData.actuatedAxes[i].commonJointProperties.velocity = m_actuatedAxesVelocityBuffer[i]; } } gz-sim-yarp-plugins/plugins/controlboard/src/ControlBoard.cpp
Lines 472 to 481 in 1372014
for (int i = 0; i < m_controlBoardData.actuatedAxes.size(); i++) { m_actuatedAxesPositionBuffer[i] = m_controlBoardData.actuatedAxes[i].commonJointProperties.refPosition; } m_controlBoardData.ijointcoupling->convertFromActuatedAxesToPhysicalJointsPos(m_actuatedAxesPositionBuffer, m_physicalJointsPositionBuffer); for(auto i = 0; i < m_controlBoardData.physicalJoints.size(); i++) { m_controlBoardData.physicalJoints[i].commonJointProperties.refPosition = m_physicalJointsPositionBuffer[i]; }
So, clearly the VOCAB_CM_TORQUE
control mode is not supported for coupled joints. At the moment we should document this limitation, and ideally return an error if someone asks to set in torque a coupling joint. We could also try to understand if it make sense to support this (for example if it is supported in any physical robot) and if it exists a case in which it make sense to support this, implement it.