177 if (not
writer->sem.timed_wait(boost::posix_time::microsec_clock::universal_time() +
178 boost::posix_time::milliseconds(5)))
184 for (
auto& pair : this->
limb)
186 pair.second->nonRTDeltaT =
187 pair.second->rtStatusInNonRT.accumulateTime - pair.second->nonRTAccumulateTime;
188 pair.second->nonRTAccumulateTime = pair.second->rtStatusInNonRT.accumulateTime;
192 for (
auto& pair : this->
hands->hands)
194 pair.second->nonRTDeltaT =
195 pair.second->rtsInNonRT.accumulateTime - pair.second->nonRTAccumulateTime;
196 pair.second->nonRTAccumulateTime = pair.second->rtsInNonRT.accumulateTime;
203 unsigned int index = 0;
204 unsigned int indexJSC = 0;
205 for (
auto& pair : this->limb)
207 auto& arm = pair.second;
211 currentPose.head(3) = simox::math::mat4f_to_pos(arm->rtStatusInNonRT.currentPose);
212 currentPose.tail(4) = simox::math::mat4f_to_quat(arm->rtStatusInNonRT.currentPose)
215 writeData.currentPose + (
index * 7), currentPose.data(),
sizeof(
float) * 7);
216 std::memcpy(writeData.currentTwist + (
index * 6),
217 arm->rtStatusInNonRT.currentTwist.data(),
222 currentDesiredPose.head(3) =
223 simox::math::mat4f_to_pos(arm->rtStatusInNonRT.desiredPose);
224 currentDesiredPose.tail(4) =
225 simox::math::mat4f_to_quat(arm->rtStatusInNonRT.desiredPose)
227 std::memcpy(writeData.currentDesiredPose +
index * 7,
228 currentDesiredPose.data(),
232 std::memcpy(writeData.currentForceTorque + (
index * 6),
233 arm->rtStatusInNonRT.currentForceTorque.data(),
238 const unsigned int n = arm->rtStatusInNonRT.jointPosition.size();
240 std::memcpy(writeData.currentJointAngles + indexJSC,
241 arm->rtStatusInNonRT.jointPosition.data(),
243 std::memcpy(writeData.currentJointVelocities + indexJSC,
244 arm->rtStatusInNonRT.qvelFiltered.data(),
250 writeData.deltaTinSeconds = arm->nonRTDeltaT;
260 unsigned int index = 0;
261 for (
auto& [_, hand] : this->
hands->hands)
263 const unsigned int n = hand->targetNonRT.jointPosition.value().size();
265 std::memcpy(writeData.currentHandConfig +
index,
266 hand->targetNonRT.jointPosition->data(),
274 writeData.rtSafe = rtTargetSafe;
275 writeData.n_limbs = this->limb.size();
277 writer->updateNonLocking(writeData);
281 if (not rtTargetSafe)
288 if (not
writer->sem.timed_wait(boost::posix_time::microsec_clock::universal_time() +
289 boost::posix_time::milliseconds(5)))
296 reader->updateNonLocking(readData);
298 if (readData.initialized)
300 unsigned int index = 0;
301 unsigned int indexJSC = 0;
302 for (
auto& pair : this->limb)
304 auto& arm = pair.second;
309 desiredPose.data(), readData.desiredPose + (
index * 7),
sizeof(
float) * 7);
310 const Eigen::Vector3f& pos = desiredPose.head(3);
311 const Eigen::Vector4f& orientation = desiredPose.tail(4);
312 const Eigen::Matrix4f pose =
314 arm->nonRtConfig.desiredPose = pose;
315 std::memcpy(arm->nonRtConfig.desiredTwist.data(),
316 readData.desiredTwist + (
index * 6),
319 if (readData.useJointAngles)
322 const unsigned int n = arm->nonRtConfig.desiredNullspaceJointAngles->size();
324 std::memcpy(arm->nonRtConfig.desiredNullspaceJointAngles->data(),
325 readData.desiredJointAngles + indexJSC,
338 if (readData.initialized and this->hands)
340 unsigned int index = 0;
341 for (
auto& [_, hand] : this->
hands->hands)
343 const unsigned int n = hand->targetNonRT.jointPosition.value().size();
345 std::memcpy(hand->targetNonRT.jointPosition->data(),
346 readData.desiredHandConfig +
index,
352 if (readData.initialized)