3
\author Shin'ichiro Nakaoka
6
#include "VirtualRobotPortHandler.h"
8
#include "Controller_impl.h"
11
using namespace OpenHRP;
12
using namespace OpenHRP::ControllerBridge;
16
template <typename TSrc>
17
void copyDblArraySeqToTimedDoubleSeq(const TSrc& src, int arraySize, TimedDoubleSeq& dest)
19
CORBA::ULong n = src.length();
20
CORBA::ULong m = n * arraySize;
22
CORBA::ULong destPos = 0;
23
for(CORBA::ULong i=0; i < n; ++i){
24
for(int j=0; j < arraySize; ++j){
25
dest.data[destPos++] = src[i][j];
30
template <typename TSrcSeq, typename TDestSeq>
34
DynamicsSimulator::LinkDataType toDynamicsSimulatorLinkDataType(DataTypeId id)
37
case JOINT_VALUE: return DynamicsSimulator::JOINT_VALUE;
38
case JOINT_VELOCITY: return DynamicsSimulator::JOINT_VELOCITY;
39
case JOINT_ACCELERATION: return DynamicsSimulator::JOINT_ACCELERATION;
40
case JOINT_TORQUE: return DynamicsSimulator::JOINT_TORQUE;
41
case EXTERNAL_FORCE: return DynamicsSimulator::EXTERNAL_FORCE;
42
case ABS_TRANSFORM: return DynamicsSimulator::ABS_TRANSFORM;
43
default: return DynamicsSimulator::INVALID_DATA_TYPE;
49
PortHandler::~PortHandler()
55
SensorStateOutPortHandler::SensorStateOutPortHandler(PortInfo& info)
56
: outPort(info.portName.c_str(), values)
58
dataTypeId = info.dataTypeId;
62
void SensorStateOutPortHandler::inputDataFromSimulator(Controller_impl* controller)
64
SensorState& state = controller->getCurrentSensorState();
68
values.data = state.q;
71
values.data = state.dq;
74
values.data = state.u;
77
copyDblArraySeqToTimedDoubleSeq(state.force, 6, values);
79
case RATE_GYRO_SENSOR:
80
copyDblArraySeqToTimedDoubleSeq(state.rateGyro, 3, values);
82
case ACCELERATION_SENSOR:
83
copyDblArraySeqToTimedDoubleSeq(state.accel, 3, values);
91
void SensorStateOutPortHandler::writeDataToPort()
97
LinkDataOutPortHandler::LinkDataOutPortHandler(PortInfo& info) :
98
outPort(info.portName.c_str(), value),
99
linkName(info.dataOwnerName)
101
linkDataType = toDynamicsSimulatorLinkDataType(info.dataTypeId);
105
void LinkDataOutPortHandler::inputDataFromSimulator(Controller_impl* controller)
107
DblSequence_var data = controller->getLinkDataFromSimulator(linkName, linkDataType);
112
void LinkDataOutPortHandler::writeDataToPort()
118
SensorDataOutPortHandler::SensorDataOutPortHandler(PortInfo& info) :
119
outPort(info.portName.c_str(), value),
120
sensorName(info.dataOwnerName)
126
void SensorDataOutPortHandler::inputDataFromSimulator(Controller_impl* controller)
128
DblSequence_var data = controller->getSensorDataFromSimulator(sensorName);
133
void SensorDataOutPortHandler::writeDataToPort()
139
ColorImageOutPortHandler::ColorImageOutPortHandler(PortInfo& info) :
140
outPort(info.portName.c_str(), image),
141
cameraId(info.dataOwnerId)
147
void ColorImageOutPortHandler::inputDataFromSimulator(Controller_impl* controller)
149
ImageData_var imageInput = controller->getCameraImageFromSimulator(cameraId);
150
image.data = imageInput->longData;
154
void ColorImageOutPortHandler::writeDataToPort()
160
GrayScaleImageOutPortHandler::GrayScaleImageOutPortHandler(PortInfo& info)
161
: outPort(info.portName.c_str(), image),
162
cameraId(info.dataOwnerId)
168
void GrayScaleImageOutPortHandler::inputDataFromSimulator(Controller_impl* controller)
170
ImageData_var imageInput = controller->getCameraImageFromSimulator(cameraId);
171
image.data = imageInput->octetData;
175
void GrayScaleImageOutPortHandler::writeDataToPort()
181
DepthImageOutPortHandler::DepthImageOutPortHandler(PortInfo& info) :
182
outPort(info.portName.c_str(), image),
183
cameraId(info.dataOwnerId)
189
void DepthImageOutPortHandler::inputDataFromSimulator(Controller_impl* controller)
191
ImageData_var imageInput = controller->getCameraImageFromSimulator(cameraId);
192
image.data = imageInput->floatData;
196
void DepthImageOutPortHandler::writeDataToPort()
202
JointDataSeqInPortHandler::JointDataSeqInPortHandler(PortInfo& info) :
203
inPort(info.portName.c_str(), values)
205
linkDataType = toDynamicsSimulatorLinkDataType(info.dataTypeId);
209
void JointDataSeqInPortHandler::outputDataToSimulator(Controller_impl* controller)
211
controller->flushJointDataSeqToSimulator(linkDataType);
215
void JointDataSeqInPortHandler::readDataFromPort(Controller_impl* controller)
219
DblSequence& data = controller->getJointDataSeqRef(linkDataType);
221
CORBA::ULong n = values.data.length();
223
for(CORBA::ULong i=0; i < n; ++i){
224
data[i] = values.data[i];