chore: remove branch-only tests and generated artifacts
12
.gitignore
vendored
@ -7,3 +7,15 @@
|
||||
/third_party/osqp/
|
||||
/third_party/OsqpEigen/
|
||||
/output
|
||||
|
||||
# Generated development artifacts
|
||||
compile_commands.json
|
||||
MUJOCO_LOG.TXT
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*.log
|
||||
|
||||
# Generated plots and vision debug output
|
||||
/data/*.png
|
||||
/data/*.svg
|
||||
/python/vision_servo/red_point.png
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
Fri Jul 24 15:39:05 2026
|
||||
ERROR: could not create window
|
||||
|
||||
Fri Jul 24 15:40:37 2026
|
||||
ERROR: could not create window
|
||||
|
||||
@ -20,59 +20,3 @@ add_library(
|
||||
)
|
||||
|
||||
install(TARGETS ume_legacy_controller LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(ume_legacy_controller_golden_test
|
||||
tests/ume_legacy_controller_golden_test.cpp
|
||||
)
|
||||
add_executable(pinocchio_ume_legacy_model_adapter_test
|
||||
tests/pinocchio_ume_legacy_model_adapter_test.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(ume_legacy_controller_golden_test
|
||||
PRIVATE
|
||||
cmvr_es::algorithms::ume_legacy
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
target_link_libraries(pinocchio_ume_legacy_model_adapter_test
|
||||
PRIVATE
|
||||
cmvr_es::algorithms::ume_legacy
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
|
||||
foreach(_ume_legacy_test_target
|
||||
ume_legacy_controller_golden_test
|
||||
pinocchio_ume_legacy_model_adapter_test)
|
||||
target_compile_definitions(${_ume_legacy_test_target}
|
||||
PRIVATE
|
||||
CMVR_UME_FIXED_MODEL_PATH="${CMAKE_SOURCE_DIR}/model/ume/v6_bimanual/robot.xml"
|
||||
CMVR_UME_FLOATING_MODEL_PATH="${CMAKE_SOURCE_DIR}/model/ume/v6_imu/robot.xml"
|
||||
)
|
||||
add_test(
|
||||
NAME ${_ume_legacy_test_target}
|
||||
COMMAND ${_ume_legacy_test_target}
|
||||
)
|
||||
endforeach()
|
||||
|
||||
set(_ume_legacy_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _ume_legacy_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
|
||||
foreach(_ume_legacy_test_target
|
||||
ume_legacy_controller_golden_test
|
||||
pinocchio_ume_legacy_model_adapter_test)
|
||||
set_tests_properties(${_ume_legacy_test_target} PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_ume_legacy_test_environment}"
|
||||
)
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
@ -1,392 +0,0 @@
|
||||
#include "pinocchio_ume_legacy_model_adapter.h"
|
||||
|
||||
#include <array>
|
||||
#include <cmath>
|
||||
#include <cstddef>
|
||||
#include <limits>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#ifndef CMVR_UME_FIXED_MODEL_PATH
|
||||
#error "CMVR_UME_FIXED_MODEL_PATH must identify the deployed fixed UME MJCF"
|
||||
#endif
|
||||
|
||||
#ifndef CMVR_UME_FLOATING_MODEL_PATH
|
||||
#error "CMVR_UME_FLOATING_MODEL_PATH must identify the deployed floating UME MJCF"
|
||||
#endif
|
||||
|
||||
namespace cmvr::ume_legacy {
|
||||
namespace {
|
||||
|
||||
constexpr double kNumericalTolerance = 1e-10;
|
||||
|
||||
PinocchioUmeLegacyModelAdapter makeAdapter()
|
||||
{
|
||||
return PinocchioUmeLegacyModelAdapter(
|
||||
CMVR_UME_FIXED_MODEL_PATH,
|
||||
CMVR_UME_FLOATING_MODEL_PATH);
|
||||
}
|
||||
|
||||
BimanualModelState makeGoldenState(
|
||||
const PinocchioUmeLegacyModelAdapter& adapter)
|
||||
{
|
||||
BimanualModelState state;
|
||||
state.world_from_imu =
|
||||
adapter.contract().base_from_imu;
|
||||
state.right_position_rad =
|
||||
{0.1, -0.2, 0.3, -0.4,
|
||||
0.2, -0.1, 0.15, -0.05};
|
||||
state.left_position_rad =
|
||||
{-0.1, 0.2, -0.3, 0.4,
|
||||
-0.2, 0.1, -0.15, 0.05};
|
||||
return state;
|
||||
}
|
||||
|
||||
template <std::size_t Size>
|
||||
void expectFinite(const std::array<double, Size>& values)
|
||||
{
|
||||
for (std::size_t index = 0; index < Size; ++index) {
|
||||
EXPECT_TRUE(std::isfinite(values[index]))
|
||||
<< "index " << index;
|
||||
}
|
||||
}
|
||||
|
||||
template <std::size_t Size>
|
||||
void expectNear(
|
||||
const std::array<double, Size>& actual,
|
||||
const std::array<double, Size>& expected,
|
||||
double tolerance = kNumericalTolerance)
|
||||
{
|
||||
for (std::size_t index = 0; index < Size; ++index) {
|
||||
EXPECT_NEAR(actual[index], expected[index], tolerance)
|
||||
<< "index " << index;
|
||||
}
|
||||
}
|
||||
|
||||
Transform4x4RowMajor multiplyTransforms(
|
||||
const Transform4x4RowMajor& left,
|
||||
const Transform4x4RowMajor& right)
|
||||
{
|
||||
Transform4x4RowMajor result{};
|
||||
for (std::size_t row = 0; row < 4; ++row) {
|
||||
for (std::size_t column = 0; column < 4; ++column) {
|
||||
for (std::size_t inner = 0; inner < 4; ++inner) {
|
||||
result[row * 4 + column] +=
|
||||
left[row * 4 + inner] *
|
||||
right[inner * 4 + column];
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Transform4x4RowMajor makeNoncommutingWorldFromBase()
|
||||
{
|
||||
constexpr double roll = 0.2;
|
||||
constexpr double pitch = -0.35;
|
||||
constexpr double yaw = 0.47;
|
||||
const double sr = std::sin(roll);
|
||||
const double cr = std::cos(roll);
|
||||
const double sp = std::sin(pitch);
|
||||
const double cp = std::cos(pitch);
|
||||
const double sy = std::sin(yaw);
|
||||
const double cy = std::cos(yaw);
|
||||
return {
|
||||
cy * cp,
|
||||
cy * sp * sr - sy * cr,
|
||||
cy * sp * cr + sy * sr,
|
||||
0.4,
|
||||
sy * cp,
|
||||
sy * sp * sr + cy * cr,
|
||||
sy * sp * cr - cy * sr,
|
||||
-0.1,
|
||||
-sp,
|
||||
cp * sr,
|
||||
cp * cr,
|
||||
0.8,
|
||||
0.0, 0.0, 0.0, 1.0};
|
||||
}
|
||||
|
||||
TEST(PinocchioUmeLegacyModelAdapterTest,
|
||||
LoadsOriginalMjcfWithoutGeometryAssetsAndFreezesContract)
|
||||
{
|
||||
const auto adapter = makeAdapter();
|
||||
const auto& contract = adapter.contract();
|
||||
|
||||
EXPECT_EQ(contract.fixed_nq, 16U);
|
||||
EXPECT_EQ(contract.fixed_nv, 16U);
|
||||
EXPECT_EQ(contract.floating_nq, 23U);
|
||||
EXPECT_EQ(contract.floating_nv, 22U);
|
||||
EXPECT_EQ(adapter.fixedModelPath(), CMVR_UME_FIXED_MODEL_PATH);
|
||||
EXPECT_EQ(
|
||||
adapter.floatingModelPath(),
|
||||
CMVR_UME_FLOATING_MODEL_PATH);
|
||||
|
||||
// This transform comes from the original floating model's imu site.
|
||||
// Pinocchio buildModel parses it without loading STL geometry.
|
||||
const Transform4x4RowMajor expected_base_from_imu{
|
||||
0.0, 0.0, -1.0, -0.0298,
|
||||
0.0, 1.0, 0.0, 0.0,
|
||||
1.0, 0.0, 0.0, -0.229564,
|
||||
0.0, 0.0, 0.0, 1.0};
|
||||
expectNear(
|
||||
contract.base_from_imu,
|
||||
expected_base_from_imu,
|
||||
1e-5);
|
||||
}
|
||||
|
||||
TEST(PinocchioUmeLegacyModelAdapterTest,
|
||||
FloatingBaseRneaProducesFiniteFrozenJointEfforts)
|
||||
{
|
||||
const auto adapter = makeAdapter();
|
||||
const auto state = makeGoldenState(adapter);
|
||||
JointVector right{};
|
||||
JointVector left{};
|
||||
|
||||
ASSERT_TRUE(
|
||||
adapter.computeGravityCompensation(
|
||||
state, right, left));
|
||||
expectFinite(right);
|
||||
expectFinite(left);
|
||||
expectNear(
|
||||
right,
|
||||
{4.2579946000243867,
|
||||
-3.101883528283977,
|
||||
5.8349126697703291,
|
||||
-3.2335040596068012,
|
||||
0.54313804667559806,
|
||||
-0.28419763993223052,
|
||||
0.075420409617272505,
|
||||
-0.0050792810993999194});
|
||||
expectNear(
|
||||
left,
|
||||
{-4.2570142852347947,
|
||||
3.1002195124462104,
|
||||
-5.8319486672094438,
|
||||
3.2334454894750602,
|
||||
-0.54274278459746039,
|
||||
0.28419800074629464,
|
||||
-0.075420524366616282,
|
||||
0.0050792800399334561});
|
||||
}
|
||||
|
||||
TEST(PinocchioUmeLegacyModelAdapterTest,
|
||||
ImuDerivedBaseOrientationReversesGravityUnderHalfTurn)
|
||||
{
|
||||
const auto adapter = makeAdapter();
|
||||
auto state = makeGoldenState(adapter);
|
||||
JointVector upright_right{};
|
||||
JointVector upright_left{};
|
||||
ASSERT_TRUE(adapter.computeGravityCompensation(
|
||||
state, upright_right, upright_left));
|
||||
|
||||
const Transform4x4RowMajor world_from_base_half_turn_x{
|
||||
1.0, 0.0, 0.0, 0.0,
|
||||
0.0, -1.0, 0.0, 0.0,
|
||||
0.0, 0.0, -1.0, 0.0,
|
||||
0.0, 0.0, 0.0, 1.0};
|
||||
state.world_from_imu = multiplyTransforms(
|
||||
world_from_base_half_turn_x,
|
||||
adapter.contract().base_from_imu);
|
||||
|
||||
JointVector inverted_right{};
|
||||
JointVector inverted_left{};
|
||||
ASSERT_TRUE(adapter.computeGravityCompensation(
|
||||
state, inverted_right, inverted_left));
|
||||
for (std::size_t index = 0; index < kArmDof; ++index) {
|
||||
EXPECT_NEAR(
|
||||
inverted_right[index],
|
||||
-upright_right[index],
|
||||
kNumericalTolerance)
|
||||
<< "right joint index " << index;
|
||||
EXPECT_NEAR(
|
||||
inverted_left[index],
|
||||
-upright_left[index],
|
||||
kNumericalTolerance)
|
||||
<< "left joint index " << index;
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PinocchioUmeLegacyModelAdapterTest,
|
||||
NoncommutingImuPoseAndAsymmetricVelocitiesMatchFrozenRnea)
|
||||
{
|
||||
const auto adapter = makeAdapter();
|
||||
auto state = makeGoldenState(adapter);
|
||||
state.world_from_imu = multiplyTransforms(
|
||||
makeNoncommutingWorldFromBase(),
|
||||
adapter.contract().base_from_imu);
|
||||
state.right_velocity_rad_s =
|
||||
{0.7, -0.4, 0.2, -0.1,
|
||||
1.1, -0.8, 0.5, -0.3};
|
||||
state.left_velocity_rad_s =
|
||||
{-0.6, 0.9, -0.2, 0.4,
|
||||
-1.0, 0.7, -0.5, 0.25};
|
||||
|
||||
JointVector right{};
|
||||
JointVector left{};
|
||||
ASSERT_TRUE(adapter.computeGravityCompensation(
|
||||
state, right, left));
|
||||
expectFinite(right);
|
||||
expectFinite(left);
|
||||
expectNear(
|
||||
right,
|
||||
{2.080988418159027,
|
||||
-1.3277143244666021,
|
||||
2.3194639604892364,
|
||||
-2.0699331198781317,
|
||||
0.40716561983947641,
|
||||
-0.20631486209184946,
|
||||
0.19335176308712126,
|
||||
-0.01319194690287678});
|
||||
expectNear(
|
||||
left,
|
||||
{-5.6976332776660232,
|
||||
2.9915426497221254,
|
||||
-2.5700109870406949,
|
||||
2.1379083447512071,
|
||||
-0.36441212045948712,
|
||||
0.19226687457105307,
|
||||
-0.085601264411386338,
|
||||
0.0065129700338426369});
|
||||
}
|
||||
|
||||
TEST(PinocchioUmeLegacyModelAdapterTest,
|
||||
FixedModelRotationalProjectionMatchesFrozenValues)
|
||||
{
|
||||
const auto adapter = makeAdapter();
|
||||
const auto state = makeGoldenState(adapter);
|
||||
RawHapticFeedback feedback;
|
||||
feedback.shoulder_moment = {0.5, -0.2, 0.3};
|
||||
feedback.elbow_effort = 1.2;
|
||||
feedback.wrist_moment = {-0.4, 0.1, 0.6};
|
||||
feedback.gripper_effort = -0.7;
|
||||
|
||||
ProjectedHapticEffort right{};
|
||||
ASSERT_TRUE(adapter.projectHapticFeedback(
|
||||
state, ArmSide::Right, feedback, right));
|
||||
expectFinite(right.shoulder_joint_torque);
|
||||
expectFinite(right.wrist_joint_torque);
|
||||
expectNear(
|
||||
right.shoulder_joint_torque,
|
||||
{-0.5,
|
||||
-0.12674237993402607,
|
||||
-0.30915027509149773});
|
||||
expectNear(
|
||||
right.wrist_joint_torque,
|
||||
{-0.065872923184419674,
|
||||
-0.028130723042130143,
|
||||
-0.72743566625468636});
|
||||
EXPECT_DOUBLE_EQ(right.elbow_effort, feedback.elbow_effort);
|
||||
EXPECT_DOUBLE_EQ(
|
||||
right.gripper_effort,
|
||||
feedback.gripper_effort);
|
||||
|
||||
ProjectedHapticEffort left{};
|
||||
ASSERT_TRUE(adapter.projectHapticFeedback(
|
||||
state, ArmSide::Left, feedback, left));
|
||||
expectFinite(left.shoulder_joint_torque);
|
||||
expectFinite(left.wrist_joint_torque);
|
||||
expectNear(
|
||||
left.shoulder_joint_torque,
|
||||
{-0.5,
|
||||
-0.36032671657345572,
|
||||
0.083245914753940151});
|
||||
expectNear(
|
||||
left.wrist_joint_torque,
|
||||
{-0.13497315246130309,
|
||||
0.15764759010789803,
|
||||
-0.70779204949804098});
|
||||
EXPECT_DOUBLE_EQ(left.elbow_effort, feedback.elbow_effort);
|
||||
EXPECT_DOUBLE_EQ(
|
||||
left.gripper_effort,
|
||||
feedback.gripper_effort);
|
||||
}
|
||||
|
||||
TEST(PinocchioUmeLegacyModelAdapterTest,
|
||||
RejectsNonRigidOrNonFiniteInputsAndZerosOutputs)
|
||||
{
|
||||
const auto adapter = makeAdapter();
|
||||
auto state = makeGoldenState(adapter);
|
||||
JointVector right;
|
||||
JointVector left;
|
||||
right.fill(1.0);
|
||||
left.fill(1.0);
|
||||
|
||||
state.world_from_imu = {};
|
||||
EXPECT_FALSE(adapter.computeGravityCompensation(
|
||||
state, right, left));
|
||||
expectNear(right, JointVector{});
|
||||
expectNear(left, JointVector{});
|
||||
|
||||
state = makeGoldenState(adapter);
|
||||
state.right_position_rad[3] =
|
||||
std::numeric_limits<double>::quiet_NaN();
|
||||
right.fill(1.0);
|
||||
left.fill(1.0);
|
||||
EXPECT_FALSE(adapter.computeGravityCompensation(
|
||||
state, right, left));
|
||||
expectNear(right, JointVector{});
|
||||
expectNear(left, JointVector{});
|
||||
|
||||
state = makeGoldenState(adapter);
|
||||
RawHapticFeedback feedback;
|
||||
feedback.shoulder_moment[1] =
|
||||
std::numeric_limits<double>::infinity();
|
||||
ProjectedHapticEffort projected;
|
||||
projected.elbow_effort = 1.0;
|
||||
EXPECT_FALSE(adapter.projectHapticFeedback(
|
||||
state, ArmSide::Right, feedback, projected));
|
||||
expectNear(
|
||||
projected.shoulder_joint_torque,
|
||||
Vector3{});
|
||||
expectNear(projected.wrist_joint_torque, Vector3{});
|
||||
EXPECT_DOUBLE_EQ(projected.elbow_effort, 0.0);
|
||||
EXPECT_DOUBLE_EQ(projected.gripper_effort, 0.0);
|
||||
|
||||
feedback = {};
|
||||
projected.elbow_effort = 1.0;
|
||||
EXPECT_FALSE(adapter.projectHapticFeedback(
|
||||
state,
|
||||
static_cast<ArmSide>(99),
|
||||
feedback,
|
||||
projected));
|
||||
expectNear(
|
||||
projected.shoulder_joint_torque,
|
||||
Vector3{});
|
||||
expectNear(projected.wrist_joint_torque, Vector3{});
|
||||
EXPECT_DOUBLE_EQ(projected.elbow_effort, 0.0);
|
||||
EXPECT_DOUBLE_EQ(projected.gripper_effort, 0.0);
|
||||
}
|
||||
|
||||
TEST(PinocchioUmeLegacyModelAdapterTest,
|
||||
MissingModelFailsAtConstruction)
|
||||
{
|
||||
EXPECT_THROW(
|
||||
PinocchioUmeLegacyModelAdapter(
|
||||
"/definitely/missing/ume_fixed.xml",
|
||||
CMVR_UME_FLOATING_MODEL_PATH),
|
||||
std::runtime_error);
|
||||
}
|
||||
|
||||
TEST(PinocchioUmeLegacyModelAdapterTest,
|
||||
RejectsModelRoleSwapEvenThoughBothMjcfFilesParse)
|
||||
{
|
||||
try {
|
||||
PinocchioUmeLegacyModelAdapter adapter(
|
||||
CMVR_UME_FLOATING_MODEL_PATH,
|
||||
CMVR_UME_FIXED_MODEL_PATH);
|
||||
(void)adapter;
|
||||
FAIL() << "swapped fixed/floating models were accepted";
|
||||
} catch (const std::runtime_error& error) {
|
||||
EXPECT_NE(
|
||||
std::string(error.what()).find(
|
||||
"UME fixed MJCF contract violation: "
|
||||
"expected nq/nv/njoints 16/16/17"),
|
||||
std::string::npos);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::ume_legacy
|
||||
@ -1,216 +0,0 @@
|
||||
#include "ume_legacy_controller.h"
|
||||
#include "ume_legacy_model_adapter.h"
|
||||
|
||||
#include <array>
|
||||
#include <cmath>
|
||||
#include <cstddef>
|
||||
#include <limits>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace cmvr::ume_legacy {
|
||||
namespace {
|
||||
|
||||
constexpr double kTolerance = 1e-12;
|
||||
|
||||
void expectJointVectorNear(
|
||||
const JointVector& actual,
|
||||
const JointVector& expected,
|
||||
double tolerance = kTolerance)
|
||||
{
|
||||
for (std::size_t index = 0; index < kArmDof; ++index) {
|
||||
EXPECT_NEAR(actual[index], expected[index], tolerance)
|
||||
<< "joint index " << index;
|
||||
}
|
||||
}
|
||||
|
||||
TEST(UmeLegacyControllerGoldenTest,
|
||||
OriginalTuningAndFrictionMatchPythonOracle)
|
||||
{
|
||||
const auto tuning = originalTuning();
|
||||
EXPECT_DOUBLE_EQ(tuning.friction_coefficient[0], 1.6);
|
||||
EXPECT_DOUBLE_EQ(tuning.friction_coefficient[4], 0.032);
|
||||
EXPECT_DOUBLE_EQ(tuning.feedback_limit_dm4340_nm, 4.0);
|
||||
EXPECT_DOUBLE_EQ(tuning.feedback_limit_dm4310_nm, 1.0);
|
||||
|
||||
const JointVector velocity{
|
||||
-1.0, -0.1, 0.0, 2.0 * std::acos(-1.0) / 180.0,
|
||||
-10.0, -1.0, 1.0, 10.0};
|
||||
const JointVector expected{
|
||||
-0.4, -0.16000000000000003, 0.0,
|
||||
0.055850536063818547,
|
||||
-0.1, -0.032, 0.032, 0.1};
|
||||
|
||||
expectJointVectorNear(
|
||||
frictionCompensation(velocity, tuning),
|
||||
expected);
|
||||
}
|
||||
|
||||
TEST(UmeLegacyControllerGoldenTest,
|
||||
StictionUsesStrictLegacyThresholds)
|
||||
{
|
||||
const auto tuning = originalTuning();
|
||||
const double minimum =
|
||||
tuning.stiction_threshold_min_rad_s[0];
|
||||
const double maximum =
|
||||
tuning.stiction_threshold_max_rad_s[0];
|
||||
const JointVector at_threshold{
|
||||
minimum,
|
||||
-minimum,
|
||||
maximum,
|
||||
-maximum,
|
||||
0.0, 0.0, 0.0, 0.0};
|
||||
expectJointVectorNear(
|
||||
stictionCompensation(at_threshold, tuning),
|
||||
JointVector{});
|
||||
|
||||
const JointVector strictly_inside{
|
||||
2.0 * minimum,
|
||||
-2.0 * minimum,
|
||||
std::nextafter(
|
||||
minimum, std::numeric_limits<double>::infinity()),
|
||||
std::nextafter(maximum, 0.0),
|
||||
2.0 * minimum,
|
||||
-2.0 * minimum,
|
||||
std::nextafter(
|
||||
minimum, std::numeric_limits<double>::infinity()),
|
||||
std::nextafter(maximum, 0.0)};
|
||||
expectJointVectorNear(
|
||||
stictionCompensation(strictly_inside, tuning),
|
||||
{0.5, -0.5, 0.5, 0.5,
|
||||
0.0, 0.0, 0.0, 0.0});
|
||||
}
|
||||
|
||||
TEST(UmeLegacyControllerGoldenTest,
|
||||
FeedbackScaleMatchesLegacyNormAndTanhGoldenValues)
|
||||
{
|
||||
const auto tuning = originalTuning();
|
||||
EXPECT_NEAR(
|
||||
feedbackScale(0.0, tuning),
|
||||
0.20680448412090907,
|
||||
kTolerance);
|
||||
EXPECT_DOUBLE_EQ(
|
||||
feedbackScale(tuning.feedback_error_tolerance_rad, tuning),
|
||||
0.25);
|
||||
EXPECT_NEAR(
|
||||
feedbackScale(0.05, tuning),
|
||||
0.32861047013244982,
|
||||
kTolerance);
|
||||
EXPECT_NEAR(
|
||||
feedbackScale(-0.2, tuning),
|
||||
0.48734517579834447,
|
||||
kTolerance);
|
||||
}
|
||||
|
||||
TEST(UmeLegacyControllerGoldenTest,
|
||||
CompleteRightSideCommandMatchesPythonGoldenVector)
|
||||
{
|
||||
SideControlInput input;
|
||||
input.side = ArmSide::Right;
|
||||
input.joint_velocity_rad_s = {
|
||||
-1.0, -0.1, 0.0, 2.0 * std::acos(-1.0) / 180.0,
|
||||
-10.0, -1.0, 1.0, 10.0};
|
||||
input.gravity_compensation_nm =
|
||||
{0.5, -0.5, 1.0, -1.0,
|
||||
0.25, -0.25, 0.75, -0.75};
|
||||
input.projected_haptic.shoulder_joint_torque =
|
||||
{1.2, -3.0, 10.0};
|
||||
input.projected_haptic.elbow_effort = 2.0;
|
||||
input.projected_haptic.wrist_joint_torque =
|
||||
{0.5, -2.0, 5.0};
|
||||
input.projected_haptic.gripper_effort = 3.0;
|
||||
input.tracking_error.shoulder_rotation = {0.0, 0.0, 0.0};
|
||||
input.tracking_error.elbow =
|
||||
originalTuning().feedback_error_tolerance_rad;
|
||||
input.tracking_error.wrist_rotation = {0.03, 0.04, 0.0};
|
||||
input.tracking_error.gripper = -0.2;
|
||||
|
||||
const auto output = computeSideCommand(input);
|
||||
|
||||
expectJointVectorNear(
|
||||
output.friction_compensation_nm,
|
||||
{-0.4, -0.16000000000000003, 0.0,
|
||||
0.055850536063818547,
|
||||
-0.1, -0.032, 0.032, 0.1});
|
||||
expectJointVectorNear(
|
||||
output.stiction_compensation_nm,
|
||||
{0.0, -0.5, 0.0, 0.5,
|
||||
0.0, 0.0, 0.0, 0.0});
|
||||
expectJointVectorNear(
|
||||
output.feedforward_without_haptic_nm,
|
||||
{0.099999999999999978, -1.1600000000000001,
|
||||
1.0, -0.44414946393618149,
|
||||
0.14999999999999999, -0.28200000000000003,
|
||||
0.78200000000000003, -0.65000000000000002});
|
||||
expectJointVectorNear(
|
||||
output.signed_interaction_nm,
|
||||
{1.2, -3.0, 10.0, 2.0,
|
||||
0.5, -2.0, 5.0, -3.0});
|
||||
expectJointVectorNear(
|
||||
output.limited_feedback_nm,
|
||||
{0.24816538094509089, -0.62041345236272716,
|
||||
2.0680448412090908, 0.5,
|
||||
0.16430523506622491, -0.65722094026489963,
|
||||
1.0, -1.0});
|
||||
expectJointVectorNear(
|
||||
output.command_torque_nm,
|
||||
{-0.14816538094509091, -0.53958654763727298,
|
||||
-1.0680448412090908, -0.94414946393618149,
|
||||
-0.014305235066224914, 0.37522094026489961,
|
||||
-0.21799999999999997, 0.34999999999999998});
|
||||
}
|
||||
|
||||
TEST(UmeLegacyControllerGoldenTest,
|
||||
LeftAndRightScalarSignsAndGroupLimitsArePreserved)
|
||||
{
|
||||
SideControlInput input;
|
||||
input.projected_haptic.shoulder_joint_torque =
|
||||
{100.0, -100.0, 100.0};
|
||||
input.projected_haptic.elbow_effort = 100.0;
|
||||
input.projected_haptic.wrist_joint_torque =
|
||||
{100.0, -100.0, 100.0};
|
||||
input.projected_haptic.gripper_effort = 100.0;
|
||||
input.tracking_error.shoulder_rotation = {10.0, 0.0, 0.0};
|
||||
input.tracking_error.elbow = 10.0;
|
||||
input.tracking_error.wrist_rotation = {10.0, 0.0, 0.0};
|
||||
input.tracking_error.gripper = 10.0;
|
||||
|
||||
input.side = ArmSide::Right;
|
||||
const auto right = computeSideCommand(input);
|
||||
expectJointVectorNear(
|
||||
right.signed_interaction_nm,
|
||||
{100.0, -100.0, 100.0, 100.0,
|
||||
100.0, -100.0, 100.0, -100.0});
|
||||
expectJointVectorNear(
|
||||
right.command_torque_nm,
|
||||
{-4.0, 4.0, -4.0, -4.0,
|
||||
-1.0, 1.0, -1.0, 1.0});
|
||||
|
||||
input.side = ArmSide::Left;
|
||||
const auto left = computeSideCommand(input);
|
||||
expectJointVectorNear(
|
||||
left.signed_interaction_nm,
|
||||
{100.0, -100.0, 100.0, -100.0,
|
||||
100.0, -100.0, 100.0, 100.0});
|
||||
expectJointVectorNear(
|
||||
left.command_torque_nm,
|
||||
{-4.0, 4.0, -4.0, 4.0,
|
||||
-1.0, 1.0, -1.0, -1.0});
|
||||
}
|
||||
|
||||
TEST(UmeLegacyControllerGoldenTest,
|
||||
FeedbackClipDoesNotClampOtherFeedforwardTerms)
|
||||
{
|
||||
SideControlInput input;
|
||||
input.gravity_compensation_nm =
|
||||
{50.0, -50.0, 0.0, 0.0, 0.0, 0.0, 20.0, -20.0};
|
||||
const auto output = computeSideCommand(input);
|
||||
|
||||
EXPECT_DOUBLE_EQ(output.command_torque_nm[0], 50.0);
|
||||
EXPECT_DOUBLE_EQ(output.command_torque_nm[1], -50.0);
|
||||
EXPECT_DOUBLE_EQ(output.command_torque_nm[6], 20.0);
|
||||
EXPECT_DOUBLE_EQ(output.command_torque_nm[7], -20.0);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::ume_legacy
|
||||
@ -28,20 +28,3 @@ target_link_libraries(common PUBLIC
|
||||
|
||||
add_library(cmvr_es::common ALIAS common)
|
||||
install(TARGETS common LIBRARY DESTINATION lib)
|
||||
|
||||
#add_executable(image_display_test
|
||||
# utils/visualization/image_display_test.cpp
|
||||
#)
|
||||
#
|
||||
#target_link_libraries(image_display_test
|
||||
# PRIVATE
|
||||
# cmvr_es::common
|
||||
# cmvr_es::perception
|
||||
# cmvr_es::device::realsense_camera
|
||||
# cmvr_es::proto
|
||||
# glog
|
||||
# gtest
|
||||
# gtest_main
|
||||
# pthread
|
||||
#)
|
||||
#
|
||||
|
||||
@ -13,26 +13,3 @@ target_link_libraries(logging PUBLIC
|
||||
add_library(cmvr_es::logging ALIAS logging)
|
||||
|
||||
install(TARGETS logging ARCHIVE DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(logger_test
|
||||
tests/logger_test.cpp
|
||||
)
|
||||
target_link_libraries(logger_test PRIVATE
|
||||
cmvr_es::logging
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(NAME logger_test COMMAND logger_test)
|
||||
set(_logger_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}")
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _logger_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(logger_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_logger_test_environment}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -1,93 +0,0 @@
|
||||
#include "common/base/logging/logger.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <iterator>
|
||||
#include <string>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <unistd.h>
|
||||
|
||||
namespace cmvr::logging {
|
||||
namespace {
|
||||
|
||||
class LoggerTest : public testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
std::array<char, 64> pattern{};
|
||||
const std::string value = "/tmp/cmvr-logger-test-XXXXXX";
|
||||
std::copy(value.begin(), value.end(), pattern.begin());
|
||||
if (char* created = ::mkdtemp(pattern.data())) {
|
||||
directory_ = created;
|
||||
}
|
||||
ASSERT_FALSE(directory_.empty());
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
shutdownLogging();
|
||||
std::error_code error;
|
||||
std::filesystem::remove_all(directory_, error);
|
||||
}
|
||||
|
||||
config::LoggerConfig warningFileConfig() const
|
||||
{
|
||||
config::LoggerConfig config;
|
||||
config.set_minimum_level(config::LOG_LEVEL_DEBUG);
|
||||
config.set_directory(directory_.string());
|
||||
config.set_flush_interval_seconds(3600);
|
||||
auto* route = config.add_routes();
|
||||
route->set_level(config::LOG_LEVEL_WARNING);
|
||||
route->set_terminal(false);
|
||||
route->set_file(true);
|
||||
return config;
|
||||
}
|
||||
|
||||
std::string fileContents() const
|
||||
{
|
||||
std::ifstream input(directory_ / "logger_test.log");
|
||||
return {std::istreambuf_iterator<char>(input),
|
||||
std::istreambuf_iterator<char>()};
|
||||
}
|
||||
|
||||
std::filesystem::path directory_;
|
||||
};
|
||||
|
||||
TEST_F(LoggerTest, ExplicitFlushMakesWarningVisibleInFile)
|
||||
{
|
||||
ASSERT_TRUE(initLogging(
|
||||
warningFileConfig(), "logger_test", directory_));
|
||||
|
||||
Logger::instance().write(
|
||||
Level::WARNING, __FILE__, __LINE__, "warning sentinel");
|
||||
Logger::instance().flush();
|
||||
|
||||
EXPECT_NE(fileContents().find("warning sentinel"), std::string::npos);
|
||||
}
|
||||
|
||||
TEST_F(LoggerTest, ErrorIsVisibleInFileImmediately)
|
||||
{
|
||||
auto config = warningFileConfig();
|
||||
config.mutable_routes(0)->set_level(config::LOG_LEVEL_ERROR);
|
||||
ASSERT_TRUE(initLogging(config, "logger_test", directory_));
|
||||
|
||||
Logger::instance().write(
|
||||
Level::ERROR, __FILE__, __LINE__, "error sentinel");
|
||||
|
||||
EXPECT_NE(fileContents().find("error sentinel"), std::string::npos);
|
||||
}
|
||||
|
||||
TEST_F(LoggerTest, FlushIsSafeOutsideInitializedLifetime)
|
||||
{
|
||||
Logger::instance().flush();
|
||||
ASSERT_TRUE(initLogging(
|
||||
warningFileConfig(), "logger_test", directory_));
|
||||
shutdownLogging();
|
||||
Logger::instance().flush();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::logging
|
||||
@ -1,609 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <opencv2/core.hpp>
|
||||
#include <opencv2/highgui.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
|
||||
namespace cmvr::common {
|
||||
|
||||
/**
|
||||
* @brief 图像像素坐标。
|
||||
*
|
||||
* 坐标系约定:
|
||||
* - `u`:图像列坐标,向右为正,单位像素。
|
||||
* - `v`:图像行坐标,向下为正,单位像素。
|
||||
*/
|
||||
struct Pixel {
|
||||
int u{0}; // 图像像素列坐标,单位像素。
|
||||
int v{0}; // 图像像素行坐标,单位像素。
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief BGR 颜色定义。
|
||||
*/
|
||||
struct Color {
|
||||
uint8_t b{0}; // 蓝色通道,范围 [0, 255]。
|
||||
uint8_t g{255}; // 绿色通道,范围 [0, 255]。
|
||||
uint8_t r{0}; // 红色通道,范围 [0, 255]。
|
||||
|
||||
/**
|
||||
* @brief 转为 OpenCV 的 `cv::Scalar`。
|
||||
*/
|
||||
cv::Scalar toCvScalar() const {
|
||||
return cv::Scalar(static_cast<double>(b),
|
||||
static_cast<double>(g),
|
||||
static_cast<double>(r));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 预定义红色。
|
||||
*/
|
||||
static Color red() { return Color{0, 0, 255}; }
|
||||
|
||||
/**
|
||||
* @brief 预定义绿色。
|
||||
*/
|
||||
static Color green() { return Color{0, 255, 0}; }
|
||||
|
||||
/**
|
||||
* @brief 预定义蓝色。
|
||||
*/
|
||||
static Color blue() { return Color{255, 0, 0}; }
|
||||
|
||||
/**
|
||||
* @brief 预定义黄色。
|
||||
*/
|
||||
static Color yellow() { return Color{0, 255, 255}; }
|
||||
|
||||
/**
|
||||
* @brief 预定义白色。
|
||||
*/
|
||||
static Color white() { return Color{255, 255, 255}; }
|
||||
|
||||
/**
|
||||
* @brief 预定义黑色。
|
||||
*/
|
||||
static Color black() { return Color{0, 0, 0}; }
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 图像上的文本叠加配置。
|
||||
*/
|
||||
struct TextOverlay {
|
||||
std::string text; // 需要显示的字符串内容。
|
||||
Pixel position_px{}; // 文本左下角在图像像素坐标系中的位置。
|
||||
Color color{Color::green()}; // 文本颜色。
|
||||
double font_scale{0.7}; // OpenCV 字体缩放系数。
|
||||
int thickness{2}; // 文本线宽,单位像素。
|
||||
int font_face{cv::FONT_HERSHEY_SIMPLEX}; // OpenCV 字体类型。
|
||||
bool draw_background{false}; // 是否绘制文本背景框。
|
||||
Color background_color{Color::black()}; // 文本背景框颜色。
|
||||
int background_padding_px{2}; // 文本背景框四周留白,单位像素。
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 图像上的点叠加配置。
|
||||
*/
|
||||
struct PointOverlay {
|
||||
Pixel position_px{}; // 点中心在图像像素坐标系中的位置。
|
||||
Color color{Color::red()}; // 点颜色。
|
||||
int radius_px{5}; // 圆点半径,单位像素。
|
||||
int thickness{2}; // 线宽,`-1` 表示填充。
|
||||
std::string label; // 点旁边附带显示的字符串;为空时不显示。
|
||||
Pixel label_offset_px{8, -8}; // 标签相对点中心的像素偏移。
|
||||
double label_font_scale{0.6}; // 点标签字体缩放系数。
|
||||
int label_thickness{2}; // 点标签线宽,单位像素。
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 图像上的圆圈叠加配置。
|
||||
*/
|
||||
struct CircleOverlay {
|
||||
Pixel center_px{}; // 圆心在图像像素坐标系中的位置。
|
||||
int radius_px{10}; // 圆半径,单位像素。
|
||||
Color color{Color::yellow()}; // 圆圈颜色。
|
||||
int thickness{2}; // 圆圈线宽,单位像素,`-1` 表示填充。
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 图像上的十字叠加配置。
|
||||
*/
|
||||
struct CrossOverlay {
|
||||
Pixel center_px{}; // 十字中心在图像像素坐标系中的位置。
|
||||
int arm_length_px{8}; // 单侧十字臂长度,单位像素。
|
||||
Color color{Color::blue()}; // 十字颜色。
|
||||
int thickness{2}; // 十字线宽,单位像素。
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 通用图像叠加显示接口。
|
||||
*
|
||||
* 该接口不依赖任何感知或跟踪类,只抽象三类输入:
|
||||
* - 待显示的图像数据;
|
||||
* - 文本叠加项;
|
||||
* - 点叠加项。
|
||||
*/
|
||||
class ImageDisplay {
|
||||
public:
|
||||
virtual ~ImageDisplay() = default;
|
||||
|
||||
/**
|
||||
* @brief 设置窗口名称。
|
||||
* @param window_name 显示窗口名称。
|
||||
*/
|
||||
virtual void setWindowName(const std::string& window_name) = 0;
|
||||
|
||||
/**
|
||||
* @brief 设置待显示的图像。
|
||||
* @param image 输入图像,支持灰度图、BGR 图或 BGRA 图。
|
||||
*/
|
||||
virtual void setImage(const cv::Mat& image) = 0;
|
||||
|
||||
/**
|
||||
* @brief 清空所有叠加项,但保留当前图像。
|
||||
*/
|
||||
virtual void clearOverlays() = 0;
|
||||
|
||||
/**
|
||||
* @brief 添加文本叠加项。
|
||||
* @param overlay 文本叠加配置。
|
||||
*/
|
||||
virtual void showText(const TextOverlay& overlay) = 0;
|
||||
|
||||
/**
|
||||
* @brief 按位置、字符串、颜色和大小直接添加文本。
|
||||
* @param text 需要显示的字符串内容。
|
||||
* @param position_px 文本左下角在图像像素坐标系中的位置。
|
||||
* @param color 文本颜色。
|
||||
* @param font_scale OpenCV 字体缩放系数。
|
||||
* @param thickness 文本线宽,单位像素。
|
||||
*/
|
||||
virtual void showText(const std::string& text,
|
||||
const Pixel& position_px,
|
||||
const Color& color,
|
||||
double font_scale = 0.7,
|
||||
int thickness = 2) = 0;
|
||||
|
||||
/**
|
||||
* @brief 添加点叠加项。
|
||||
* @param overlay 点叠加配置。
|
||||
*/
|
||||
virtual void showPoint(const PointOverlay& overlay) = 0;
|
||||
|
||||
/**
|
||||
* @brief 按位置、颜色和大小直接添加点。
|
||||
* @param position_px 点中心在图像像素坐标系中的位置。
|
||||
* @param color 点颜色。
|
||||
* @param radius_px 圆点半径,单位像素。
|
||||
* @param thickness 线宽,`-1` 表示填充。
|
||||
* @param label 点旁边附带显示的字符串;为空时不显示。
|
||||
*/
|
||||
virtual void showPoint(const Pixel& position_px,
|
||||
const Color& color,
|
||||
int radius_px = 5,
|
||||
int thickness = 2,
|
||||
const std::string& label = {}) = 0;
|
||||
|
||||
/**
|
||||
* @brief 显示圆圈叠加项。
|
||||
* @param overlay 圆圈叠加配置。
|
||||
*/
|
||||
virtual void showCircle(const CircleOverlay& overlay) = 0;
|
||||
|
||||
/**
|
||||
* @brief 按位置、半径、颜色和线宽直接显示圆圈。
|
||||
* @param center_px 圆心在图像像素坐标系中的位置。
|
||||
* @param radius_px 圆半径,单位像素。
|
||||
* @param color 圆圈颜色。
|
||||
* @param thickness 圆圈线宽,单位像素,`-1` 表示填充。
|
||||
*/
|
||||
virtual void showCircle(const Pixel& center_px,
|
||||
int radius_px,
|
||||
const Color& color,
|
||||
int thickness = 2) = 0;
|
||||
|
||||
/**
|
||||
* @brief 显示十字叠加项。
|
||||
* @param overlay 十字叠加配置。
|
||||
*/
|
||||
virtual void showCross(const CrossOverlay& overlay) = 0;
|
||||
|
||||
/**
|
||||
* @brief 按位置、尺寸、颜色和线宽直接显示十字。
|
||||
* @param center_px 十字中心在图像像素坐标系中的位置。
|
||||
* @param arm_length_px 单侧十字臂长度,单位像素。
|
||||
* @param color 十字颜色。
|
||||
* @param thickness 十字线宽,单位像素。
|
||||
*/
|
||||
virtual void showCross(const Pixel& center_px,
|
||||
int arm_length_px,
|
||||
const Color& color,
|
||||
int thickness = 2) = 0;
|
||||
|
||||
/**
|
||||
* @brief 判断当前是否已有待显示图像。
|
||||
*/
|
||||
virtual bool hasImage() const = 0;
|
||||
|
||||
/**
|
||||
* @brief 将当前图像和叠加项渲染到输出图像。
|
||||
* @param rendered_image 输出的渲染结果图像,BGR 三通道。
|
||||
* @return 渲染成功返回 `true`。
|
||||
*/
|
||||
virtual bool render(cv::Mat& rendered_image) const = 0;
|
||||
|
||||
/**
|
||||
* @brief 显示当前渲染结果。
|
||||
* @param wait_key_ms `cv::waitKey` 等待时间,单位毫秒。
|
||||
* @return 返回 `cv::waitKey` 的按键值;若没有可显示图像则返回 `-1`。
|
||||
*/
|
||||
virtual int show(int wait_key_ms = 1) = 0;
|
||||
|
||||
/**
|
||||
* @brief 关闭显示窗口。
|
||||
*/
|
||||
virtual void close() = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 基于 OpenCV HighGUI 的图像叠加显示实现。
|
||||
*/
|
||||
class OpenCvImageCvDisplay final : public ImageDisplay {
|
||||
public:
|
||||
/**
|
||||
* @brief 构造显示器。
|
||||
* @param window_name 显示窗口名称。
|
||||
*/
|
||||
explicit OpenCvImageCvDisplay(std::string window_name = "image_overlay")
|
||||
: window_name_(std::move(window_name)) {}
|
||||
|
||||
/**
|
||||
* @brief 设置窗口名称。
|
||||
* @param window_name 显示窗口名称。
|
||||
*/
|
||||
void setWindowName(const std::string& window_name) override {
|
||||
window_name_ = window_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置待显示图像。
|
||||
* @param image 输入图像,支持灰度图、BGR 图或 BGRA 图。
|
||||
*/
|
||||
void setImage(const cv::Mat& image) override {
|
||||
image_ = image.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 清空所有叠加项,但保留当前图像。
|
||||
*/
|
||||
void clearOverlays() override {
|
||||
texts_.clear();
|
||||
points_.clear();
|
||||
circles_.clear();
|
||||
crosses_.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 添加文本叠加项。
|
||||
* @param overlay 文本叠加配置。
|
||||
*/
|
||||
void showText(const TextOverlay& overlay) override {
|
||||
texts_.push_back(overlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 按位置、字符串、颜色和大小直接添加文本。
|
||||
* @param text 需要显示的字符串内容。
|
||||
* @param position_px 文本左下角在图像像素坐标系中的位置。
|
||||
* @param color 文本颜色。
|
||||
* @param font_scale OpenCV 字体缩放系数。
|
||||
* @param thickness 文本线宽,单位像素。
|
||||
*/
|
||||
void showText(const std::string& text,
|
||||
const Pixel& position_px,
|
||||
const Color& color,
|
||||
double font_scale = 0.7,
|
||||
int thickness = 2) override {
|
||||
TextOverlay overlay;
|
||||
overlay.text = text;
|
||||
overlay.position_px = position_px;
|
||||
overlay.color = color;
|
||||
overlay.font_scale = font_scale;
|
||||
overlay.thickness = thickness;
|
||||
showText(overlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 添加点叠加项。
|
||||
* @param overlay 点叠加配置。
|
||||
*/
|
||||
void showPoint(const PointOverlay& overlay) override {
|
||||
points_.push_back(overlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 按位置、颜色和大小直接添加点。
|
||||
* @param position_px 点中心在图像像素坐标系中的位置。
|
||||
* @param color 点颜色。
|
||||
* @param radius_px 圆点半径,单位像素。
|
||||
* @param thickness 线宽,`-1` 表示填充。
|
||||
* @param label 点旁边附带显示的字符串;为空时不显示。
|
||||
*/
|
||||
void showPoint(const Pixel& position_px,
|
||||
const Color& color,
|
||||
int radius_px = 5,
|
||||
int thickness = 2,
|
||||
const std::string& label = {}) override {
|
||||
PointOverlay overlay;
|
||||
overlay.position_px = position_px;
|
||||
overlay.color = color;
|
||||
overlay.radius_px = radius_px;
|
||||
overlay.thickness = thickness;
|
||||
overlay.label = label;
|
||||
showPoint(overlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 显示圆圈叠加项。
|
||||
* @param overlay 圆圈叠加配置。
|
||||
*/
|
||||
void showCircle(const CircleOverlay& overlay) override {
|
||||
circles_.push_back(overlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 按位置、半径、颜色和线宽直接显示圆圈。
|
||||
* @param center_px 圆心在图像像素坐标系中的位置。
|
||||
* @param radius_px 圆半径,单位像素。
|
||||
* @param color 圆圈颜色。
|
||||
* @param thickness 圆圈线宽,单位像素,`-1` 表示填充。
|
||||
*/
|
||||
void showCircle(const Pixel& center_px,
|
||||
int radius_px,
|
||||
const Color& color,
|
||||
int thickness = 2) override {
|
||||
CircleOverlay overlay;
|
||||
overlay.center_px = center_px;
|
||||
overlay.radius_px = radius_px;
|
||||
overlay.color = color;
|
||||
overlay.thickness = thickness;
|
||||
showCircle(overlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 显示十字叠加项。
|
||||
* @param overlay 十字叠加配置。
|
||||
*/
|
||||
void showCross(const CrossOverlay& overlay) override {
|
||||
crosses_.push_back(overlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 按位置、尺寸、颜色和线宽直接显示十字。
|
||||
* @param center_px 十字中心在图像像素坐标系中的位置。
|
||||
* @param arm_length_px 单侧十字臂长度,单位像素。
|
||||
* @param color 十字颜色。
|
||||
* @param thickness 十字线宽,单位像素。
|
||||
*/
|
||||
void showCross(const Pixel& center_px,
|
||||
int arm_length_px,
|
||||
const Color& color,
|
||||
int thickness = 2) override {
|
||||
CrossOverlay overlay;
|
||||
overlay.center_px = center_px;
|
||||
overlay.arm_length_px = arm_length_px;
|
||||
overlay.color = color;
|
||||
overlay.thickness = thickness;
|
||||
showCross(overlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 判断当前是否已有待显示图像。
|
||||
*/
|
||||
bool hasImage() const override {
|
||||
return !image_.empty();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将当前图像和叠加项渲染到输出图像。
|
||||
* @param rendered_image 输出的渲染结果图像,BGR 三通道。
|
||||
* @return 渲染成功返回 `true`。
|
||||
*/
|
||||
bool render(cv::Mat& rendered_image) const override {
|
||||
if (!toBgrImage(image_, rendered_image)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const CircleOverlay& overlay : circles_) {
|
||||
drawCircle(rendered_image, overlay);
|
||||
}
|
||||
for (const CrossOverlay& overlay : crosses_) {
|
||||
drawCross(rendered_image, overlay);
|
||||
}
|
||||
for (const PointOverlay& overlay : points_) {
|
||||
drawPoint(rendered_image, overlay);
|
||||
}
|
||||
for (const TextOverlay& overlay : texts_) {
|
||||
drawText(rendered_image, overlay);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 显示当前渲染结果。
|
||||
* @param wait_key_ms `cv::waitKey` 等待时间,单位毫秒。
|
||||
* @return 返回 `cv::waitKey` 的按键值;若没有可显示图像则返回 `-1`。
|
||||
*/
|
||||
int show(int wait_key_ms = 1) override {
|
||||
cv::Mat rendered_image;
|
||||
if (!render(rendered_image)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!window_created_) {
|
||||
cv::namedWindow(window_name_, cv::WINDOW_NORMAL);
|
||||
window_created_ = true;
|
||||
}
|
||||
cv::imshow(window_name_, rendered_image);
|
||||
return cv::waitKey(wait_key_ms);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 关闭显示窗口。
|
||||
*/
|
||||
void close() override {
|
||||
if (!window_created_) {
|
||||
return;
|
||||
}
|
||||
cv::destroyWindow(window_name_);
|
||||
window_created_ = false;
|
||||
}
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief 将输入图像转换为可叠加绘制的 BGR 三通道图像。
|
||||
* @param input 输入图像。
|
||||
* @param output 输出 BGR 图像。
|
||||
* @return 转换成功返回 `true`。
|
||||
*/
|
||||
static bool toBgrImage(const cv::Mat& input, cv::Mat& output) {
|
||||
if (input.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (input.channels() == 1) {
|
||||
cv::cvtColor(input, output, cv::COLOR_GRAY2BGR);
|
||||
return true;
|
||||
}
|
||||
if (input.channels() == 3) {
|
||||
output = input.clone();
|
||||
return true;
|
||||
}
|
||||
if (input.channels() == 4) {
|
||||
cv::cvtColor(input, output, cv::COLOR_BGRA2BGR);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 在图像上绘制文本叠加项。
|
||||
* @param image 目标图像,BGR 三通道。
|
||||
* @param overlay 文本叠加配置。
|
||||
*/
|
||||
static void drawText(cv::Mat& image, const TextOverlay& overlay) {
|
||||
const cv::Point origin(overlay.position_px.u, overlay.position_px.v);
|
||||
const int thickness = std::max(1, overlay.thickness);
|
||||
const double font_scale = std::max(0.0, overlay.font_scale);
|
||||
|
||||
if (overlay.draw_background) {
|
||||
int baseline = 0;
|
||||
const cv::Size text_size = cv::getTextSize(overlay.text,
|
||||
overlay.font_face,
|
||||
font_scale,
|
||||
thickness,
|
||||
&baseline);
|
||||
const int pad = std::max(0, overlay.background_padding_px);
|
||||
const cv::Point top_left(origin.x - pad, origin.y - text_size.height - pad);
|
||||
const cv::Point bottom_right(origin.x + text_size.width + pad, origin.y + baseline + pad);
|
||||
cv::rectangle(image,
|
||||
top_left,
|
||||
bottom_right,
|
||||
overlay.background_color.toCvScalar(),
|
||||
cv::FILLED);
|
||||
}
|
||||
|
||||
cv::putText(image,
|
||||
overlay.text,
|
||||
origin,
|
||||
overlay.font_face,
|
||||
font_scale,
|
||||
overlay.color.toCvScalar(),
|
||||
thickness,
|
||||
cv::LINE_AA);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 在图像上绘制点叠加项。
|
||||
* @param image 目标图像,BGR 三通道。
|
||||
* @param overlay 点叠加配置。
|
||||
*/
|
||||
static void drawPoint(cv::Mat& image, const PointOverlay& overlay) {
|
||||
const cv::Point center(overlay.position_px.u, overlay.position_px.v);
|
||||
const int radius = std::max(1, overlay.radius_px);
|
||||
cv::circle(image,
|
||||
center,
|
||||
radius,
|
||||
overlay.color.toCvScalar(),
|
||||
overlay.thickness,
|
||||
cv::LINE_AA);
|
||||
|
||||
if (!overlay.label.empty()) {
|
||||
TextOverlay label_overlay;
|
||||
label_overlay.text = overlay.label;
|
||||
label_overlay.position_px = Pixel{center.x + overlay.label_offset_px.u,
|
||||
center.y + overlay.label_offset_px.v};
|
||||
label_overlay.color = overlay.color;
|
||||
label_overlay.font_scale = overlay.label_font_scale;
|
||||
label_overlay.thickness = overlay.label_thickness;
|
||||
drawText(image, label_overlay);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 在图像上绘制圆圈叠加项。
|
||||
* @param image 目标图像,BGR 三通道。
|
||||
* @param overlay 圆圈叠加配置。
|
||||
*/
|
||||
static void drawCircle(cv::Mat& image, const CircleOverlay& overlay) {
|
||||
const cv::Point center(overlay.center_px.u, overlay.center_px.v);
|
||||
const int radius = std::max(1, overlay.radius_px);
|
||||
const int thickness = (overlay.thickness == 0) ? 1 : overlay.thickness;
|
||||
cv::circle(image,
|
||||
center,
|
||||
radius,
|
||||
overlay.color.toCvScalar(),
|
||||
thickness,
|
||||
cv::LINE_AA);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 在图像上绘制十字叠加项。
|
||||
* @param image 目标图像,BGR 三通道。
|
||||
* @param overlay 十字叠加配置。
|
||||
*/
|
||||
static void drawCross(cv::Mat& image, const CrossOverlay& overlay) {
|
||||
const cv::Point center(overlay.center_px.u, overlay.center_px.v);
|
||||
const int arm_length = std::max(1, overlay.arm_length_px);
|
||||
const int thickness = std::max(1, overlay.thickness);
|
||||
const cv::Scalar color = overlay.color.toCvScalar();
|
||||
cv::line(image,
|
||||
cv::Point(center.x - arm_length, center.y),
|
||||
cv::Point(center.x + arm_length, center.y),
|
||||
color,
|
||||
thickness,
|
||||
cv::LINE_AA);
|
||||
cv::line(image,
|
||||
cv::Point(center.x, center.y - arm_length),
|
||||
cv::Point(center.x, center.y + arm_length),
|
||||
color,
|
||||
thickness,
|
||||
cv::LINE_AA);
|
||||
}
|
||||
|
||||
std::string window_name_; // 显示窗口名称。
|
||||
cv::Mat image_; // 当前待显示图像。
|
||||
std::vector<TextOverlay> texts_; // 当前待绘制的文本叠加列表。
|
||||
std::vector<PointOverlay> points_; // 当前待绘制的点叠加列表。
|
||||
std::vector<CircleOverlay> circles_; // 当前待绘制的圆圈叠加列表。
|
||||
std::vector<CrossOverlay> crosses_; // 当前待绘制的十字叠加列表。
|
||||
bool window_created_{false}; // 显示窗口是否已经创建。
|
||||
};
|
||||
|
||||
} // namespace cmvr::common
|
||||
@ -334,19 +334,17 @@ MediaSourceManager Subscription 同样是单消费者对象,不同协议或客
|
||||
无硬件参考测试:
|
||||
|
||||
- [`camera/hikvision_camera/tests/hikvision_camera_callback_test.cpp`](camera/hikvision_camera/tests/hikvision_camera_callback_test.cpp)
|
||||
- [`../manager/media_source_manager/tests/media_source_manager_test.cpp`](../manager/media_source_manager/tests/media_source_manager_test.cpp)
|
||||
|
||||
```bash
|
||||
cmake -S . -B build \
|
||||
-DCMVR_ARCH=x86 \
|
||||
-DBUILD_TESTING=ON \
|
||||
-DCMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS=ON
|
||||
-DBUILD_TESTING=ON
|
||||
|
||||
cmake --build build -j"$(nproc)"
|
||||
|
||||
ctest \
|
||||
--test-dir build \
|
||||
-R 'hikvision_camera_callback_test|media_source_manager_test' \
|
||||
-R '^hikvision_camera_callback_test$' \
|
||||
--output-on-failure
|
||||
```
|
||||
|
||||
|
||||
@ -27,31 +27,3 @@ target_link_libraries(seer_robokit_agv
|
||||
|
||||
add_library(cmvr_es::device::seer_robokit_agv ALIAS seer_robokit_agv)
|
||||
install(TARGETS seer_robokit_agv LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(seer_robokit_control_authority_test
|
||||
tests/seer_robokit_control_authority_test.cpp
|
||||
)
|
||||
target_link_libraries(seer_robokit_control_authority_test
|
||||
PRIVATE
|
||||
cmvr_es::device::seer_robokit_agv
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME seer_robokit_control_authority_test
|
||||
COMMAND seer_robokit_control_authority_test
|
||||
)
|
||||
set(_seer_robokit_control_authority_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _seer_robokit_control_authority_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(seer_robokit_control_authority_test PROPERTIES
|
||||
TIMEOUT 180
|
||||
ENVIRONMENT "${_seer_robokit_control_authority_test_environment}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -35,8 +35,6 @@
|
||||
- 阻塞等待与停车确认:
|
||||
[`src/seer_robokit_navigation_wait.cpp`](src/seer_robokit_navigation_wait.cpp)
|
||||
- 地图和建图:[`src/seer_robokit_map.cpp`](src/seer_robokit_map.cpp)
|
||||
- 假控制器测试:
|
||||
[`tests/seer_robokit_control_authority_test.cpp`](tests/seer_robokit_control_authority_test.cpp)
|
||||
- 设备配置:
|
||||
[`../../../config/devices/agv/seer_robokit.pb.txt`](../../../config/devices/agv/seer_robokit.pb.txt)
|
||||
- DeviceManager 配置:
|
||||
@ -375,21 +373,3 @@ unknown,调用方不能自动重发运动命令,应先查询状态并取消
|
||||
验证后才能据此联动机械臂。异步成功更不代表 PGV 调整完成。
|
||||
- 地图切换、地图上传和开始建图会改变控制器状态,也会先抢占控制权;不要和
|
||||
现场调度系统并行操作。
|
||||
- 本目录的假控制器测试验证软件协议、错误路径和并发逻辑,不代表真实 SEER Robokit、
|
||||
底盘、PGV、地图或安全链已经验收。
|
||||
|
||||
## 测试
|
||||
|
||||
```bash
|
||||
cmake --build build \
|
||||
--target seer_robokit_control_authority_test grpc_agv_service_test \
|
||||
-j2
|
||||
|
||||
ctest --test-dir build \
|
||||
-R '^(seer_robokit_control_authority_test|grpc_agv_service_test)$' \
|
||||
--output-on-failure
|
||||
```
|
||||
|
||||
`seer_robokit_control_authority_test` 使用本机回环 TCP 假控制器,需要允许本地
|
||||
bind/listen。受限沙箱若禁止创建 socket,只能证明编译通过,不能把未执行的
|
||||
fake-controller 场景报告为测试通过。测试过程不会连接真实 AGV。
|
||||
|
||||
@ -54,88 +54,3 @@ target_link_libraries(aubo_arm
|
||||
|
||||
add_library(cmvr_es::device::aubo_arm ALIAS aubo_arm)
|
||||
install(TARGETS aubo_arm LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
enable_testing()
|
||||
add_executable(aubo_arm_motion_result_test
|
||||
tests/aubo_arm_motion_result_test.cpp
|
||||
)
|
||||
target_include_directories(aubo_arm_motion_result_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
add_test(
|
||||
NAME aubo_arm_motion_result_test
|
||||
COMMAND aubo_arm_motion_result_test
|
||||
)
|
||||
set_tests_properties(aubo_arm_motion_result_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
add_executable(aubo_motion_state_test
|
||||
tests/aubo_motion_state_test.cpp
|
||||
)
|
||||
target_include_directories(aubo_motion_state_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
add_test(
|
||||
NAME aubo_motion_state_test
|
||||
COMMAND aubo_motion_state_test
|
||||
)
|
||||
set_tests_properties(aubo_motion_state_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
add_executable(aubo_safety_state_test
|
||||
tests/aubo_safety_state_test.cpp
|
||||
)
|
||||
target_include_directories(aubo_safety_state_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
add_test(
|
||||
NAME aubo_safety_state_test
|
||||
COMMAND aubo_safety_state_test
|
||||
)
|
||||
set_tests_properties(aubo_safety_state_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
add_executable(aubo_arm_json_command_test
|
||||
tests/aubo_arm_json_command_test.cpp
|
||||
)
|
||||
target_link_libraries(aubo_arm_json_command_test
|
||||
PRIVATE
|
||||
cmvr_es::device::aubo_arm
|
||||
cmvr_es::proto
|
||||
)
|
||||
add_test(
|
||||
NAME aubo_arm_json_command_test
|
||||
COMMAND aubo_arm_json_command_test
|
||||
)
|
||||
set_tests_properties(aubo_arm_json_command_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
if(UNIX AND NOT APPLE)
|
||||
# The imported AUBO target still contributes its vendor directory to
|
||||
# direct consumers' build-tree RUNPATH. Put the system runtime first
|
||||
# for this test; installed artifacts exclude the vendor libstdc++.
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libstdc++.so.6
|
||||
OUTPUT_VARIABLE AUBO_TEST_SYSTEM_LIBSTDCXX
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(EXISTS "${AUBO_TEST_SYSTEM_LIBSTDCXX}")
|
||||
get_filename_component(
|
||||
AUBO_TEST_SYSTEM_LIBSTDCXX_REAL
|
||||
"${AUBO_TEST_SYSTEM_LIBSTDCXX}"
|
||||
REALPATH
|
||||
)
|
||||
get_filename_component(
|
||||
AUBO_TEST_SYSTEM_LIBSTDCXX_DIR
|
||||
"${AUBO_TEST_SYSTEM_LIBSTDCXX_REAL}"
|
||||
DIRECTORY
|
||||
)
|
||||
set_property(
|
||||
TARGET aubo_arm_json_command_test
|
||||
PROPERTY BUILD_RPATH "${AUBO_TEST_SYSTEM_LIBSTDCXX_DIR}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -12,7 +12,6 @@
|
||||
## 代码与配置
|
||||
|
||||
- 实现:[`aubo_arm.h`](aubo_arm.h)、[`aubo_arm.cpp`](aubo_arm.cpp)
|
||||
- 测试:[`tests/aubo_arm_json_command_test.cpp`](tests/aubo_arm_json_command_test.cpp)
|
||||
- 设备配置:[`../../../config/devices/arm/aubo_arm.pb.txt`](../../../config/devices/arm/aubo_arm.pb.txt)
|
||||
- DeviceManager 配置:
|
||||
[`../../../config/manager/device_manager.pb.txt`](../../../config/manager/device_manager.pb.txt)
|
||||
@ -136,18 +135,3 @@ cmake --install build
|
||||
- 模拟量 IO 涉及 domain、单位和量程,当前 JSON 接口不开放;
|
||||
- gRPC/JSON 返回成功不代表目标 IO 具备功能安全等级;
|
||||
- 真实写测试前应确认通道用途、负载、电气隔离、默认电平和控制器程序所有权。
|
||||
|
||||
## 测试
|
||||
|
||||
```bash
|
||||
cmake --build build --target \
|
||||
aubo_safety_state_test \
|
||||
aubo_motion_state_test \
|
||||
aubo_arm_json_command_test -j4
|
||||
ctest --test-dir build \
|
||||
-R 'aubo_(safety_state|motion_state|arm_json_command)_test' \
|
||||
--output-on-failure
|
||||
```
|
||||
|
||||
该测试覆盖 JSON 校验和无硬件错误路径,不代表已在真实 AUBO 控制柜完成 DI/DO
|
||||
读取、写入或 runstate 拒绝验证。
|
||||
|
||||
@ -1,84 +0,0 @@
|
||||
#include "devices/arm/aubo_arm/aubo_arm.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
namespace {
|
||||
|
||||
#define CHECK_TRUE(condition) \
|
||||
do { \
|
||||
if (!(condition)) { \
|
||||
std::cerr << "CHECK_TRUE failed at line " << __LINE__ << ": " \
|
||||
<< #condition << std::endl; \
|
||||
return 1; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
bool contains(const std::string& value, const std::string& expected)
|
||||
{
|
||||
return value.find(expected) != std::string::npos;
|
||||
}
|
||||
|
||||
cmvr::config::RobotArmConfig makeConfig()
|
||||
{
|
||||
cmvr::config::RobotArmConfig config;
|
||||
config.set_id("aubo_arm_json_test");
|
||||
auto* vendor = config.mutable_vendor();
|
||||
vendor->set_brand(cmvr::config::VENDOR_ROBOT_ARM_BRAND_AUBO_ARM);
|
||||
vendor->set_model("AuboTest");
|
||||
vendor->set_dof(6);
|
||||
return config;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
cmvr::device::AuboArm arm(makeConfig());
|
||||
cmvr::device::AbstractDevice* device = &arm;
|
||||
std::string response;
|
||||
|
||||
CHECK_TRUE(!device->executeJsonCommand("{", response));
|
||||
CHECK_TRUE(contains(response, R"("error_code":"invalid_json")"));
|
||||
|
||||
CHECK_TRUE(!device->executeJsonCommand("[]", response));
|
||||
CHECK_TRUE(contains(response, R"("error_code":"invalid_json")"));
|
||||
|
||||
CHECK_TRUE(!device->executeJsonCommand(
|
||||
R"({"command":"ptz","operation":"get_di","index":0})", response));
|
||||
CHECK_TRUE(contains(response, R"("error_code":"unsupported_command")"));
|
||||
|
||||
CHECK_TRUE(!device->executeJsonCommand(
|
||||
R"({"command":"cabinet_io","operation":"get_ai","index":0})", response));
|
||||
CHECK_TRUE(contains(response, R"("error_code":"invalid_operation")"));
|
||||
|
||||
CHECK_TRUE(!device->executeJsonCommand(
|
||||
R"({"command":"cabinet_io","operation":"get_di","index":-1})", response));
|
||||
CHECK_TRUE(contains(response, R"("error_code":"invalid_argument")"));
|
||||
|
||||
CHECK_TRUE(!device->executeJsonCommand(
|
||||
R"({"command":"cabinet_io","operation":"set_do","index":0,"value":1})",
|
||||
response));
|
||||
CHECK_TRUE(contains(response, R"("error_code":"invalid_argument")"));
|
||||
|
||||
CHECK_TRUE(!device->executeJsonCommand(
|
||||
R"({"command":"cabinet_io","operation":"set_do","index":0})", response));
|
||||
CHECK_TRUE(contains(response, R"("error_code":"invalid_argument")"));
|
||||
|
||||
CHECK_TRUE(!device->executeJsonCommand(
|
||||
R"({"command":"cabinet_io","operation":"get_di","index":0})", response));
|
||||
CHECK_TRUE(contains(response, R"("error_code":"not_connected")"));
|
||||
|
||||
CHECK_TRUE(!device->executeJsonCommand(
|
||||
R"({"command":"cabinet_io","operation":"get_do","index":0})", response));
|
||||
CHECK_TRUE(contains(response, R"("operation":"get_do")"));
|
||||
CHECK_TRUE(contains(response, R"("error_code":"not_connected")"));
|
||||
|
||||
CHECK_TRUE(!device->executeJsonCommand(
|
||||
R"({"command":"cabinet_io","operation":"set_do","index":0,"value":true})",
|
||||
response));
|
||||
CHECK_TRUE(contains(response, R"("operation":"set_do")"));
|
||||
CHECK_TRUE(contains(response, R"("error_code":"not_connected")"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1,158 +0,0 @@
|
||||
#include "devices/arm/aubo_arm/aubo_motion_result.h"
|
||||
#include "devices/arm/aubo_arm/aubo_torque_on_result.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace {
|
||||
|
||||
#define CHECK_TRUE(condition) \
|
||||
do { \
|
||||
if (!(condition)) { \
|
||||
std::cerr << "CHECK_TRUE failed at line " << __LINE__ << ": " \
|
||||
<< #condition << std::endl; \
|
||||
return 1; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
using cmvr::device::aubo_internal::MotionCommandOutcome;
|
||||
using cmvr::device::aubo_internal::MotionWaitResult;
|
||||
using cmvr::device::aubo_internal::preservePrimaryTorqueOnFailure;
|
||||
using cmvr::device::aubo_internal::resolveMotionCommand;
|
||||
using cmvr::device::aubo_internal::runTorqueOnControllerMutation;
|
||||
|
||||
constexpr int success_code = 0;
|
||||
constexpr int request_ignore_code = 13;
|
||||
|
||||
int wait_calls = 0;
|
||||
const auto wait_succeeded = [&wait_calls]() {
|
||||
++wait_calls;
|
||||
return MotionWaitResult::Completed;
|
||||
};
|
||||
CHECK_TRUE(resolveMotionCommand(
|
||||
success_code,
|
||||
success_code,
|
||||
request_ignore_code,
|
||||
wait_succeeded) == MotionCommandOutcome::CompletedAfterMotion);
|
||||
CHECK_TRUE(wait_calls == 1);
|
||||
|
||||
wait_calls = 0;
|
||||
CHECK_TRUE(resolveMotionCommand(
|
||||
request_ignore_code,
|
||||
success_code,
|
||||
request_ignore_code,
|
||||
wait_succeeded) == MotionCommandOutcome::CompletedWithoutMotion);
|
||||
CHECK_TRUE(wait_calls == 0);
|
||||
|
||||
const int submit_failures[] = {1, 2, 3, -request_ignore_code};
|
||||
for (const int return_code : submit_failures) {
|
||||
wait_calls = 0;
|
||||
CHECK_TRUE(resolveMotionCommand(
|
||||
return_code,
|
||||
success_code,
|
||||
request_ignore_code,
|
||||
wait_succeeded) == MotionCommandOutcome::SubmitFailed);
|
||||
CHECK_TRUE(wait_calls == 0);
|
||||
}
|
||||
|
||||
wait_calls = 0;
|
||||
const auto wait_failed = [&wait_calls]() {
|
||||
++wait_calls;
|
||||
return MotionWaitResult::Failed;
|
||||
};
|
||||
CHECK_TRUE(resolveMotionCommand(
|
||||
success_code,
|
||||
success_code,
|
||||
request_ignore_code,
|
||||
wait_failed) == MotionCommandOutcome::CompletionFailed);
|
||||
CHECK_TRUE(wait_calls == 1);
|
||||
|
||||
wait_calls = 0;
|
||||
const auto wait_cancelled = [&wait_calls]() {
|
||||
++wait_calls;
|
||||
return MotionWaitResult::Cancelled;
|
||||
};
|
||||
CHECK_TRUE(resolveMotionCommand(
|
||||
success_code,
|
||||
success_code,
|
||||
request_ignore_code,
|
||||
wait_cancelled) == MotionCommandOutcome::Cancelled);
|
||||
CHECK_TRUE(wait_calls == 1);
|
||||
|
||||
using cmvr::device::ArmErrorCode;
|
||||
using cmvr::device::Result;
|
||||
std::vector<std::string> mutation_trace;
|
||||
const auto failed_mutation = runTorqueOnControllerMutation(
|
||||
success_code,
|
||||
[&mutation_trace] {
|
||||
mutation_trace.push_back("mutation");
|
||||
return 42;
|
||||
},
|
||||
[&mutation_trace](const int return_code) {
|
||||
mutation_trace.push_back("primary-failure");
|
||||
return Result::failure(
|
||||
ArmErrorCode::CommandFailed,
|
||||
"vendor failure ret=" + std::to_string(return_code));
|
||||
},
|
||||
[&mutation_trace]() -> std::optional<Result> {
|
||||
mutation_trace.push_back("cancellation-cleanup");
|
||||
return Result::failure(
|
||||
ArmErrorCode::CommandRejected,
|
||||
"controller safety termination confirmed");
|
||||
});
|
||||
CHECK_TRUE(failed_mutation.has_value());
|
||||
CHECK_TRUE(failed_mutation->code == ArmErrorCode::CommandFailed);
|
||||
CHECK_TRUE(
|
||||
failed_mutation->message.find("vendor failure ret=42") !=
|
||||
std::string::npos);
|
||||
CHECK_TRUE(
|
||||
failed_mutation->message.find(
|
||||
"controller safety termination confirmed") !=
|
||||
std::string::npos);
|
||||
CHECK_TRUE(mutation_trace.size() == 3);
|
||||
CHECK_TRUE(mutation_trace[0] == "mutation");
|
||||
CHECK_TRUE(mutation_trace[1] == "primary-failure");
|
||||
CHECK_TRUE(mutation_trace[2] == "cancellation-cleanup");
|
||||
|
||||
const auto cleanup_failed = preservePrimaryTorqueOnFailure(
|
||||
Result::failure(
|
||||
ArmErrorCode::CommandFailed,
|
||||
"vendor exception"),
|
||||
std::optional<Result>{Result::failure(
|
||||
ArmErrorCode::CommandFailed,
|
||||
"safety termination failed")});
|
||||
CHECK_TRUE(cleanup_failed.code == ArmErrorCode::CommandFailed);
|
||||
CHECK_TRUE(
|
||||
cleanup_failed.message.find("vendor exception") !=
|
||||
std::string::npos);
|
||||
CHECK_TRUE(
|
||||
cleanup_failed.message.find("safety termination failed") !=
|
||||
std::string::npos);
|
||||
|
||||
int successful_cancellation_checks = 0;
|
||||
const auto cancelled_after_success = runTorqueOnControllerMutation(
|
||||
success_code,
|
||||
[] { return 0; },
|
||||
[](const int) {
|
||||
return Result::failure(
|
||||
ArmErrorCode::CommandFailed, "must not be used");
|
||||
},
|
||||
[&successful_cancellation_checks]() -> std::optional<Result> {
|
||||
++successful_cancellation_checks;
|
||||
return Result::failure(
|
||||
ArmErrorCode::CommandRejected,
|
||||
"cancelled after successful mutation");
|
||||
});
|
||||
CHECK_TRUE(cancelled_after_success.has_value());
|
||||
CHECK_TRUE(
|
||||
cancelled_after_success->code == ArmErrorCode::CommandRejected);
|
||||
CHECK_TRUE(successful_cancellation_checks == 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1,213 +0,0 @@
|
||||
#include "devices/arm/aubo_arm/aubo_motion_state.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <iostream>
|
||||
#include <thread>
|
||||
|
||||
namespace {
|
||||
|
||||
#define CHECK_TRUE(condition) \
|
||||
do { \
|
||||
if (!(condition)) { \
|
||||
std::cerr << "CHECK_TRUE failed at line " << __LINE__ << ": " \
|
||||
<< #condition << std::endl; \
|
||||
return 1; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace cmvr::device::aubo_internal;
|
||||
|
||||
MotionState state;
|
||||
CHECK_TRUE(state.begin(MotionKind::None).status ==
|
||||
MotionStartStatus::Invalid);
|
||||
const auto joint = state.begin(MotionKind::Joint);
|
||||
CHECK_TRUE(joint.started());
|
||||
CHECK_TRUE(state.busy());
|
||||
CHECK_TRUE(state.begin(MotionKind::Linear).status ==
|
||||
MotionStartStatus::Busy);
|
||||
|
||||
const auto stop_joint = state.beginStop();
|
||||
CHECK_TRUE(stop_joint.started());
|
||||
CHECK_TRUE(stop_joint.kind == MotionKind::Joint);
|
||||
CHECK_TRUE(stop_joint.active_token.generation ==
|
||||
joint.token.generation);
|
||||
CHECK_TRUE(stop_joint.tracked_motion);
|
||||
CHECK_TRUE(state.cancelled(joint.token));
|
||||
const auto joined_stop_joint = state.beginStop();
|
||||
CHECK_TRUE(joined_stop_joint.status ==
|
||||
StopStartStatus::AlreadyStopping);
|
||||
CHECK_TRUE(
|
||||
state.waitForStopCompletion(
|
||||
joined_stop_joint, std::chrono::milliseconds(1)) ==
|
||||
StopWaitStatus::Timeout);
|
||||
CHECK_TRUE(state.begin(MotionKind::Linear).status ==
|
||||
MotionStartStatus::Stopping);
|
||||
CHECK_TRUE(!state.waitForOwnerExit(
|
||||
joint.token, std::chrono::milliseconds(1)));
|
||||
CHECK_TRUE(!state.completeStop());
|
||||
|
||||
state.finish(joint.token);
|
||||
CHECK_TRUE(state.waitForOwnerExit(
|
||||
joint.token, std::chrono::milliseconds(1)));
|
||||
CHECK_TRUE(state.completeStop());
|
||||
CHECK_TRUE(
|
||||
state.waitForStopCompletion(
|
||||
joined_stop_joint, std::chrono::milliseconds(1)) ==
|
||||
StopWaitStatus::Completed);
|
||||
CHECK_TRUE(!state.busy());
|
||||
|
||||
const auto linear = state.begin(MotionKind::Linear);
|
||||
CHECK_TRUE(linear.started());
|
||||
CHECK_TRUE(!state.cancelled(linear.token));
|
||||
// A delayed guard from the cancelled command must not release a newer one.
|
||||
state.finish(joint.token);
|
||||
CHECK_TRUE(state.busy());
|
||||
state.finish(linear.token, MotionFinishMode::Clear);
|
||||
CHECK_TRUE(!state.busy());
|
||||
|
||||
const auto speed_joint = state.begin(MotionKind::Joint);
|
||||
CHECK_TRUE(speed_joint.started());
|
||||
state.finish(speed_joint.token, MotionFinishMode::Retain);
|
||||
CHECK_TRUE(state.busy());
|
||||
CHECK_TRUE(state.begin(MotionKind::Linear).status ==
|
||||
MotionStartStatus::Busy);
|
||||
const auto rejected_speed_update =
|
||||
state.begin(MotionKind::Joint, true);
|
||||
CHECK_TRUE(rejected_speed_update.started());
|
||||
state.finish(
|
||||
rejected_speed_update.token,
|
||||
MotionFinishMode::RestorePrevious);
|
||||
const auto stop_speed = state.beginStop();
|
||||
CHECK_TRUE(stop_speed.started());
|
||||
CHECK_TRUE(stop_speed.kind == MotionKind::Joint);
|
||||
CHECK_TRUE(stop_speed.tracked_motion);
|
||||
CHECK_TRUE(state.completeStop());
|
||||
CHECK_TRUE(!state.busy());
|
||||
|
||||
const auto idle_stop = state.beginStop();
|
||||
CHECK_TRUE(idle_stop.kind == MotionKind::None);
|
||||
CHECK_TRUE(!idle_stop.tracked_motion);
|
||||
const auto joined_idle_stop = state.beginStop();
|
||||
CHECK_TRUE(joined_idle_stop.status ==
|
||||
StopStartStatus::AlreadyStopping);
|
||||
state.failStop();
|
||||
CHECK_TRUE(
|
||||
state.waitForStopCompletion(
|
||||
joined_idle_stop, std::chrono::milliseconds(1)) ==
|
||||
StopWaitStatus::Failed);
|
||||
const auto retry_idle_stop = state.beginStop();
|
||||
CHECK_TRUE(retry_idle_stop.kind == MotionKind::None);
|
||||
CHECK_TRUE(!retry_idle_stop.tracked_motion);
|
||||
CHECK_TRUE(state.completeStop());
|
||||
|
||||
const auto mismatched_stop_motion = state.begin(MotionKind::Linear);
|
||||
CHECK_TRUE(mismatched_stop_motion.started());
|
||||
const auto mismatched_stop = state.beginStop(MotionKind::Joint);
|
||||
CHECK_TRUE(mismatched_stop.kind == MotionKind::Linear);
|
||||
state.finish(mismatched_stop_motion.token);
|
||||
CHECK_TRUE(state.completeStop());
|
||||
|
||||
const auto uncertain_motion = state.begin(MotionKind::Joint);
|
||||
CHECK_TRUE(uncertain_motion.started());
|
||||
state.failMotion(uncertain_motion.token);
|
||||
CHECK_TRUE(state.busy());
|
||||
CHECK_TRUE(state.begin(MotionKind::Linear).status ==
|
||||
MotionStartStatus::Blocked);
|
||||
const auto stop_uncertain = state.beginStop();
|
||||
CHECK_TRUE(stop_uncertain.kind == MotionKind::Joint);
|
||||
CHECK_TRUE(stop_uncertain.tracked_motion);
|
||||
CHECK_TRUE(state.completeStop());
|
||||
|
||||
const auto failed_stop_motion = state.begin(MotionKind::Linear);
|
||||
CHECK_TRUE(failed_stop_motion.started());
|
||||
const auto failed_stop = state.beginStop();
|
||||
CHECK_TRUE(failed_stop.kind == MotionKind::Linear);
|
||||
state.failStop();
|
||||
CHECK_TRUE(state.busy());
|
||||
CHECK_TRUE(state.begin(MotionKind::Joint).status ==
|
||||
MotionStartStatus::Blocked);
|
||||
state.finish(failed_stop_motion.token);
|
||||
|
||||
const auto retry = state.beginStop();
|
||||
CHECK_TRUE(retry.started());
|
||||
CHECK_TRUE(retry.kind == MotionKind::Linear);
|
||||
CHECK_TRUE(state.completeStop());
|
||||
const auto recovered = state.begin(MotionKind::Joint);
|
||||
CHECK_TRUE(recovered.started());
|
||||
state.finish(recovered.token, MotionFinishMode::Clear);
|
||||
|
||||
const auto safety_motion = state.begin(MotionKind::Linear);
|
||||
CHECK_TRUE(safety_motion.started());
|
||||
const auto safety_cancel = state.cancelActiveForSafety();
|
||||
CHECK_TRUE(safety_cancel.kind == MotionKind::Linear);
|
||||
CHECK_TRUE(safety_cancel.tracked_motion);
|
||||
CHECK_TRUE(state.cancelled(safety_motion.token));
|
||||
CHECK_TRUE(state.begin(MotionKind::Joint).status ==
|
||||
MotionStartStatus::Blocked);
|
||||
state.finish(safety_motion.token);
|
||||
const auto safety_stop = state.beginStop();
|
||||
CHECK_TRUE(safety_stop.started());
|
||||
CHECK_TRUE(safety_stop.kind == MotionKind::Linear);
|
||||
CHECK_TRUE(state.completeStop());
|
||||
|
||||
const auto retained_speed = state.begin(MotionKind::Joint);
|
||||
CHECK_TRUE(retained_speed.started());
|
||||
state.finish(retained_speed.token, MotionFinishMode::Retain);
|
||||
const auto retained_cancel = state.cancelActiveForSafety();
|
||||
CHECK_TRUE(retained_cancel.kind == MotionKind::Joint);
|
||||
CHECK_TRUE(retained_cancel.tracked_motion);
|
||||
CHECK_TRUE(!retained_cancel.active_token.valid());
|
||||
CHECK_TRUE(state.begin(MotionKind::Linear).status ==
|
||||
MotionStartStatus::Blocked);
|
||||
const auto retained_stop = state.beginStop();
|
||||
CHECK_TRUE(retained_stop.started());
|
||||
CHECK_TRUE(retained_stop.kind == MotionKind::Joint);
|
||||
CHECK_TRUE(retained_stop.tracked_motion);
|
||||
CHECK_TRUE(state.completeStop());
|
||||
|
||||
// A waiter keeps the completion for the stop it joined even when another
|
||||
// stop starts and finishes before the waiter is scheduled again.
|
||||
const auto concurrent_first_stop = state.beginStop();
|
||||
CHECK_TRUE(concurrent_first_stop.started());
|
||||
const auto concurrent_first_join = state.beginStop();
|
||||
CHECK_TRUE(concurrent_first_join.status ==
|
||||
StopStartStatus::AlreadyStopping);
|
||||
std::atomic<bool> waiter_entered{false};
|
||||
std::atomic<StopWaitStatus> first_wait_result{
|
||||
StopWaitStatus::Timeout};
|
||||
std::thread first_waiter([&]() {
|
||||
waiter_entered.store(true, std::memory_order_release);
|
||||
first_wait_result.store(
|
||||
state.waitForStopCompletion(
|
||||
concurrent_first_join,
|
||||
std::chrono::milliseconds(500)),
|
||||
std::memory_order_release);
|
||||
});
|
||||
while (!waiter_entered.load(std::memory_order_acquire)) {
|
||||
std::this_thread::yield();
|
||||
}
|
||||
|
||||
const bool concurrent_first_completed = state.completeStop();
|
||||
const auto concurrent_second_stop = state.beginStop();
|
||||
const auto concurrent_second_join = state.beginStop();
|
||||
state.failStop();
|
||||
first_waiter.join();
|
||||
|
||||
CHECK_TRUE(concurrent_first_completed);
|
||||
CHECK_TRUE(concurrent_second_stop.started());
|
||||
CHECK_TRUE(concurrent_second_join.status ==
|
||||
StopStartStatus::AlreadyStopping);
|
||||
CHECK_TRUE(first_wait_result.load(std::memory_order_acquire) ==
|
||||
StopWaitStatus::Completed);
|
||||
CHECK_TRUE(
|
||||
state.waitForStopCompletion(
|
||||
concurrent_second_join, std::chrono::milliseconds(1)) ==
|
||||
StopWaitStatus::Failed);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1,156 +0,0 @@
|
||||
#include "devices/arm/aubo_arm/aubo_safety_state.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace {
|
||||
|
||||
#define CHECK_TRUE(condition) \
|
||||
do { \
|
||||
if (!(condition)) { \
|
||||
std::cerr << "CHECK_TRUE failed at line " << __LINE__ << ": " \
|
||||
<< #condition << std::endl; \
|
||||
return 1; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace cmvr::device::aubo_internal;
|
||||
|
||||
SafetyState state;
|
||||
CHECK_TRUE(!state.tryPermit().has_value());
|
||||
|
||||
state.observe(SafetyCondition::Normal);
|
||||
const auto initial_permit = state.tryPermit();
|
||||
CHECK_TRUE(initial_permit.has_value());
|
||||
CHECK_TRUE(state.validate(*initial_permit));
|
||||
|
||||
CHECK_TRUE(effectiveSafetyCondition(SafetyCondition::Normal, 1) ==
|
||||
SafetyCondition::RobotEmergencyStop);
|
||||
CHECK_TRUE(effectiveSafetyCondition(SafetyCondition::Normal, -1) ==
|
||||
SafetyCondition::Unknown);
|
||||
CHECK_TRUE(effectiveSafetyCondition(SafetyCondition::Reduced, 0) ==
|
||||
SafetyCondition::Reduced);
|
||||
CHECK_TRUE(needsProtectiveUnlock(SafetyCondition::ProtectiveStop));
|
||||
CHECK_TRUE(needsProtectiveUnlock(SafetyCondition::Violation));
|
||||
CHECK_TRUE(!needsProtectiveUnlock(SafetyCondition::SafeguardStop));
|
||||
CHECK_TRUE(needsInterfaceBoardRestart(
|
||||
SafetyCondition::RobotEmergencyStop));
|
||||
CHECK_TRUE(needsInterfaceBoardRestart(
|
||||
SafetyCondition::SystemEmergencyStop));
|
||||
CHECK_TRUE(needsInterfaceBoardRestart(SafetyCondition::Fault));
|
||||
CHECK_TRUE(!needsInterfaceBoardRestart(SafetyCondition::Recovery));
|
||||
|
||||
state.observe(SafetyCondition::RobotEmergencyStop);
|
||||
CHECK_TRUE(!state.validate(*initial_permit));
|
||||
CHECK_TRUE(state.snapshot().latched);
|
||||
CHECK_TRUE(!state.beginRecovery(state.snapshot().epoch).has_value());
|
||||
|
||||
// The observed level alone does not unlock motion. The monitor must first
|
||||
// prove the old controller operation is fully quiescent.
|
||||
state.observe(SafetyCondition::Normal);
|
||||
CHECK_TRUE(state.snapshot().latched);
|
||||
CHECK_TRUE(!state.tryPermit().has_value());
|
||||
CHECK_TRUE(!shouldAutoRecoverHardwareEmergencyStop(
|
||||
state.snapshot(), false, 0, true, false));
|
||||
CHECK_TRUE(shouldAutoRecoverHardwareEmergencyStop(
|
||||
state.snapshot(), true, 0, true, false));
|
||||
CHECK_TRUE(!shouldAutoRecoverHardwareEmergencyStop(
|
||||
state.snapshot(), true, 0, false, false));
|
||||
CHECK_TRUE(!shouldAutoRecoverHardwareEmergencyStop(
|
||||
state.snapshot(), true, 0, true, true));
|
||||
|
||||
const auto recovery = state.beginRecovery(state.snapshot().epoch);
|
||||
CHECK_TRUE(recovery.has_value());
|
||||
CHECK_TRUE(!state.completeRecovery(*recovery, true, true, false));
|
||||
state.failRecovery(*recovery);
|
||||
|
||||
const auto retry = state.beginRecovery(state.snapshot().epoch);
|
||||
CHECK_TRUE(retry.has_value());
|
||||
// Automatic release is not committed at Idle/PowerOn. The controller
|
||||
// must have completed startup and reached Running first.
|
||||
CHECK_TRUE(!state.completeHardwareEmergencyStopRecovery(
|
||||
*retry, false, true, true));
|
||||
CHECK_TRUE(!state.completeHardwareEmergencyStopRecovery(
|
||||
*retry, true, false, true));
|
||||
CHECK_TRUE(state.completeHardwareEmergencyStopRecovery(
|
||||
*retry, true, true, true));
|
||||
const auto recovered_permit = state.tryPermit();
|
||||
CHECK_TRUE(recovered_permit.has_value());
|
||||
CHECK_TRUE(state.validate(*recovered_permit));
|
||||
|
||||
// Some AUBO cabinets drop the SDK connection while the physical E-stop is
|
||||
// pressed. Losing the monitor sample must not erase the hardware E-stop
|
||||
// latch; otherwise releasing the switch back to Normal would never trigger
|
||||
// automatic power-on.
|
||||
state.observe(SafetyCondition::RobotEmergencyStop);
|
||||
const auto estop_epoch = state.snapshot().epoch;
|
||||
state.observe(SafetyCondition::Unknown);
|
||||
CHECK_TRUE(state.snapshot().latched);
|
||||
CHECK_TRUE(state.snapshot().latched_reason ==
|
||||
SafetyCondition::RobotEmergencyStop);
|
||||
CHECK_TRUE(state.snapshot().epoch == estop_epoch);
|
||||
state.observe(SafetyCondition::Normal);
|
||||
CHECK_TRUE(shouldAutoRecoverHardwareEmergencyStop(
|
||||
state.snapshot(), true, 0, true, false));
|
||||
const auto disconnected_recovery = state.beginRecovery(
|
||||
state.snapshot().epoch);
|
||||
CHECK_TRUE(disconnected_recovery.has_value());
|
||||
CHECK_TRUE(state.completeHardwareEmergencyStopRecovery(
|
||||
*disconnected_recovery, true, true, true));
|
||||
|
||||
// Releasing a real E-stop must never clear a software-triggered stop that
|
||||
// was latched while the hardware input was active.
|
||||
state.observe(SafetyCondition::RobotEmergencyStop);
|
||||
state.observe(SafetyCondition::SoftwareEmergencyStop);
|
||||
// The hardware monitor continues publishing the physical E-stop level
|
||||
// until the switch is released. It must not overwrite the software latch.
|
||||
state.observe(SafetyCondition::RobotEmergencyStop);
|
||||
state.observe(SafetyCondition::Normal);
|
||||
CHECK_TRUE(!shouldAutoRecoverHardwareEmergencyStop(
|
||||
state.snapshot(), true, 0, true, false));
|
||||
CHECK_TRUE(state.snapshot().software_emergency_stop_latched);
|
||||
CHECK_TRUE(state.snapshot().latched_reason ==
|
||||
SafetyCondition::SoftwareEmergencyStop);
|
||||
const auto software_recovery = state.beginRecovery(
|
||||
state.snapshot().epoch);
|
||||
CHECK_TRUE(software_recovery.has_value());
|
||||
CHECK_TRUE(!state.completeHardwareEmergencyStopRecovery(
|
||||
*software_recovery, true, true, true));
|
||||
state.failRecovery(*software_recovery);
|
||||
const auto explicit_software_recovery = state.beginRecovery(
|
||||
state.snapshot().epoch);
|
||||
CHECK_TRUE(explicit_software_recovery.has_value());
|
||||
CHECK_TRUE(state.completeRecovery(
|
||||
*explicit_software_recovery, true, true, true));
|
||||
CHECK_TRUE(!state.snapshot().software_emergency_stop_latched);
|
||||
|
||||
// A new safety event invalidates an in-flight recovery token.
|
||||
state.observe(SafetyCondition::ProtectiveStop);
|
||||
state.observe(SafetyCondition::Reduced);
|
||||
const auto stale_recovery = state.beginRecovery(
|
||||
state.snapshot().epoch);
|
||||
CHECK_TRUE(stale_recovery.has_value());
|
||||
CHECK_TRUE(!state.completeHardwareEmergencyStopRecovery(
|
||||
*stale_recovery, true, true, true));
|
||||
state.failRecovery(*stale_recovery);
|
||||
const auto explicit_recovery = state.beginRecovery(
|
||||
state.snapshot().epoch);
|
||||
CHECK_TRUE(explicit_recovery.has_value());
|
||||
state.observe(SafetyCondition::SafeguardStop);
|
||||
state.observe(SafetyCondition::Normal);
|
||||
CHECK_TRUE(!state.completeRecovery(
|
||||
*explicit_recovery, true, true, true));
|
||||
CHECK_TRUE(state.snapshot().latched);
|
||||
|
||||
// An old API call must not begin recovery for a newer safety event.
|
||||
const auto stale_epoch = state.snapshot().epoch;
|
||||
state.observe(SafetyCondition::RobotEmergencyStop);
|
||||
state.observe(SafetyCondition::Normal);
|
||||
CHECK_TRUE(!state.beginRecovery(stale_epoch).has_value());
|
||||
CHECK_TRUE(!state.snapshot().recovery_in_progress);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -29,49 +29,3 @@ add_library(cmvr_es::device::huayan_arm ALIAS huayan_arm)
|
||||
|
||||
install(TARGETS huayan_arm LIBRARY DESTINATION lib)
|
||||
install(FILES ${HUAYAN_ARM_SDK_DIR}/lib/libHR_Pro.so DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(huayan_lifecycle_state_test
|
||||
tests/huayan_lifecycle_state_test.cpp
|
||||
)
|
||||
target_include_directories(huayan_lifecycle_state_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(huayan_lifecycle_state_test
|
||||
PRIVATE
|
||||
Threads::Threads
|
||||
)
|
||||
add_test(
|
||||
NAME huayan_lifecycle_state_test
|
||||
COMMAND huayan_lifecycle_state_test
|
||||
)
|
||||
set_tests_properties(huayan_lifecycle_state_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
add_executable(huayan_arm_sdk_test
|
||||
tests/huayan_arm_sdk_test.cpp
|
||||
)
|
||||
target_include_directories(huayan_arm_sdk_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
${HUAYAN_ARM_SDK_DIR}/include
|
||||
)
|
||||
target_link_libraries(huayan_arm_sdk_test
|
||||
PRIVATE
|
||||
cmvr_es::device::huayan_arm
|
||||
Threads::Threads
|
||||
)
|
||||
# Export the fake HRIF_* definitions so libhuayan_arm resolves its SDK
|
||||
# calls to the deterministic test controller instead of real hardware.
|
||||
target_link_options(huayan_arm_sdk_test PRIVATE -Wl,--export-dynamic)
|
||||
add_test(
|
||||
NAME huayan_arm_sdk_test
|
||||
COMMAND huayan_arm_sdk_test
|
||||
)
|
||||
set_tests_properties(huayan_arm_sdk_test PROPERTIES
|
||||
TIMEOUT 20
|
||||
ENVIRONMENT "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -1,874 +0,0 @@
|
||||
#include "devices/arm/huayan_arm/huayan_arm.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <cmath>
|
||||
#include <future>
|
||||
#include <iostream>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include "HR_Pro.h"
|
||||
|
||||
namespace {
|
||||
|
||||
using Clock = std::chrono::steady_clock;
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
constexpr double kPi = 3.14159265358979323846;
|
||||
|
||||
double radToDeg(const double value)
|
||||
{
|
||||
return value * 180.0 / kPi;
|
||||
}
|
||||
|
||||
struct FakeSdkState final {
|
||||
std::mutex mutex;
|
||||
bool connected{false};
|
||||
bool enabled{true};
|
||||
bool electrified{true};
|
||||
bool robot_error{false};
|
||||
bool paused{false};
|
||||
bool emergency_input{false};
|
||||
bool emergency_signal_fault{false};
|
||||
bool safeguard_input{false};
|
||||
bool safeguard_signal_fault{false};
|
||||
bool software_safeguard{false};
|
||||
|
||||
bool motion_active{false};
|
||||
bool motion_is_joint{true};
|
||||
bool stop_pending{false};
|
||||
bool hold_next_motion{false};
|
||||
bool stale_done_once{false};
|
||||
Clock::time_point completion_at{};
|
||||
Clock::time_point stop_complete_at{};
|
||||
std::array<double, 6> joint_position_deg{};
|
||||
std::array<double, 6> joint_target_deg{};
|
||||
std::array<double, 6> tcp_position_hr{};
|
||||
std::array<double, 6> tcp_target_hr{};
|
||||
std::string waypoint_id;
|
||||
|
||||
bool servo_started{false};
|
||||
bool program_running{false};
|
||||
std::string selected_program;
|
||||
|
||||
int move_j_calls{0};
|
||||
int move_l_calls{0};
|
||||
int speed_j_calls{0};
|
||||
int speed_l_calls{0};
|
||||
int group_stop_calls{0};
|
||||
int group_reset_calls{0};
|
||||
int start_servo_calls{0};
|
||||
int stop_script_calls{0};
|
||||
int idle_velocity_reads_after_stop{0};
|
||||
bool count_idle_reads{false};
|
||||
|
||||
void refreshLocked()
|
||||
{
|
||||
const auto now = Clock::now();
|
||||
const bool safety_active = emergency_input || safeguard_input ||
|
||||
software_safeguard;
|
||||
|
||||
if (stop_pending && now >= stop_complete_at) {
|
||||
stop_pending = false;
|
||||
motion_active = false;
|
||||
stale_done_once = false;
|
||||
count_idle_reads = true;
|
||||
}
|
||||
|
||||
if (motion_active && !stop_pending && !safety_active &&
|
||||
completion_at != Clock::time_point{} && now >= completion_at) {
|
||||
motion_active = false;
|
||||
stale_done_once = false;
|
||||
if (motion_is_joint) {
|
||||
joint_position_deg = joint_target_deg;
|
||||
} else {
|
||||
tcp_position_hr = tcp_target_hr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool movingLocked()
|
||||
{
|
||||
refreshLocked();
|
||||
return motion_active && !emergency_input && !safeguard_input &&
|
||||
!software_safeguard;
|
||||
}
|
||||
|
||||
bool doneLocked()
|
||||
{
|
||||
refreshLocked();
|
||||
return !motion_active;
|
||||
}
|
||||
|
||||
void startMotionLocked(const bool joint)
|
||||
{
|
||||
motion_active = true;
|
||||
motion_is_joint = joint;
|
||||
stop_pending = false;
|
||||
count_idle_reads = false;
|
||||
stale_done_once = true;
|
||||
if (hold_next_motion) {
|
||||
// The fallback deadline keeps a failed test from leaving a worker
|
||||
// blocked for the production 60 second timeout.
|
||||
completion_at = Clock::now() + 3s;
|
||||
hold_next_motion = false;
|
||||
} else {
|
||||
completion_at = Clock::now() + 120ms;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
FakeSdkState g_sdk;
|
||||
|
||||
void resetFakeSdk()
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.connected = false;
|
||||
g_sdk.enabled = true;
|
||||
g_sdk.electrified = true;
|
||||
g_sdk.robot_error = false;
|
||||
g_sdk.paused = false;
|
||||
g_sdk.emergency_input = false;
|
||||
g_sdk.emergency_signal_fault = false;
|
||||
g_sdk.safeguard_input = false;
|
||||
g_sdk.safeguard_signal_fault = false;
|
||||
g_sdk.software_safeguard = false;
|
||||
g_sdk.motion_active = false;
|
||||
g_sdk.motion_is_joint = true;
|
||||
g_sdk.stop_pending = false;
|
||||
g_sdk.hold_next_motion = false;
|
||||
g_sdk.stale_done_once = false;
|
||||
g_sdk.completion_at = {};
|
||||
g_sdk.stop_complete_at = {};
|
||||
g_sdk.joint_position_deg = {};
|
||||
g_sdk.joint_target_deg = {};
|
||||
g_sdk.tcp_position_hr = {};
|
||||
g_sdk.tcp_target_hr = {};
|
||||
g_sdk.waypoint_id.clear();
|
||||
g_sdk.servo_started = false;
|
||||
g_sdk.program_running = false;
|
||||
g_sdk.selected_program.clear();
|
||||
g_sdk.move_j_calls = 0;
|
||||
g_sdk.move_l_calls = 0;
|
||||
g_sdk.speed_j_calls = 0;
|
||||
g_sdk.speed_l_calls = 0;
|
||||
g_sdk.group_stop_calls = 0;
|
||||
g_sdk.group_reset_calls = 0;
|
||||
g_sdk.start_servo_calls = 0;
|
||||
g_sdk.stop_script_calls = 0;
|
||||
g_sdk.idle_velocity_reads_after_stop = 0;
|
||||
g_sdk.count_idle_reads = false;
|
||||
}
|
||||
|
||||
void holdNextMotion()
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.hold_next_motion = true;
|
||||
}
|
||||
|
||||
void setHardwareEmergencyStop(const bool active)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.emergency_input = active;
|
||||
// If the wrapper never sends a real group Stop, releasing the switch makes
|
||||
// the pending fake waypoint move again. This models the field failure.
|
||||
}
|
||||
|
||||
void setEmergencySignalFault(const bool active)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.emergency_signal_fault = active;
|
||||
}
|
||||
|
||||
void dropFakeTransport()
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.connected = false;
|
||||
}
|
||||
|
||||
template <typename Predicate>
|
||||
bool waitUntil(Predicate&& predicate,
|
||||
const std::chrono::milliseconds timeout = 2s)
|
||||
{
|
||||
const auto deadline = Clock::now() + timeout;
|
||||
while (Clock::now() < deadline) {
|
||||
if (predicate()) {
|
||||
return true;
|
||||
}
|
||||
std::this_thread::sleep_for(10ms);
|
||||
}
|
||||
return predicate();
|
||||
}
|
||||
|
||||
cmvr::config::RobotArmConfig makeConfig()
|
||||
{
|
||||
cmvr::config::RobotArmConfig cfg;
|
||||
cfg.set_id("huayan_fake_sdk");
|
||||
auto* vendor = cfg.mutable_vendor();
|
||||
vendor->set_brand(cmvr::config::VENDOR_ROBOT_ARM_BRAND_HUAYAN_ARM);
|
||||
vendor->set_ip("127.0.0.1");
|
||||
vendor->set_port(10003);
|
||||
vendor->set_model("HuayanFake");
|
||||
vendor->set_dof(6);
|
||||
vendor->set_base_frame("Base");
|
||||
vendor->set_tool_frame("TCP");
|
||||
for (int i = 1; i <= 6; ++i) {
|
||||
vendor->add_joint_names("joint_" + std::to_string(i));
|
||||
}
|
||||
return cfg;
|
||||
}
|
||||
|
||||
int failures = 0;
|
||||
|
||||
#define CHECK_TRUE(condition) \
|
||||
do { \
|
||||
if (!(condition)) { \
|
||||
std::cerr << "CHECK_TRUE failed at line " << __LINE__ << ": " \
|
||||
<< #condition << std::endl; \
|
||||
++failures; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
} // namespace
|
||||
|
||||
// The test executable exports these strong symbols. On ELF platforms they
|
||||
// interpose the real SDK definitions used by libhuayan_arm, giving the test a
|
||||
// deterministic controller without opening a network connection.
|
||||
extern "C" {
|
||||
|
||||
int HRIF_Connect(unsigned int, const char*, unsigned short)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.connected = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_DisConnect(unsigned int)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.connected = false;
|
||||
g_sdk.motion_active = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool HRIF_IsConnected(unsigned int)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
return g_sdk.connected;
|
||||
}
|
||||
|
||||
int HRIF_GetErrorCodeStr(unsigned int, int error_code, std::string& message)
|
||||
{
|
||||
message = "fake SDK error " + std::to_string(error_code);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_GrpEnable(unsigned int, unsigned int)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
if (g_sdk.emergency_input || g_sdk.safeguard_input ||
|
||||
g_sdk.software_safeguard) {
|
||||
return 101;
|
||||
}
|
||||
g_sdk.enabled = true;
|
||||
g_sdk.electrified = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_GrpDisable(unsigned int, unsigned int)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.enabled = false;
|
||||
g_sdk.electrified = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_GrpReset(unsigned int, unsigned int)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
++g_sdk.group_reset_calls;
|
||||
if (g_sdk.emergency_input || g_sdk.safeguard_input ||
|
||||
g_sdk.software_safeguard) {
|
||||
return 102;
|
||||
}
|
||||
g_sdk.robot_error = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_GrpStop(unsigned int, unsigned int)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
++g_sdk.group_stop_calls;
|
||||
g_sdk.idle_velocity_reads_after_stop = 0;
|
||||
g_sdk.count_idle_reads = false;
|
||||
if (g_sdk.motion_active) {
|
||||
g_sdk.stop_pending = true;
|
||||
g_sdk.stop_complete_at = Clock::now() + 120ms;
|
||||
g_sdk.completion_at = {};
|
||||
} else {
|
||||
g_sdk.stop_pending = false;
|
||||
g_sdk.count_idle_reads = true;
|
||||
}
|
||||
g_sdk.servo_started = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_SetOverride(unsigned int, unsigned int, double)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_ReadRobotState(unsigned int, unsigned int,
|
||||
int& moving, int& enabled, int& error,
|
||||
int& error_code, int& error_axis, int& brake,
|
||||
int& paused, int& emergency_stop, int& safeguard,
|
||||
int& electrified, int& connected_to_box,
|
||||
int& blending_done, int& in_position)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
if (!g_sdk.connected) {
|
||||
return 201;
|
||||
}
|
||||
moving = g_sdk.movingLocked() ? 1 : 0;
|
||||
enabled = g_sdk.enabled ? 1 : 0;
|
||||
error = g_sdk.robot_error ? 1 : 0;
|
||||
error_code = g_sdk.robot_error ? 9001 : 0;
|
||||
error_axis = 0;
|
||||
brake = g_sdk.enabled ? 1 : 0;
|
||||
paused = g_sdk.paused ? 1 : 0;
|
||||
emergency_stop = g_sdk.emergency_input ? 1 : 0;
|
||||
safeguard = (g_sdk.safeguard_input || g_sdk.software_safeguard) ? 1 : 0;
|
||||
electrified = g_sdk.electrified ? 1 : 0;
|
||||
connected_to_box = 1;
|
||||
blending_done = moving == 0 ? 1 : 0;
|
||||
in_position = g_sdk.doneLocked() ? 1 : 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_ReadEmergencyInfo(unsigned int, unsigned int,
|
||||
int& emergency_signal_fault,
|
||||
int& emergency_input,
|
||||
int& safeguard_signal_fault,
|
||||
int& safeguard_input)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
if (!g_sdk.connected) {
|
||||
return 202;
|
||||
}
|
||||
emergency_signal_fault = g_sdk.emergency_signal_fault ? 1 : 0;
|
||||
emergency_input = g_sdk.emergency_input ? 1 : 0;
|
||||
safeguard_signal_fault = g_sdk.safeguard_signal_fault ? 1 : 0;
|
||||
safeguard_input =
|
||||
(g_sdk.safeguard_input || g_sdk.software_safeguard) ? 1 : 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_ReadCurWaypointID(unsigned int, unsigned int, std::string& waypoint)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
waypoint = g_sdk.waypoint_id;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_IsMotionDone(unsigned int, unsigned int, bool& done)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
if (g_sdk.stale_done_once) {
|
||||
g_sdk.stale_done_once = false;
|
||||
done = true;
|
||||
} else {
|
||||
done = g_sdk.doneLocked();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_ReadActJointPos(unsigned int, unsigned int,
|
||||
double& j1, double& j2, double& j3,
|
||||
double& j4, double& j5, double& j6)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.refreshLocked();
|
||||
j1 = g_sdk.joint_position_deg[0];
|
||||
j2 = g_sdk.joint_position_deg[1];
|
||||
j3 = g_sdk.joint_position_deg[2];
|
||||
j4 = g_sdk.joint_position_deg[3];
|
||||
j5 = g_sdk.joint_position_deg[4];
|
||||
j6 = g_sdk.joint_position_deg[5];
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_ReadActJointVel(unsigned int, unsigned int,
|
||||
double& j1, double& j2, double& j3,
|
||||
double& j4, double& j5, double& j6)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
const double velocity = g_sdk.movingLocked() ? 5.0 : 0.0;
|
||||
j1 = j2 = j3 = j4 = j5 = j6 = velocity;
|
||||
if (velocity == 0.0 && g_sdk.count_idle_reads) {
|
||||
++g_sdk.idle_velocity_reads_after_stop;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_ReadActTcpPos(unsigned int, unsigned int,
|
||||
double& x, double& y, double& z,
|
||||
double& rx, double& ry, double& rz)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.refreshLocked();
|
||||
x = g_sdk.tcp_position_hr[0];
|
||||
y = g_sdk.tcp_position_hr[1];
|
||||
z = g_sdk.tcp_position_hr[2];
|
||||
rx = g_sdk.tcp_position_hr[3];
|
||||
ry = g_sdk.tcp_position_hr[4];
|
||||
rz = g_sdk.tcp_position_hr[5];
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_ReadActTcpVel(unsigned int, unsigned int,
|
||||
double& x, double& y, double& z,
|
||||
double& rx, double& ry, double& rz)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
const double velocity = g_sdk.movingLocked() ? 5.0 : 0.0;
|
||||
x = y = z = rx = ry = rz = velocity;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_MoveJ(unsigned int, unsigned int,
|
||||
double, double, double, double, double, double,
|
||||
double j1, double j2, double j3,
|
||||
double j4, double j5, double j6,
|
||||
std::string, std::string, double, double, double,
|
||||
int, int, int, int, std::string command_id)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
++g_sdk.move_j_calls;
|
||||
g_sdk.joint_target_deg = {j1, j2, j3, j4, j5, j6};
|
||||
g_sdk.waypoint_id = std::move(command_id);
|
||||
g_sdk.startMotionLocked(true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_MoveL(unsigned int, unsigned int,
|
||||
double x, double y, double z,
|
||||
double rx, double ry, double rz,
|
||||
double, double, double, double, double, double,
|
||||
std::string, std::string, double, double, double,
|
||||
int, int, int, std::string command_id)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
++g_sdk.move_l_calls;
|
||||
g_sdk.tcp_target_hr = {x, y, z, rx, ry, rz};
|
||||
g_sdk.waypoint_id = std::move(command_id);
|
||||
g_sdk.startMotionLocked(false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_SpeedJ(unsigned int, unsigned int,
|
||||
double, double, double, double, double, double,
|
||||
double, double)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
++g_sdk.speed_j_calls;
|
||||
g_sdk.startMotionLocked(true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_SpeedL(unsigned int, unsigned int,
|
||||
double, double, double, double, double, double,
|
||||
double, double, double)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
++g_sdk.speed_l_calls;
|
||||
g_sdk.startMotionLocked(false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_StartServo(unsigned int, unsigned int, double, double)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
++g_sdk.start_servo_calls;
|
||||
g_sdk.servo_started = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_PushServoJ(unsigned int, unsigned int,
|
||||
double j1, double j2, double j3,
|
||||
double j4, double j5, double j6)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
if (!g_sdk.servo_started) {
|
||||
return 301;
|
||||
}
|
||||
g_sdk.joint_position_deg = {j1, j2, j3, j4, j5, j6};
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_PushServoP(unsigned int, unsigned int,
|
||||
std::vector<double>& coord,
|
||||
std::vector<double>&,
|
||||
std::vector<double>&)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
if (!g_sdk.servo_started || coord.size() < 6) {
|
||||
return 302;
|
||||
}
|
||||
std::copy_n(coord.begin(), 6, g_sdk.tcp_position_hr.begin());
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_SwitchScript(unsigned int, unsigned int, std::string script_name)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
if (script_name.empty()) {
|
||||
return 401;
|
||||
}
|
||||
g_sdk.selected_program = std::move(script_name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_StartScript(unsigned int)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
if (g_sdk.selected_program.empty()) {
|
||||
return 402;
|
||||
}
|
||||
g_sdk.program_running = true;
|
||||
g_sdk.paused = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_PauseScript(unsigned int)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
if (!g_sdk.program_running) {
|
||||
return 403;
|
||||
}
|
||||
g_sdk.paused = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_StopScript(unsigned int)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
++g_sdk.stop_script_calls;
|
||||
g_sdk.program_running = false;
|
||||
g_sdk.paused = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_EnterSafetyGuard(unsigned int, unsigned int, int flag)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.software_safeguard = flag != 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HRIF_ShutdownRobot(unsigned int)
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
g_sdk.connected = false;
|
||||
g_sdk.enabled = false;
|
||||
g_sdk.electrified = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace cmvr::device;
|
||||
|
||||
resetFakeSdk();
|
||||
HuayanRobot arm(makeConfig());
|
||||
CHECK_TRUE(arm.connect("127.0.0.1", 10003).ok());
|
||||
|
||||
MotionOptions options;
|
||||
options.velocity = 0.4;
|
||||
options.acceleration = 0.8;
|
||||
CHECK_TRUE(arm.supportsActionQueueMotion());
|
||||
|
||||
JointPositionCommand joint_a{{0.10, -0.05, 0.08, 0.0, 0.02, -0.03}};
|
||||
MotionOptions cancelled_options = options;
|
||||
cancelled_options.cancellation_requested = []() { return true; };
|
||||
CHECK_TRUE(!arm.moveJ(joint_a, cancelled_options).ok());
|
||||
CartesianPose cancelled_pose;
|
||||
cancelled_pose.x = 0.20;
|
||||
cancelled_pose.z = 0.30;
|
||||
CHECK_TRUE(!arm.moveL(cancelled_pose, cancelled_options).ok());
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
CHECK_TRUE(g_sdk.move_j_calls == 0);
|
||||
CHECK_TRUE(g_sdk.move_l_calls == 0);
|
||||
}
|
||||
|
||||
// Once a command has been accepted, caller cancellation returns promptly
|
||||
// but retains the typed motion barrier until Stop confirms controller idle.
|
||||
std::atomic<bool> cancel_during_wait{false};
|
||||
MotionOptions cancellable_options = options;
|
||||
cancellable_options.cancellation_requested = [&cancel_during_wait]() {
|
||||
return cancel_during_wait.load();
|
||||
};
|
||||
JointPositionCommand cancelled_in_wait{
|
||||
{0.05, -0.02, 0.04, 0.01, 0.0, -0.01}};
|
||||
holdNextMotion();
|
||||
auto cancelled_motion = std::async(std::launch::async, [&]() {
|
||||
return arm.moveJ(cancelled_in_wait, cancellable_options);
|
||||
});
|
||||
CHECK_TRUE(waitUntil([&]() {
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
return g_sdk.move_j_calls > 0;
|
||||
}));
|
||||
cancel_during_wait.store(true);
|
||||
CHECK_TRUE(cancelled_motion.wait_for(1s) == std::future_status::ready);
|
||||
if (cancelled_motion.wait_for(0ms) == std::future_status::ready) {
|
||||
CHECK_TRUE(!cancelled_motion.get().ok());
|
||||
}
|
||||
CHECK_TRUE(arm.busy());
|
||||
CHECK_TRUE(arm.stopMotion().ok());
|
||||
CHECK_TRUE(!arm.busy());
|
||||
|
||||
// The first IsMotionDone read intentionally reports the preceding idle
|
||||
// state. Completion must be correlated with the command/target. Once the
|
||||
// target is reached, an identical command is an idempotent no-op.
|
||||
CHECK_TRUE(arm.moveJ(joint_a, options).ok());
|
||||
int move_j_after_first = 0;
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
move_j_after_first = g_sdk.move_j_calls;
|
||||
}
|
||||
CHECK_TRUE(arm.moveJ(joint_a, options).ok());
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
CHECK_TRUE(g_sdk.move_j_calls == move_j_after_first);
|
||||
}
|
||||
|
||||
CartesianPose pose_a;
|
||||
pose_a.x = 0.31;
|
||||
pose_a.y = -0.12;
|
||||
pose_a.z = 0.42;
|
||||
pose_a.rx = 0.08;
|
||||
pose_a.ry = -0.04;
|
||||
pose_a.rz = 0.12;
|
||||
CHECK_TRUE(arm.moveL(pose_a, options).ok());
|
||||
int move_l_after_first = 0;
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
move_l_after_first = g_sdk.move_l_calls;
|
||||
}
|
||||
CHECK_TRUE(arm.moveL(pose_a, options).ok());
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
CHECK_TRUE(g_sdk.move_l_calls == move_l_after_first);
|
||||
}
|
||||
|
||||
// Stop must cancel the old owner and wait until the controller reports
|
||||
// stable idle; clearing the owner immediately after GrpStop would fail the
|
||||
// elapsed-time and consecutive-idle checks below.
|
||||
JointPositionCommand joint_b{{0.22, -0.08, 0.14, 0.03, 0.04, -0.01}};
|
||||
holdNextMotion();
|
||||
const int before_held_move = move_j_after_first;
|
||||
auto held_move = std::async(std::launch::async, [&]() {
|
||||
return arm.moveJ(joint_b, options);
|
||||
});
|
||||
CHECK_TRUE(waitUntil([&]() {
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
return g_sdk.move_j_calls > before_held_move;
|
||||
}));
|
||||
const auto stop_started = Clock::now();
|
||||
CHECK_TRUE(arm.stopMotion().ok());
|
||||
const auto stop_elapsed = Clock::now() - stop_started;
|
||||
CHECK_TRUE(stop_elapsed >= 100ms);
|
||||
CHECK_TRUE(held_move.wait_for(1s) == std::future_status::ready);
|
||||
if (held_move.wait_for(0ms) == std::future_status::ready) {
|
||||
CHECK_TRUE(!held_move.get().ok());
|
||||
}
|
||||
CHECK_TRUE(!arm.busy());
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
CHECK_TRUE(g_sdk.idle_velocity_reads_after_stop >= 3);
|
||||
}
|
||||
CHECK_TRUE(arm.moveJ(joint_b, options).ok());
|
||||
|
||||
// A hardware E-stop cancels and terminates the active waypoint. Releasing
|
||||
// the switch does not clear the software latch or grant a new permit.
|
||||
JointPositionCommand joint_c{{0.34, -0.02, 0.09, 0.05, -0.02, 0.07}};
|
||||
holdNextMotion();
|
||||
int before_estop_move = 0;
|
||||
int before_estop_stop = 0;
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
before_estop_move = g_sdk.move_j_calls;
|
||||
before_estop_stop = g_sdk.group_stop_calls;
|
||||
}
|
||||
auto estop_move = std::async(std::launch::async, [&]() {
|
||||
return arm.moveJ(joint_c, options);
|
||||
});
|
||||
CHECK_TRUE(waitUntil([&]() {
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
return g_sdk.move_j_calls > before_estop_move;
|
||||
}));
|
||||
setHardwareEmergencyStop(true);
|
||||
CHECK_TRUE(waitUntil([&]() {
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
return g_sdk.group_stop_calls > before_estop_stop;
|
||||
}));
|
||||
CHECK_TRUE(estop_move.wait_for(2s) == std::future_status::ready);
|
||||
if (estop_move.wait_for(0ms) == std::future_status::ready) {
|
||||
CHECK_TRUE(!estop_move.get().ok());
|
||||
}
|
||||
setHardwareEmergencyStop(false);
|
||||
std::this_thread::sleep_for(150ms);
|
||||
|
||||
int move_count_while_latched = 0;
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
move_count_while_latched = g_sdk.move_j_calls;
|
||||
}
|
||||
const auto rejected_while_latched = arm.moveJ(joint_a, options);
|
||||
CHECK_TRUE(!rejected_while_latched.ok());
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
CHECK_TRUE(g_sdk.move_j_calls == move_count_while_latched);
|
||||
}
|
||||
CHECK_TRUE(arm.clearFault().ok());
|
||||
CHECK_TRUE(arm.torqueOn().ok());
|
||||
CHECK_TRUE(arm.moveJ(joint_a, options).ok());
|
||||
|
||||
// Speed commands own the controller while waiting. A different motion is
|
||||
// rejected, and Stop releases ownership only after termination.
|
||||
holdNextMotion();
|
||||
JointVelocityCommand speed{{0.1, 0.0, 0.0, 0.0, 0.0, 0.0}};
|
||||
int speed_calls_before = 0;
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
speed_calls_before = g_sdk.speed_j_calls;
|
||||
}
|
||||
auto speed_motion = std::async(std::launch::async, [&]() {
|
||||
return arm.speedJ(speed, 0.5, 2.0);
|
||||
});
|
||||
CHECK_TRUE(waitUntil([&]() {
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
return g_sdk.speed_j_calls > speed_calls_before;
|
||||
}));
|
||||
CHECK_TRUE(!arm.moveL(pose_a, options).ok());
|
||||
CHECK_TRUE(arm.stopMotion().ok());
|
||||
CHECK_TRUE(speed_motion.wait_for(1s) == std::future_status::ready);
|
||||
if (speed_motion.wait_for(0ms) == std::future_status::ready) {
|
||||
CHECK_TRUE(!speed_motion.get().ok());
|
||||
}
|
||||
CHECK_TRUE(!arm.busy());
|
||||
|
||||
// SpeedL used to hold the SDK mutex while waiting, which deadlocked its
|
||||
// own timeout/Stop path. A concurrent Stop must cancel it, settle the
|
||||
// controller, and allow a genuinely new Move command afterwards.
|
||||
holdNextMotion();
|
||||
CartesianVelocity line_speed;
|
||||
line_speed.vx = 0.05;
|
||||
int speed_l_calls_before = 0;
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
speed_l_calls_before = g_sdk.speed_l_calls;
|
||||
}
|
||||
auto line_speed_motion = std::async(std::launch::async, [&]() {
|
||||
return arm.speedL(line_speed, 0.5, 2.0, FrameType::Base);
|
||||
});
|
||||
CHECK_TRUE(waitUntil([&]() {
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
return g_sdk.speed_l_calls > speed_l_calls_before;
|
||||
}));
|
||||
CHECK_TRUE(arm.stopMotion().ok());
|
||||
CHECK_TRUE(line_speed_motion.wait_for(1s) == std::future_status::ready);
|
||||
if (line_speed_motion.wait_for(0ms) == std::future_status::ready) {
|
||||
CHECK_TRUE(!line_speed_motion.get().ok());
|
||||
}
|
||||
CHECK_TRUE(!arm.busy());
|
||||
CHECK_TRUE(arm.moveJ(joint_b, options).ok());
|
||||
|
||||
// A dual-channel emergency input mismatch is a typed emergency latch. It
|
||||
// remains blocked after the wiring level is healthy and is recovered only
|
||||
// through the emergency recovery path.
|
||||
int stops_before_signal_fault = 0;
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
stops_before_signal_fault = g_sdk.group_stop_calls;
|
||||
}
|
||||
setEmergencySignalFault(true);
|
||||
CHECK_TRUE(waitUntil([&]() {
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
return g_sdk.group_stop_calls > stops_before_signal_fault;
|
||||
}));
|
||||
setEmergencySignalFault(false);
|
||||
std::this_thread::sleep_for(100ms);
|
||||
CHECK_TRUE(!arm.moveJ(joint_c, options).ok());
|
||||
CHECK_TRUE(arm.torqueOn().ok());
|
||||
CHECK_TRUE(arm.moveJ(joint_c, options).ok());
|
||||
|
||||
// Power-off holds a terminal barrier through GrpDisable. Motion remains
|
||||
// denied until an explicit enable confirms the powered state again.
|
||||
CHECK_TRUE(arm.torqueOff().ok());
|
||||
CHECK_TRUE(!arm.moveJ(joint_a, options).ok());
|
||||
CHECK_TRUE(arm.torqueOn().ok());
|
||||
CHECK_TRUE(arm.moveJ(joint_a, options).ok());
|
||||
|
||||
// Servo and program modes retain ownership beyond the start call. Stop of
|
||||
// a retained program must use StopScript as well as the group stop path.
|
||||
ServoOptions servo_options;
|
||||
CHECK_TRUE(arm.startServoMode(servo_options).ok());
|
||||
CHECK_TRUE(!arm.moveJ(joint_b, options).ok());
|
||||
CHECK_TRUE(arm.servoJ(joint_b).ok());
|
||||
CHECK_TRUE(arm.stopServoMode().ok());
|
||||
CHECK_TRUE(!arm.busy());
|
||||
|
||||
CHECK_TRUE(arm.loadProgram("fake_program.script").ok());
|
||||
CHECK_TRUE(arm.playProgram().ok());
|
||||
CHECK_TRUE(!arm.moveJ(joint_c, options).ok());
|
||||
int stop_script_calls_before = 0;
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
stop_script_calls_before = g_sdk.stop_script_calls;
|
||||
}
|
||||
CHECK_TRUE(arm.stopMotion().ok());
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
CHECK_TRUE(g_sdk.stop_script_calls > stop_script_calls_before);
|
||||
}
|
||||
CHECK_TRUE(!arm.busy());
|
||||
|
||||
// Retire an in-flight stale generation after transport loss before
|
||||
// reconnecting; no old waiter may issue SDK reads into the new session.
|
||||
holdNextMotion();
|
||||
int moves_before_transport_loss = 0;
|
||||
{
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
moves_before_transport_loss = g_sdk.move_j_calls;
|
||||
}
|
||||
auto transport_lost_move = std::async(std::launch::async, [&]() {
|
||||
return arm.moveJ(joint_c, options);
|
||||
});
|
||||
CHECK_TRUE(waitUntil([&]() {
|
||||
std::lock_guard lock(g_sdk.mutex);
|
||||
return g_sdk.move_j_calls > moves_before_transport_loss;
|
||||
}));
|
||||
dropFakeTransport();
|
||||
CHECK_TRUE(arm.connect("127.0.0.1", 10003).ok());
|
||||
CHECK_TRUE(transport_lost_move.wait_for(1s) == std::future_status::ready);
|
||||
if (transport_lost_move.wait_for(0ms) == std::future_status::ready) {
|
||||
CHECK_TRUE(!transport_lost_move.get().ok());
|
||||
}
|
||||
CHECK_TRUE(arm.moveJ(joint_b, options).ok());
|
||||
CHECK_TRUE(arm.disconnect().ok());
|
||||
|
||||
resetFakeSdk();
|
||||
HuayanRobot shutdown_arm(makeConfig());
|
||||
CHECK_TRUE(shutdown_arm.connect("127.0.0.1", 10003).ok());
|
||||
CHECK_TRUE(shutdown_arm.shutdown().ok());
|
||||
CHECK_TRUE(!shutdown_arm.isConnected());
|
||||
return failures == 0 ? 0 : 1;
|
||||
}
|
||||
@ -1,232 +0,0 @@
|
||||
#include "devices/arm/huayan_arm/huayan_lifecycle_state.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <iostream>
|
||||
|
||||
namespace {
|
||||
|
||||
#define CHECK_TRUE(condition) \
|
||||
do { \
|
||||
if (!(condition)) { \
|
||||
std::cerr << "CHECK_TRUE failed at line " << __LINE__ << ": " \
|
||||
<< #condition << std::endl; \
|
||||
return 1; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace cmvr::device::huayan_internal;
|
||||
|
||||
MotionState motion;
|
||||
CHECK_TRUE(motion.begin(MotionKind::None).status ==
|
||||
MotionStartStatus::Invalid);
|
||||
|
||||
// A completed target does not poison an identical subsequent command,
|
||||
// while an actually concurrent command is rejected.
|
||||
const auto first_joint = motion.begin(MotionKind::Joint);
|
||||
CHECK_TRUE(first_joint.started());
|
||||
CHECK_TRUE(motion.begin(MotionKind::Joint).status ==
|
||||
MotionStartStatus::Busy);
|
||||
CHECK_TRUE(motion.begin(MotionKind::Linear).status ==
|
||||
MotionStartStatus::Busy);
|
||||
motion.finish(first_joint.token);
|
||||
const auto repeated_joint = motion.begin(MotionKind::Joint);
|
||||
CHECK_TRUE(repeated_joint.started());
|
||||
CHECK_TRUE(repeated_joint.token.generation >
|
||||
first_joint.token.generation);
|
||||
motion.finish(first_joint.token);
|
||||
CHECK_TRUE(motion.ownerActive(repeated_joint.token));
|
||||
motion.finish(repeated_joint.token);
|
||||
CHECK_TRUE(!motion.busy());
|
||||
|
||||
// Stop cancels the current generation and cannot complete before its
|
||||
// owner exits.
|
||||
const auto linear = motion.begin(MotionKind::Linear);
|
||||
CHECK_TRUE(linear.started());
|
||||
const auto stop_linear = motion.beginStop();
|
||||
CHECK_TRUE(stop_linear.started());
|
||||
CHECK_TRUE(stop_linear.kind == MotionKind::Linear);
|
||||
CHECK_TRUE(stop_linear.active_token.generation ==
|
||||
linear.token.generation);
|
||||
CHECK_TRUE(stop_linear.tracked_motion);
|
||||
CHECK_TRUE(motion.cancelled(linear.token));
|
||||
CHECK_TRUE(motion.beginStop().status ==
|
||||
StopStartStatus::AlreadyStopping);
|
||||
CHECK_TRUE(motion.begin(MotionKind::Joint).status ==
|
||||
MotionStartStatus::Stopping);
|
||||
CHECK_TRUE(!motion.waitForOwnerExit(
|
||||
linear.token, std::chrono::milliseconds(1)));
|
||||
CHECK_TRUE(!motion.completeStop());
|
||||
motion.finish(linear.token);
|
||||
CHECK_TRUE(motion.waitForOwnerExit(
|
||||
linear.token, std::chrono::milliseconds(1)));
|
||||
CHECK_TRUE(motion.completeStop());
|
||||
CHECK_TRUE(!motion.busy());
|
||||
|
||||
// An uncertain submission/completion remains fail-closed until a
|
||||
// positively acknowledged Stop clears it.
|
||||
const auto failed_speed = motion.begin(MotionKind::SpeedLinear);
|
||||
CHECK_TRUE(failed_speed.started());
|
||||
motion.failMotion(failed_speed.token);
|
||||
CHECK_TRUE(motion.snapshot().blocked);
|
||||
CHECK_TRUE(motion.begin(MotionKind::Joint).status ==
|
||||
MotionStartStatus::Blocked);
|
||||
const auto stop_failed_speed = motion.beginStop();
|
||||
CHECK_TRUE(stop_failed_speed.kind == MotionKind::SpeedLinear);
|
||||
CHECK_TRUE(stop_failed_speed.tracked_motion);
|
||||
CHECK_TRUE(motion.completeStop());
|
||||
|
||||
const auto failed_stop_motion = motion.begin(MotionKind::Joint);
|
||||
CHECK_TRUE(failed_stop_motion.started());
|
||||
const auto failed_stop = motion.beginStop();
|
||||
CHECK_TRUE(failed_stop.kind == MotionKind::Joint);
|
||||
motion.failStop();
|
||||
CHECK_TRUE(motion.snapshot().blocked);
|
||||
CHECK_TRUE(motion.begin(MotionKind::Linear).status ==
|
||||
MotionStartStatus::Blocked);
|
||||
motion.finish(failed_stop_motion.token);
|
||||
const auto retry_failed_stop = motion.beginStop();
|
||||
CHECK_TRUE(retry_failed_stop.kind == MotionKind::Joint);
|
||||
CHECK_TRUE(motion.completeStop());
|
||||
|
||||
// Servo and program modes remain owned after their start RPC returns.
|
||||
const auto servo = motion.begin(MotionKind::Servo);
|
||||
CHECK_TRUE(servo.started());
|
||||
motion.finish(servo.token, MotionFinishMode::Retain);
|
||||
CHECK_TRUE(motion.snapshot().retained_kind == MotionKind::Servo);
|
||||
CHECK_TRUE(motion.begin(MotionKind::Program).status ==
|
||||
MotionStartStatus::Busy);
|
||||
const auto servo_update = motion.begin(MotionKind::Servo, true);
|
||||
CHECK_TRUE(servo_update.started());
|
||||
motion.finish(servo_update.token);
|
||||
CHECK_TRUE(motion.snapshot().retained_kind == MotionKind::Servo);
|
||||
const auto stop_servo = motion.beginStop();
|
||||
CHECK_TRUE(stop_servo.kind == MotionKind::Servo);
|
||||
CHECK_TRUE(stop_servo.tracked_motion);
|
||||
CHECK_TRUE(motion.completeStop());
|
||||
|
||||
const auto program = motion.begin(MotionKind::Program);
|
||||
CHECK_TRUE(program.started());
|
||||
motion.finish(program.token, MotionFinishMode::Retain);
|
||||
const auto cancelled_program = motion.cancelActiveForSafety();
|
||||
CHECK_TRUE(cancelled_program.kind == MotionKind::Program);
|
||||
CHECK_TRUE(cancelled_program.tracked_motion);
|
||||
CHECK_TRUE(!cancelled_program.active_token.valid());
|
||||
CHECK_TRUE(motion.begin(MotionKind::Joint).status ==
|
||||
MotionStartStatus::Blocked);
|
||||
const auto stop_program = motion.beginStop();
|
||||
CHECK_TRUE(stop_program.kind == MotionKind::Program);
|
||||
CHECK_TRUE(motion.completeStop());
|
||||
|
||||
const auto safety_move = motion.begin(MotionKind::SpeedJoint);
|
||||
CHECK_TRUE(safety_move.started());
|
||||
const auto cancelled_move = motion.cancelActiveForSafety();
|
||||
CHECK_TRUE(cancelled_move.kind == MotionKind::SpeedJoint);
|
||||
CHECK_TRUE(cancelled_move.active_token.generation ==
|
||||
safety_move.token.generation);
|
||||
CHECK_TRUE(motion.cancelled(safety_move.token));
|
||||
motion.finish(safety_move.token);
|
||||
const auto stop_safety_move = motion.beginStop();
|
||||
CHECK_TRUE(stop_safety_move.kind == MotionKind::SpeedJoint);
|
||||
CHECK_TRUE(motion.completeStop());
|
||||
|
||||
RawSafetyState raw;
|
||||
CHECK_TRUE(classifySafetyCondition(raw) == SafetyCondition::Unknown);
|
||||
raw.valid = true;
|
||||
CHECK_TRUE(classifySafetyCondition(raw) == SafetyCondition::Normal);
|
||||
raw.software_protective_stop = true;
|
||||
CHECK_TRUE(classifySafetyCondition(raw) ==
|
||||
SafetyCondition::SoftwareProtectiveStop);
|
||||
raw.software_emergency_stop = true;
|
||||
CHECK_TRUE(classifySafetyCondition(raw) ==
|
||||
SafetyCondition::SoftwareEmergencyStop);
|
||||
raw.robot_fault = 1;
|
||||
CHECK_TRUE(classifySafetyCondition(raw) ==
|
||||
SafetyCondition::RobotFault);
|
||||
raw.safeguard_stop = 1;
|
||||
CHECK_TRUE(classifySafetyCondition(raw) ==
|
||||
SafetyCondition::SafeguardStop);
|
||||
raw.emergency_stop = 1;
|
||||
CHECK_TRUE(classifySafetyCondition(raw) ==
|
||||
SafetyCondition::EmergencyStop);
|
||||
raw.safeguard_signal_fault = 1;
|
||||
CHECK_TRUE(classifySafetyCondition(raw) ==
|
||||
SafetyCondition::SafeguardSignalFault);
|
||||
raw.emergency_signal_fault = 1;
|
||||
CHECK_TRUE(classifySafetyCondition(raw) ==
|
||||
SafetyCondition::EmergencySignalFault);
|
||||
|
||||
SafetyState safety;
|
||||
CHECK_TRUE(!safety.tryPermit().has_value());
|
||||
safety.observe(SafetyCondition::Normal);
|
||||
const auto initial_permit = safety.tryPermit();
|
||||
CHECK_TRUE(initial_permit.has_value());
|
||||
CHECK_TRUE(safety.validate(*initial_permit));
|
||||
|
||||
safety.observe(SafetyCondition::EmergencyStop);
|
||||
CHECK_TRUE(safety.snapshot().latched);
|
||||
CHECK_TRUE(!safety.validate(*initial_permit));
|
||||
CHECK_TRUE(!safety.beginRecovery(safety.snapshot().epoch).has_value());
|
||||
const auto first_emergency_epoch = safety.snapshot().epoch;
|
||||
safety.observe(SafetyCondition::EmergencyStop);
|
||||
safety.observe(SafetyCondition::EmergencyStop);
|
||||
CHECK_TRUE(safety.snapshot().epoch == first_emergency_epoch);
|
||||
|
||||
// Releasing the hardware switch only changes the observed level; it does
|
||||
// not clear the event latch or issue a new motion permit.
|
||||
safety.observe(SafetyCondition::Normal);
|
||||
CHECK_TRUE(safety.snapshot().latched);
|
||||
CHECK_TRUE(!safety.tryPermit().has_value());
|
||||
|
||||
const auto not_ready = safety.beginRecovery(safety.snapshot().epoch);
|
||||
CHECK_TRUE(not_ready.has_value());
|
||||
CHECK_TRUE(!safety.completeRecovery(*not_ready, false, true, true));
|
||||
CHECK_TRUE(safety.snapshot().latched);
|
||||
safety.failRecovery(*not_ready);
|
||||
|
||||
const auto not_idle = safety.beginRecovery(safety.snapshot().epoch);
|
||||
CHECK_TRUE(not_idle.has_value());
|
||||
CHECK_TRUE(!safety.completeRecovery(*not_idle, true, false, true));
|
||||
CHECK_TRUE(safety.snapshot().latched);
|
||||
safety.failRecovery(*not_idle);
|
||||
|
||||
const auto not_cancelled =
|
||||
safety.beginRecovery(safety.snapshot().epoch);
|
||||
CHECK_TRUE(not_cancelled.has_value());
|
||||
CHECK_TRUE(!safety.completeRecovery(*not_cancelled, true, true, false));
|
||||
CHECK_TRUE(safety.snapshot().latched);
|
||||
safety.failRecovery(*not_cancelled);
|
||||
|
||||
const auto recovery_retry =
|
||||
safety.beginRecovery(safety.snapshot().epoch);
|
||||
CHECK_TRUE(recovery_retry.has_value());
|
||||
CHECK_TRUE(safety.completeRecovery(
|
||||
*recovery_retry, true, true, true));
|
||||
const auto recovered_permit = safety.tryPermit();
|
||||
CHECK_TRUE(recovered_permit.has_value());
|
||||
CHECK_TRUE(safety.validate(*recovered_permit));
|
||||
|
||||
// A second safety event, including the same physical E-stop being pressed
|
||||
// again, invalidates an older recovery token atomically.
|
||||
safety.observe(SafetyCondition::EmergencyStop);
|
||||
safety.observe(SafetyCondition::Normal);
|
||||
const auto stale_recovery =
|
||||
safety.beginRecovery(safety.snapshot().epoch);
|
||||
CHECK_TRUE(stale_recovery.has_value());
|
||||
safety.observe(SafetyCondition::EmergencyStop);
|
||||
safety.observe(SafetyCondition::Normal);
|
||||
CHECK_TRUE(!safety.completeRecovery(
|
||||
*stale_recovery, true, true, true));
|
||||
CHECK_TRUE(safety.snapshot().latched);
|
||||
CHECK_TRUE(!safety.snapshot().recovery_in_progress);
|
||||
|
||||
const auto stale_epoch = safety.snapshot().epoch;
|
||||
safety.observe(SafetyCondition::SafeguardStop);
|
||||
safety.observe(SafetyCondition::Normal);
|
||||
CHECK_TRUE(!safety.beginRecovery(stale_epoch).has_value());
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -21,72 +21,3 @@ target_link_libraries(ume_robot_arm
|
||||
|
||||
add_library(cmvr_es::device::ume_robot_arm ALIAS ume_robot_arm)
|
||||
install(TARGETS ume_robot_arm LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(damiao_mit_codec_test
|
||||
tests/damiao_mit_codec_test.cpp
|
||||
)
|
||||
target_link_libraries(damiao_mit_codec_test
|
||||
PRIVATE
|
||||
cmvr_es::device::ume_robot_arm
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME damiao_mit_codec_test
|
||||
COMMAND damiao_mit_codec_test
|
||||
)
|
||||
set(_ume_robot_arm_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _ume_robot_arm_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(damiao_mit_codec_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_ume_robot_arm_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(damiao_can_fd_chain_test
|
||||
tests/damiao_can_fd_chain_test.cpp
|
||||
)
|
||||
target_link_libraries(damiao_can_fd_chain_test
|
||||
PRIVATE
|
||||
cmvr_es::device::ume_robot_arm
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME damiao_can_fd_chain_test
|
||||
COMMAND damiao_can_fd_chain_test
|
||||
)
|
||||
set_tests_properties(damiao_can_fd_chain_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_ume_robot_arm_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(ume_robot_arm_test
|
||||
tests/ume_robot_arm_test.cpp
|
||||
)
|
||||
target_link_libraries(ume_robot_arm_test
|
||||
PRIVATE
|
||||
cmvr_es::device::ume_robot_arm
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
target_compile_definitions(ume_robot_arm_test PRIVATE
|
||||
CMVR_UME_ARM_CONFIG_PATH="${PROJECT_SOURCE_DIR}/cmvr-es/config/devices/arm/ume_arms.pb.txt"
|
||||
)
|
||||
add_test(
|
||||
NAME ume_robot_arm_test
|
||||
COMMAND ume_robot_arm_test
|
||||
)
|
||||
set_tests_properties(ume_robot_arm_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_ume_robot_arm_test_environment}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -1,407 +0,0 @@
|
||||
#include "arm/ume_robot_arm/include/damiao_can_fd_chain.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <deque>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "canbus/abstract_canbus.h"
|
||||
|
||||
namespace cmvr::device {
|
||||
namespace {
|
||||
|
||||
class FakeCanbus final : public AbstractCanbus {
|
||||
public:
|
||||
std::string typeName() const override { return "FakeCanbus"; }
|
||||
bool init() override
|
||||
{
|
||||
initialized = true;
|
||||
return init_result;
|
||||
}
|
||||
bool start() override
|
||||
{
|
||||
started = start_result;
|
||||
is_started_ = started;
|
||||
return started;
|
||||
}
|
||||
bool stop() override
|
||||
{
|
||||
stopped = true;
|
||||
started = false;
|
||||
is_started_ = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
msgs::ErrorCode send(const std::vector<CanFrame>& frames,
|
||||
int32_t* frame_num) override
|
||||
{
|
||||
if (!started || !frame_num ||
|
||||
*frame_num != static_cast<int32_t>(frames.size())) {
|
||||
return msgs::ErrorCode::CAN_CLIENT_ERROR_SEND_FAILED;
|
||||
}
|
||||
if (!send_result) {
|
||||
return msgs::ErrorCode::CAN_CLIENT_ERROR_SEND_FAILED;
|
||||
}
|
||||
sent_batches.push_back(frames);
|
||||
if (!scheduled_replies.empty()) {
|
||||
for (const auto& reply : scheduled_replies.front()) {
|
||||
replies.push_back(reply);
|
||||
}
|
||||
scheduled_replies.pop_front();
|
||||
}
|
||||
return msgs::ErrorCode::OK;
|
||||
}
|
||||
|
||||
msgs::ErrorCode receive(std::vector<CanFrame>* frames,
|
||||
int32_t* frame_num) override
|
||||
{
|
||||
if (!started || !frames || !frame_num || replies.empty()) {
|
||||
return msgs::ErrorCode::CAN_CLIENT_ERROR_RECV_FAILED;
|
||||
}
|
||||
frames->clear();
|
||||
frames->push_back(replies.front());
|
||||
replies.pop_front();
|
||||
*frame_num = 1;
|
||||
return msgs::ErrorCode::OK;
|
||||
}
|
||||
|
||||
bool discardPendingFrames() override
|
||||
{
|
||||
++drain_calls;
|
||||
if (drain_delay > std::chrono::microseconds::zero()) {
|
||||
std::this_thread::sleep_for(drain_delay);
|
||||
}
|
||||
replies.clear();
|
||||
return drain_result;
|
||||
}
|
||||
|
||||
std::string getErrorString(int32_t) override { return {}; }
|
||||
|
||||
void enqueueReplies(std::vector<CanFrame> batch)
|
||||
{
|
||||
scheduled_replies.push_back(std::move(batch));
|
||||
}
|
||||
|
||||
bool init_result{true};
|
||||
bool start_result{true};
|
||||
bool initialized{false};
|
||||
bool started{false};
|
||||
bool stopped{false};
|
||||
bool drain_result{true};
|
||||
bool send_result{true};
|
||||
std::size_t drain_calls{0};
|
||||
std::chrono::microseconds drain_delay{0};
|
||||
std::vector<std::vector<CanFrame>> sent_batches;
|
||||
std::deque<CanFrame> replies;
|
||||
std::deque<std::vector<CanFrame>> scheduled_replies;
|
||||
};
|
||||
|
||||
DamiaoJointSpec joint(std::string name,
|
||||
std::uint32_t command_id,
|
||||
std::uint32_t feedback_id,
|
||||
std::uint8_t reported_id,
|
||||
int direction = 1)
|
||||
{
|
||||
DamiaoJointSpec spec;
|
||||
spec.joint_name = std::move(name);
|
||||
spec.command_id = command_id;
|
||||
spec.feedback_id = feedback_id;
|
||||
spec.reported_motor_id = reported_id;
|
||||
spec.model = DamiaoMotorModel::DM4310;
|
||||
spec.direction = direction;
|
||||
spec.zero_offset_rad = direction == 1 ? 0.1 : -0.2;
|
||||
spec.joint_lower_rad = -2.0;
|
||||
spec.joint_upper_rad = 2.0;
|
||||
spec.max_velocity_rad_s = 3.0;
|
||||
spec.max_torque_nm = 2.0;
|
||||
spec.healthy_status_mask = 1U << 0U;
|
||||
spec.max_driver_temperature_raw = 80U;
|
||||
spec.max_motor_temperature_raw = 90U;
|
||||
return spec;
|
||||
}
|
||||
|
||||
CanFrame feedback(std::uint32_t id,
|
||||
std::uint8_t reported_id,
|
||||
std::uint8_t status = 0U)
|
||||
{
|
||||
CanFrame frame;
|
||||
frame.id = id;
|
||||
frame.len = 8;
|
||||
frame.is_fd = true;
|
||||
frame.bitrate_switch = true;
|
||||
frame.rx_monotonic_ns = 100;
|
||||
frame.data[0] =
|
||||
static_cast<std::uint8_t>((status << 4U) | reported_id);
|
||||
frame.data[1] = 0x80;
|
||||
frame.data[2] = 0x00;
|
||||
frame.data[3] = 0x80;
|
||||
frame.data[4] = 0x08;
|
||||
frame.data[5] = 0x00;
|
||||
frame.data[6] = 30U;
|
||||
frame.data[7] = 35U;
|
||||
return frame;
|
||||
}
|
||||
|
||||
std::chrono::steady_clock::time_point soon()
|
||||
{
|
||||
return std::chrono::steady_clock::now() +
|
||||
std::chrono::milliseconds(20);
|
||||
}
|
||||
|
||||
std::size_t countLifecycleByte(
|
||||
const std::vector<std::vector<CanFrame>>& batches,
|
||||
const std::uint8_t value)
|
||||
{
|
||||
std::size_t count = 0;
|
||||
for (const auto& batch : batches) {
|
||||
for (const auto& frame : batch) {
|
||||
if (frame.len == 8 &&
|
||||
frame.data[0] == 0xFF &&
|
||||
frame.data[7] == value) {
|
||||
++count;
|
||||
}
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
TEST(DamiaoCanFdChainTest, PassiveOpenNeverEnablesHardware)
|
||||
{
|
||||
auto bus = std::make_shared<FakeCanbus>();
|
||||
DamiaoCanFdChain chain(
|
||||
bus, {joint("J1", 1, 0x11, 1)},
|
||||
DamiaoChainOptions{true, true, false});
|
||||
|
||||
ASSERT_TRUE(chain.init().ok());
|
||||
ASSERT_TRUE(chain.openPassive().ok());
|
||||
EXPECT_EQ(chain.state(), DamiaoChainState::Passive);
|
||||
EXPECT_TRUE(bus->sent_batches.empty());
|
||||
|
||||
const auto arm_result = chain.arm(soon());
|
||||
EXPECT_FALSE(arm_result.ok());
|
||||
EXPECT_EQ(arm_result.code, ArmErrorCode::CommandRejected);
|
||||
EXPECT_TRUE(bus->sent_batches.empty());
|
||||
}
|
||||
|
||||
TEST(DamiaoCanFdChainTest, ExplicitArmAndExchangeUseUniqueConfiguredFeedback)
|
||||
{
|
||||
auto bus = std::make_shared<FakeCanbus>();
|
||||
DamiaoCanFdChain chain(
|
||||
bus,
|
||||
{joint("J1", 1, 0x11, 1),
|
||||
joint("J2", 2, 0x12, 2, -1)},
|
||||
DamiaoChainOptions{true, true, true});
|
||||
ASSERT_TRUE(chain.init().ok());
|
||||
ASSERT_TRUE(chain.openPassive().ok());
|
||||
|
||||
// A stale invalid frame is already queued before this request. The drain
|
||||
// must remove it; only replies generated by the subsequent send may be
|
||||
// accepted.
|
||||
bus->replies.push_back(feedback(0x11, 1, 2));
|
||||
bus->enqueueReplies({
|
||||
feedback(0x12, 2),
|
||||
feedback(0x11, 1),
|
||||
});
|
||||
ASSERT_TRUE(chain.arm(soon()).ok());
|
||||
EXPECT_EQ(chain.state(), DamiaoChainState::Armed);
|
||||
EXPECT_EQ(countLifecycleByte(bus->sent_batches, 0xFC), 2U);
|
||||
|
||||
bus->enqueueReplies({
|
||||
feedback(0x11, 1),
|
||||
feedback(0x12, 2),
|
||||
});
|
||||
DamiaoMitCommand commands[2]{};
|
||||
commands[0].tau_ff_nm = 1.0;
|
||||
commands[1].tau_ff_nm = -1.0;
|
||||
DamiaoJointFeedback states[2]{};
|
||||
ASSERT_TRUE(chain.exchange(
|
||||
commands, 2, states, 2, soon()).ok());
|
||||
EXPECT_EQ(chain.state(), DamiaoChainState::Active);
|
||||
EXPECT_TRUE(states[0].valid);
|
||||
EXPECT_TRUE(states[1].valid);
|
||||
// J2 has direction=-1 and offset=-0.2.
|
||||
EXPECT_NEAR(states[1].q_rad, -0.2003814697265625, 1e-12);
|
||||
EXPECT_NEAR(states[1].dq_rad_s, -0.0146484375, 1e-12);
|
||||
EXPECT_NEAR(states[1].tau_nm, -0.0048828125, 1e-12);
|
||||
}
|
||||
|
||||
TEST(DamiaoCanFdChainTest, MissedFeedbackLatchesFaultAndNeverReenables)
|
||||
{
|
||||
auto bus = std::make_shared<FakeCanbus>();
|
||||
DamiaoCanFdChain chain(
|
||||
bus, {joint("J1", 1, 0x11, 1)},
|
||||
DamiaoChainOptions{true, true, true});
|
||||
ASSERT_TRUE(chain.init().ok());
|
||||
ASSERT_TRUE(chain.openPassive().ok());
|
||||
bus->enqueueReplies({feedback(0x11, 1)});
|
||||
ASSERT_TRUE(chain.arm(soon()).ok());
|
||||
|
||||
DamiaoMitCommand command;
|
||||
DamiaoJointFeedback state;
|
||||
const auto result = chain.exchange(
|
||||
&command, 1, &state, 1,
|
||||
std::chrono::steady_clock::now() +
|
||||
std::chrono::milliseconds(1));
|
||||
EXPECT_FALSE(result.ok());
|
||||
EXPECT_EQ(result.code, ArmErrorCode::Timeout);
|
||||
EXPECT_EQ(chain.state(), DamiaoChainState::FaultLatched);
|
||||
EXPECT_EQ(countLifecycleByte(bus->sent_batches, 0xFC), 1U);
|
||||
EXPECT_GE(countLifecycleByte(bus->sent_batches, 0xFD), 1U);
|
||||
|
||||
// Clearing the fault is explicit and leaves the chain passive.
|
||||
bus->enqueueReplies({feedback(0x11, 1)});
|
||||
ASSERT_TRUE(chain.clearFault(soon()).ok());
|
||||
EXPECT_EQ(chain.state(), DamiaoChainState::Passive);
|
||||
EXPECT_EQ(countLifecycleByte(bus->sent_batches, 0xFC), 1U);
|
||||
}
|
||||
|
||||
TEST(DamiaoCanFdChainTest, DuplicateFeedbackCannotSatisfyAGroupCycle)
|
||||
{
|
||||
auto bus = std::make_shared<FakeCanbus>();
|
||||
DamiaoCanFdChain chain(
|
||||
bus,
|
||||
{joint("J1", 1, 0x11, 1),
|
||||
joint("J2", 2, 0x12, 2)},
|
||||
DamiaoChainOptions{true, true, true});
|
||||
ASSERT_TRUE(chain.init().ok());
|
||||
ASSERT_TRUE(chain.openPassive().ok());
|
||||
bus->enqueueReplies({
|
||||
feedback(0x11, 1),
|
||||
feedback(0x12, 2),
|
||||
});
|
||||
ASSERT_TRUE(chain.arm(soon()).ok());
|
||||
|
||||
bus->enqueueReplies({
|
||||
feedback(0x11, 1),
|
||||
feedback(0x11, 1),
|
||||
});
|
||||
DamiaoMitCommand commands[2]{};
|
||||
DamiaoJointFeedback states[2]{};
|
||||
EXPECT_FALSE(chain.exchange(
|
||||
commands, 2, states, 2,
|
||||
std::chrono::steady_clock::now() +
|
||||
std::chrono::milliseconds(1)).ok());
|
||||
EXPECT_EQ(chain.state(), DamiaoChainState::FaultLatched);
|
||||
EXPECT_EQ(chain.statistics().duplicate_feedback, 1U);
|
||||
}
|
||||
|
||||
TEST(DamiaoCanFdChainTest, RejectsUnreviewedStatusAndClassicFrame)
|
||||
{
|
||||
auto bus = std::make_shared<FakeCanbus>();
|
||||
DamiaoCanFdChain chain(
|
||||
bus, {joint("J1", 1, 0x11, 1)},
|
||||
DamiaoChainOptions{true, true, true});
|
||||
ASSERT_TRUE(chain.init().ok());
|
||||
ASSERT_TRUE(chain.openPassive().ok());
|
||||
bus->enqueueReplies({feedback(0x11, 1)});
|
||||
ASSERT_TRUE(chain.arm(soon()).ok());
|
||||
|
||||
bus->enqueueReplies({feedback(0x11, 1, 2)});
|
||||
DamiaoMitCommand command;
|
||||
DamiaoJointFeedback state;
|
||||
EXPECT_FALSE(chain.exchange(
|
||||
&command, 1, &state, 1, soon()).ok());
|
||||
EXPECT_EQ(chain.state(), DamiaoChainState::FaultLatched);
|
||||
|
||||
auto second_bus = std::make_shared<FakeCanbus>();
|
||||
DamiaoCanFdChain second(
|
||||
second_bus, {joint("J1", 1, 0x11, 1)},
|
||||
DamiaoChainOptions{true, true, true});
|
||||
ASSERT_TRUE(second.init().ok());
|
||||
ASSERT_TRUE(second.openPassive().ok());
|
||||
auto classic = feedback(0x11, 1);
|
||||
classic.is_fd = false;
|
||||
classic.bitrate_switch = false;
|
||||
second_bus->enqueueReplies({classic});
|
||||
EXPECT_FALSE(second.arm(soon()).ok());
|
||||
EXPECT_EQ(second.state(), DamiaoChainState::FaultLatched);
|
||||
|
||||
auto third_bus = std::make_shared<FakeCanbus>();
|
||||
DamiaoCanFdChain third(
|
||||
third_bus, {joint("J1", 1, 0x11, 1)},
|
||||
DamiaoChainOptions{true, true, true});
|
||||
ASSERT_TRUE(third.init().ok());
|
||||
ASSERT_TRUE(third.openPassive().ok());
|
||||
auto error_passive = feedback(0x11, 1);
|
||||
error_passive.error_state_indicator = true;
|
||||
third_bus->enqueueReplies({error_passive});
|
||||
EXPECT_FALSE(third.arm(soon()).ok());
|
||||
EXPECT_EQ(third.state(), DamiaoChainState::FaultLatched);
|
||||
}
|
||||
|
||||
TEST(DamiaoCanFdChainTest, HardwareEnableRequiresReviewedHealthContract)
|
||||
{
|
||||
auto bus = std::make_shared<FakeCanbus>();
|
||||
auto unreviewed = joint("J1", 1, 0x11, 1);
|
||||
unreviewed.healthy_status_mask = 0U;
|
||||
DamiaoCanFdChain chain(
|
||||
bus, {unreviewed},
|
||||
DamiaoChainOptions{true, true, true});
|
||||
|
||||
const auto result = chain.init();
|
||||
EXPECT_FALSE(result.ok());
|
||||
EXPECT_EQ(result.code, ArmErrorCode::InvalidArgument);
|
||||
EXPECT_FALSE(bus->initialized);
|
||||
}
|
||||
|
||||
TEST(DamiaoCanFdChainTest, DisableReportsUnconfirmedSafetyFrames)
|
||||
{
|
||||
auto bus = std::make_shared<FakeCanbus>();
|
||||
DamiaoCanFdChain chain(
|
||||
bus, {joint("J1", 1, 0x11, 1)},
|
||||
DamiaoChainOptions{true, true, true});
|
||||
ASSERT_TRUE(chain.init().ok());
|
||||
ASSERT_TRUE(chain.openPassive().ok());
|
||||
bus->enqueueReplies({feedback(0x11, 1)});
|
||||
ASSERT_TRUE(chain.arm(soon()).ok());
|
||||
|
||||
bus->send_result = false;
|
||||
const auto result = chain.disable();
|
||||
EXPECT_FALSE(result.ok());
|
||||
EXPECT_EQ(result.code, ArmErrorCode::CommandFailed);
|
||||
EXPECT_EQ(chain.state(), DamiaoChainState::FaultLatched);
|
||||
}
|
||||
|
||||
TEST(DamiaoCanFdChainTest, ExpiredDeadlineAfterDrainNeverCommitsEnable)
|
||||
{
|
||||
auto bus = std::make_shared<FakeCanbus>();
|
||||
DamiaoCanFdChain chain(
|
||||
bus, {joint("J1", 1, 0x11, 1)},
|
||||
DamiaoChainOptions{true, true, true});
|
||||
ASSERT_TRUE(chain.init().ok());
|
||||
ASSERT_TRUE(chain.openPassive().ok());
|
||||
|
||||
bus->drain_delay = std::chrono::milliseconds(3);
|
||||
bus->enqueueReplies({feedback(0x11, 1)});
|
||||
const auto result = chain.arm(
|
||||
std::chrono::steady_clock::now() +
|
||||
std::chrono::milliseconds(1));
|
||||
|
||||
EXPECT_FALSE(result.ok());
|
||||
EXPECT_EQ(result.code, ArmErrorCode::Timeout);
|
||||
EXPECT_EQ(chain.state(), DamiaoChainState::FaultLatched);
|
||||
EXPECT_EQ(countLifecycleByte(bus->sent_batches, 0xFC), 0U);
|
||||
EXPECT_GE(countLifecycleByte(bus->sent_batches, 0xFD), 1U);
|
||||
}
|
||||
|
||||
TEST(DamiaoCanFdChainTest, ConfigurationRejectsAmbiguousMappings)
|
||||
{
|
||||
auto bus = std::make_shared<FakeCanbus>();
|
||||
DamiaoCanFdChain chain(
|
||||
bus,
|
||||
{joint("J1", 1, 0x11, 1),
|
||||
joint("J1", 2, 0x12, 2)},
|
||||
DamiaoChainOptions{true, true, false});
|
||||
const auto result = chain.init();
|
||||
EXPECT_FALSE(result.ok());
|
||||
EXPECT_EQ(result.code, ArmErrorCode::InvalidArgument);
|
||||
EXPECT_FALSE(bus->initialized);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::device
|
||||
@ -1,150 +0,0 @@
|
||||
#include "arm/ume_robot_arm/include/damiao_mit_codec.h"
|
||||
|
||||
#include <array>
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace cmvr::device {
|
||||
namespace {
|
||||
|
||||
void expectPayload(const CanFrame& frame,
|
||||
const std::array<std::uint8_t, 8>& expected)
|
||||
{
|
||||
ASSERT_EQ(frame.len, expected.size());
|
||||
for (std::size_t i = 0; i < expected.size(); ++i) {
|
||||
EXPECT_EQ(frame.data[i], expected[i]) << "byte " << i;
|
||||
}
|
||||
}
|
||||
|
||||
TEST(DamiaoMitCodecTest, MatchesLegacyPythonGoldenVectors)
|
||||
{
|
||||
CanFrame frame;
|
||||
DamiaoMitCommand zero;
|
||||
auto result = DamiaoMitCodec::encodeMit(
|
||||
1, DamiaoMotorModel::DM4310, zero, true, true, frame);
|
||||
ASSERT_TRUE(result);
|
||||
EXPECT_EQ(result.saturation_mask, DAMIAO_SATURATION_NONE);
|
||||
EXPECT_TRUE(frame.is_fd);
|
||||
EXPECT_TRUE(frame.bitrate_switch);
|
||||
expectPayload(frame, {0x7F, 0xFF, 0x7F, 0xF0,
|
||||
0x00, 0x00, 0x07, 0xFF});
|
||||
|
||||
DamiaoMitCommand nontrivial;
|
||||
nontrivial.kp = 100.0;
|
||||
nontrivial.kd = 1.0;
|
||||
nontrivial.q_rad = 1.25;
|
||||
nontrivial.dq_rad_s = -2.5;
|
||||
nontrivial.tau_ff_nm = 3.0;
|
||||
result = DamiaoMitCodec::encodeMit(
|
||||
1, DamiaoMotorModel::DM4310, nontrivial, false, false, frame);
|
||||
ASSERT_TRUE(result);
|
||||
expectPayload(frame, {0x8C, 0xCC, 0x75, 0x43,
|
||||
0x33, 0x33, 0x3A, 0x65});
|
||||
}
|
||||
|
||||
TEST(DamiaoMitCodecTest, ReportsProtocolSaturationWithoutHidingIt)
|
||||
{
|
||||
DamiaoMitCommand command;
|
||||
command.q_rad = 100.0;
|
||||
command.dq_rad_s = -100.0;
|
||||
command.kp = 600.0;
|
||||
command.kd = -1.0;
|
||||
command.tau_ff_nm = 100.0;
|
||||
CanFrame frame;
|
||||
const auto result = DamiaoMitCodec::encodeMit(
|
||||
2, DamiaoMotorModel::DM4310, command, false, false, frame);
|
||||
ASSERT_TRUE(result);
|
||||
EXPECT_EQ(
|
||||
result.saturation_mask,
|
||||
DAMIAO_SATURATION_Q | DAMIAO_SATURATION_DQ |
|
||||
DAMIAO_SATURATION_KP | DAMIAO_SATURATION_KD |
|
||||
DAMIAO_SATURATION_TAU);
|
||||
}
|
||||
|
||||
TEST(DamiaoMitCodecTest, RejectsNonFiniteInput)
|
||||
{
|
||||
DamiaoMitCommand command;
|
||||
command.tau_ff_nm = std::numeric_limits<double>::quiet_NaN();
|
||||
CanFrame frame;
|
||||
const auto result = DamiaoMitCodec::encodeMit(
|
||||
1, DamiaoMotorModel::DM4310, command, false, false, frame);
|
||||
EXPECT_FALSE(result);
|
||||
EXPECT_EQ(result.error, DamiaoCodecError::NonFiniteInput);
|
||||
}
|
||||
|
||||
TEST(DamiaoMitCodecTest, EncodesLifecycleFramesWithoutEnablingImplicitly)
|
||||
{
|
||||
CanFrame frame;
|
||||
ASSERT_EQ(DamiaoMitCodec::encodeMode(
|
||||
3, DamiaoMode::Enable, true, true, frame),
|
||||
DamiaoCodecError::None);
|
||||
expectPayload(frame, {0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFC});
|
||||
|
||||
ASSERT_EQ(DamiaoMitCodec::encodeMode(
|
||||
3, DamiaoMode::Disable, true, true, frame),
|
||||
DamiaoCodecError::None);
|
||||
EXPECT_EQ(frame.data[7], 0xFD);
|
||||
ASSERT_EQ(DamiaoMitCodec::encodeMode(
|
||||
3, DamiaoMode::SetZero, true, true, frame),
|
||||
DamiaoCodecError::None);
|
||||
EXPECT_EQ(frame.data[7], 0xFE);
|
||||
ASSERT_EQ(DamiaoMitCodec::encodeMode(
|
||||
3, DamiaoMode::ClearFault, true, true, frame),
|
||||
DamiaoCodecError::None);
|
||||
EXPECT_EQ(frame.data[7], 0xFB);
|
||||
}
|
||||
|
||||
TEST(DamiaoMitCodecTest, DecodesLegacyFeedbackAndRequiresConfiguredId)
|
||||
{
|
||||
CanFrame frame;
|
||||
frame.id = 0x11;
|
||||
frame.len = 8;
|
||||
frame.is_fd = true;
|
||||
frame.bitrate_switch = true;
|
||||
frame.rx_monotonic_ns = 1234567;
|
||||
frame.data[0] = 0xA1;
|
||||
frame.data[1] = 0x80;
|
||||
frame.data[2] = 0x00;
|
||||
frame.data[3] = 0x80;
|
||||
frame.data[4] = 0x08;
|
||||
frame.data[5] = 0x00;
|
||||
frame.data[6] = 40;
|
||||
frame.data[7] = 41;
|
||||
|
||||
DamiaoJointFeedback feedback;
|
||||
EXPECT_EQ(DamiaoMitCodec::decodeFeedback(
|
||||
frame, 0x12, DamiaoMotorModel::DM4310, feedback),
|
||||
DamiaoCodecError::UnexpectedFeedbackId);
|
||||
EXPECT_FALSE(feedback.valid);
|
||||
|
||||
ASSERT_EQ(DamiaoMitCodec::decodeFeedback(
|
||||
frame, 0x11, DamiaoMotorModel::DM4310, feedback),
|
||||
DamiaoCodecError::None);
|
||||
EXPECT_TRUE(feedback.valid);
|
||||
EXPECT_EQ(feedback.reported_motor_id, 1);
|
||||
EXPECT_EQ(feedback.status, 0x0A);
|
||||
EXPECT_EQ(feedback.driver_temperature_raw, 40);
|
||||
EXPECT_EQ(feedback.motor_temperature_raw, 41);
|
||||
EXPECT_EQ(feedback.rx_monotonic_ns, 1234567);
|
||||
EXPECT_NEAR(feedback.q_rad, 0.0003814697265625, 1e-12);
|
||||
EXPECT_NEAR(feedback.dq_rad_s, 0.0146484375, 1e-12);
|
||||
EXPECT_NEAR(feedback.tau_nm, 0.0048828125, 1e-12);
|
||||
}
|
||||
|
||||
TEST(DamiaoMitCodecTest, ContainsAllLegacyMotorRanges)
|
||||
{
|
||||
EXPECT_DOUBLE_EQ(
|
||||
DamiaoMitCodec::limitsFor(DamiaoMotorModel::DM8009).tau_max_nm,
|
||||
54.0);
|
||||
EXPECT_DOUBLE_EQ(
|
||||
DamiaoMitCodec::limitsFor(DamiaoMotorModel::DMH3510).dq_max_rad_s,
|
||||
280.0);
|
||||
EXPECT_FALSE(
|
||||
DamiaoMitCodec::limitsFor(DamiaoMotorModel::Unknown).valid());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::device
|
||||
@ -1,338 +0,0 @@
|
||||
#include "arm/ume_robot_arm/include/ume_robot_arm.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
#include <deque>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "canbus/abstract_canbus.h"
|
||||
#include "common/io/proto_file_io.h"
|
||||
|
||||
#ifndef CMVR_UME_ARM_CONFIG_PATH
|
||||
#define CMVR_UME_ARM_CONFIG_PATH ""
|
||||
#endif
|
||||
|
||||
namespace cmvr::device {
|
||||
namespace {
|
||||
|
||||
class LoopbackDamiaoBus final : public AbstractCanbus {
|
||||
public:
|
||||
std::string typeName() const override { return "LoopbackDamiaoBus"; }
|
||||
bool init() override
|
||||
{
|
||||
std::lock_guard lock(mutex);
|
||||
initialized = true;
|
||||
return true;
|
||||
}
|
||||
bool start() override
|
||||
{
|
||||
std::lock_guard lock(mutex);
|
||||
started = true;
|
||||
is_started_ = true;
|
||||
return true;
|
||||
}
|
||||
bool stop() override
|
||||
{
|
||||
std::lock_guard lock(mutex);
|
||||
started = false;
|
||||
is_started_ = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
msgs::ErrorCode send(
|
||||
const std::vector<CanFrame>& frames,
|
||||
int32_t* frame_num) override
|
||||
{
|
||||
std::lock_guard lock(mutex);
|
||||
if (!started || !frame_num ||
|
||||
*frame_num != static_cast<int32_t>(frames.size())) {
|
||||
return msgs::ErrorCode::CAN_CLIENT_ERROR_SEND_FAILED;
|
||||
}
|
||||
if (!send_result) {
|
||||
return msgs::ErrorCode::CAN_CLIENT_ERROR_SEND_FAILED;
|
||||
}
|
||||
sent_batches.push_back(frames);
|
||||
for (const auto& frame : frames) {
|
||||
if (frame.id < 1U || frame.id > 8U) {
|
||||
continue;
|
||||
}
|
||||
CanFrame reply;
|
||||
reply.id = 0x10U + frame.id;
|
||||
reply.len = 8U;
|
||||
reply.is_fd = true;
|
||||
reply.bitrate_switch = true;
|
||||
reply.rx_monotonic_ns =
|
||||
std::chrono::duration_cast<std::chrono::nanoseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch())
|
||||
.count();
|
||||
reply.data[0] = static_cast<std::uint8_t>(frame.id);
|
||||
reply.data[1] = 0x80U;
|
||||
reply.data[2] = 0x00U;
|
||||
reply.data[3] = 0x80U;
|
||||
reply.data[4] = 0x08U;
|
||||
reply.data[5] = 0x00U;
|
||||
replies.push_back(reply);
|
||||
}
|
||||
return msgs::ErrorCode::OK;
|
||||
}
|
||||
|
||||
msgs::ErrorCode receive(
|
||||
std::vector<CanFrame>* frames,
|
||||
int32_t* frame_num) override
|
||||
{
|
||||
std::lock_guard lock(mutex);
|
||||
if (!started || !frames || !frame_num || replies.empty()) {
|
||||
return msgs::ErrorCode::CAN_CLIENT_ERROR_RECV_FAILED;
|
||||
}
|
||||
frames->clear();
|
||||
frames->push_back(replies.front());
|
||||
replies.pop_front();
|
||||
*frame_num = 1;
|
||||
return msgs::ErrorCode::OK;
|
||||
}
|
||||
|
||||
bool discardPendingFrames() override
|
||||
{
|
||||
std::lock_guard lock(mutex);
|
||||
replies.clear();
|
||||
return started;
|
||||
}
|
||||
|
||||
std::string getErrorString(int32_t) override { return {}; }
|
||||
|
||||
void setSendResult(const bool result)
|
||||
{
|
||||
std::lock_guard lock(mutex);
|
||||
send_result = result;
|
||||
}
|
||||
|
||||
std::size_t lifecycleCount(const std::uint8_t byte) const
|
||||
{
|
||||
std::lock_guard lock(mutex);
|
||||
std::size_t count = 0;
|
||||
for (const auto& batch : sent_batches) {
|
||||
for (const auto& frame : batch) {
|
||||
if (frame.len == 8U &&
|
||||
frame.data[0] == 0xFFU &&
|
||||
frame.data[7] == byte) {
|
||||
++count;
|
||||
}
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
bool initialized{false};
|
||||
bool started{false};
|
||||
bool send_result{true};
|
||||
std::deque<CanFrame> replies;
|
||||
std::vector<std::vector<CanFrame>> sent_batches;
|
||||
mutable std::mutex mutex;
|
||||
};
|
||||
|
||||
config::RobotArmConfig configFor(const bool hardware_enabled)
|
||||
{
|
||||
config::RobotArmConfig cfg;
|
||||
cfg.set_id("ume_right");
|
||||
auto* ume = cfg.mutable_ume();
|
||||
ume->set_hardware_enabled(hardware_enabled);
|
||||
ume->set_control_frequency_hz(800U);
|
||||
ume->set_cycle_deadline_us(1000U);
|
||||
ume->set_feedback_watchdog_ms(20U);
|
||||
auto* can = ume->mutable_can();
|
||||
can->set_interface_name("fake-can");
|
||||
can->set_enable_fd(true);
|
||||
can->set_bitrate_switch(true);
|
||||
can->set_send_timeout_us(100U);
|
||||
can->set_receive_timeout_us(100U);
|
||||
can->set_receive_own_messages(false);
|
||||
for (std::uint32_t i = 1; i <= 8U; ++i) {
|
||||
auto* joint = ume->add_joints();
|
||||
joint->set_joint_name("RJ" + std::to_string(i));
|
||||
joint->set_command_id(i);
|
||||
joint->set_feedback_id(0x10U + i);
|
||||
joint->set_reported_motor_id(i);
|
||||
joint->set_model(config::DAMIAO_MOTOR_MODEL_DM4310);
|
||||
joint->set_direction(1);
|
||||
joint->set_joint_lower_rad(-2.0);
|
||||
joint->set_joint_upper_rad(2.0);
|
||||
joint->set_max_velocity_rad_s(3.0);
|
||||
joint->set_max_torque_nm(2.0);
|
||||
joint->add_healthy_feedback_status(0U);
|
||||
joint->set_max_driver_temperature_raw(80U);
|
||||
joint->set_max_motor_temperature_raw(90U);
|
||||
}
|
||||
return cfg;
|
||||
}
|
||||
|
||||
bool waitUntil(
|
||||
const std::function<bool()>& predicate,
|
||||
const std::chrono::milliseconds timeout)
|
||||
{
|
||||
const auto deadline = std::chrono::steady_clock::now() + timeout;
|
||||
while (std::chrono::steady_clock::now() < deadline) {
|
||||
if (predicate()) {
|
||||
return true;
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
return predicate();
|
||||
}
|
||||
|
||||
TEST(UmeRobotArmTest, LifecycleIsPassiveUntilExplicitFreshTorqueCommand)
|
||||
{
|
||||
auto bus = std::make_shared<LoopbackDamiaoBus>();
|
||||
UmeRobotArm arm(configFor(true), bus);
|
||||
|
||||
ASSERT_TRUE(arm.init());
|
||||
EXPECT_EQ(bus->lifecycleCount(0xFCU), 0U);
|
||||
ASSERT_TRUE(arm.start());
|
||||
EXPECT_EQ(bus->lifecycleCount(0xFCU), 0U);
|
||||
|
||||
TorqueServoOptions options;
|
||||
options.period = 0.00125;
|
||||
options.command_watchdog_ms = 100U;
|
||||
ASSERT_TRUE(arm.startTorqueMode(options).ok());
|
||||
JointTorqueCommand command;
|
||||
command.torque.assign(8U, 0.0);
|
||||
ASSERT_TRUE(arm.servoTorque(command).ok());
|
||||
ASSERT_TRUE(arm.torqueOn().ok());
|
||||
|
||||
ASSERT_TRUE(waitUntil(
|
||||
[&arm] { return arm.getJointState().sequence > 0U; },
|
||||
std::chrono::milliseconds(30)));
|
||||
const auto state = arm.getJointState();
|
||||
EXPECT_TRUE(state.position_valid);
|
||||
EXPECT_TRUE(state.velocity_valid);
|
||||
EXPECT_TRUE(state.effort_valid);
|
||||
EXPECT_EQ(state.position.size(), 8U);
|
||||
EXPECT_EQ(bus->lifecycleCount(0xFCU), 8U);
|
||||
EXPECT_EQ(arm.getControlMode(), ControlMode::Torque);
|
||||
|
||||
EXPECT_TRUE(arm.stop());
|
||||
EXPECT_GE(bus->lifecycleCount(0xFDU), 8U);
|
||||
}
|
||||
|
||||
TEST(UmeRobotArmTest, StaleCommandLatchesFaultAndNeverReenables)
|
||||
{
|
||||
auto bus = std::make_shared<LoopbackDamiaoBus>();
|
||||
UmeRobotArm arm(configFor(true), bus);
|
||||
ASSERT_TRUE(arm.init());
|
||||
ASSERT_TRUE(arm.start());
|
||||
|
||||
TorqueServoOptions options;
|
||||
options.period = 0.001;
|
||||
options.command_watchdog_ms = 2U;
|
||||
ASSERT_TRUE(arm.startTorqueMode(options).ok());
|
||||
JointTorqueCommand command;
|
||||
command.torque.assign(8U, 0.0);
|
||||
ASSERT_TRUE(arm.servoTorque(command).ok());
|
||||
ASSERT_TRUE(arm.torqueOn().ok());
|
||||
ASSERT_TRUE(waitUntil(
|
||||
[&arm] { return arm.isFault(); },
|
||||
std::chrono::milliseconds(50)));
|
||||
|
||||
EXPECT_FALSE(arm.busy());
|
||||
EXPECT_EQ(bus->lifecycleCount(0xFCU), 8U);
|
||||
EXPECT_GE(bus->lifecycleCount(0xFDU), 8U);
|
||||
EXPECT_EQ(arm.healthSnapshot().state, DeviceHealthState::Fault);
|
||||
}
|
||||
|
||||
TEST(UmeRobotArmTest, HardwareGateRejectsEnableWithoutWritingIt)
|
||||
{
|
||||
auto bus = std::make_shared<LoopbackDamiaoBus>();
|
||||
UmeRobotArm arm(configFor(false), bus);
|
||||
ASSERT_TRUE(arm.init());
|
||||
ASSERT_TRUE(arm.start());
|
||||
ASSERT_TRUE(arm.startTorqueMode(TorqueServoOptions{}).ok());
|
||||
JointTorqueCommand command;
|
||||
command.torque.assign(8U, 0.0);
|
||||
ASSERT_TRUE(arm.servoTorque(command).ok());
|
||||
|
||||
const auto result = arm.torqueOn();
|
||||
EXPECT_FALSE(result.ok());
|
||||
EXPECT_EQ(result.code, ArmErrorCode::CommandRejected);
|
||||
EXPECT_EQ(bus->lifecycleCount(0xFCU), 0U);
|
||||
}
|
||||
|
||||
TEST(UmeRobotArmTest, PositionServoIsExplicitlyUnsupported)
|
||||
{
|
||||
auto bus = std::make_shared<LoopbackDamiaoBus>();
|
||||
UmeRobotArm arm(configFor(false), bus);
|
||||
JointPositionCommand command;
|
||||
command.position.assign(8U, 0.0);
|
||||
const auto result = arm.servoJ(command);
|
||||
EXPECT_EQ(result.code, ArmErrorCode::UnsupportedCommand);
|
||||
}
|
||||
|
||||
TEST(UmeRobotArmTest, RejectsCycleDeadlineLongerThanControlPeriod)
|
||||
{
|
||||
auto cfg = configFor(false);
|
||||
cfg.mutable_ume()->set_cycle_deadline_us(2000U);
|
||||
auto bus = std::make_shared<LoopbackDamiaoBus>();
|
||||
UmeRobotArm arm(cfg, bus);
|
||||
|
||||
EXPECT_FALSE(arm.init());
|
||||
EXPECT_FALSE(bus->initialized);
|
||||
EXPECT_EQ(
|
||||
arm.healthSnapshot().state,
|
||||
DeviceHealthState::Fault);
|
||||
}
|
||||
|
||||
TEST(UmeRobotArmTest, RejectsReportedMotorIdBeforeNarrowingConversion)
|
||||
{
|
||||
auto cfg = configFor(false);
|
||||
cfg.mutable_ume()->mutable_joints(0)->set_reported_motor_id(257U);
|
||||
auto bus = std::make_shared<LoopbackDamiaoBus>();
|
||||
UmeRobotArm arm(cfg, bus);
|
||||
|
||||
EXPECT_FALSE(arm.init());
|
||||
EXPECT_FALSE(bus->initialized);
|
||||
EXPECT_EQ(arm.healthSnapshot().state, DeviceHealthState::Fault);
|
||||
}
|
||||
|
||||
TEST(UmeRobotArmTest, EmergencyStopReportsUnconfirmedDisable)
|
||||
{
|
||||
auto bus = std::make_shared<LoopbackDamiaoBus>();
|
||||
UmeRobotArm arm(configFor(true), bus);
|
||||
ASSERT_TRUE(arm.init());
|
||||
ASSERT_TRUE(arm.start());
|
||||
|
||||
bus->setSendResult(false);
|
||||
const auto result = arm.emergencyStop();
|
||||
|
||||
EXPECT_FALSE(result.ok());
|
||||
EXPECT_EQ(result.code, ArmErrorCode::CommandFailed);
|
||||
EXPECT_TRUE(arm.isEmergencyStopped());
|
||||
EXPECT_TRUE(arm.isFault());
|
||||
EXPECT_NE(
|
||||
arm.healthSnapshot().error_message.find("zero/disable failed"),
|
||||
std::string::npos);
|
||||
}
|
||||
|
||||
TEST(UmeRobotArmTest, CheckedInDualArmConfigParsesAndKeepsHardwareDisabled)
|
||||
{
|
||||
config::ArmRootConfig root;
|
||||
ASSERT_TRUE(ProtoMessageIo::getProtoFromAsciiFile(
|
||||
CMVR_UME_ARM_CONFIG_PATH, &root));
|
||||
ASSERT_EQ(root.arm().robot_arms_size(), 2);
|
||||
for (const auto& arm : root.arm().robot_arms()) {
|
||||
ASSERT_TRUE(arm.has_ume());
|
||||
EXPECT_EQ(arm.ume().joints_size(), 8);
|
||||
EXPECT_FALSE(arm.ume().hardware_enabled());
|
||||
EXPECT_TRUE(arm.ume().can().enable_fd());
|
||||
EXPECT_TRUE(arm.ume().can().bitrate_switch());
|
||||
EXPECT_GT(arm.ume().can().send_timeout_us(), 0U);
|
||||
EXPECT_FALSE(arm.ume().can().receive_own_messages());
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::device
|
||||
@ -1,205 +0,0 @@
|
||||
#include "common/base/logging/logger.h"
|
||||
#include "pcan_client.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <iostream>
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
#include "cmvr/msgs/error_code.pb.h"
|
||||
#include "cstdio"
|
||||
|
||||
namespace cmvr {
|
||||
namespace device {
|
||||
#define CAN_ID_MASK 0x1FFFF800U // can_filter mask
|
||||
#define CAN_STANDARD_MAX_ID 0x7FFU
|
||||
|
||||
using cmvr::msgs::ErrorCode;
|
||||
using cmvr::msgs::CANCardParameter;
|
||||
PcanClient::PcanClient(const config::SocketCanConfig &cfg) {
|
||||
port_ = static_cast<CANCardParameter::CANChannelId>(cfg.channel_id());
|
||||
interface_ = CANCardParameter::NATIVE;
|
||||
enable_can_err_check_ = false;
|
||||
}
|
||||
|
||||
PcanClient::~PcanClient() {
|
||||
stop();
|
||||
}
|
||||
|
||||
bool PcanClient::init() {
|
||||
|
||||
|
||||
#define LPCSTR const char*
|
||||
/// <summary>
|
||||
/// Sets a TPCANDevice value. The input can be numeric, in hexadecimal or decimal format, or as string denoting
|
||||
/// a TPCANDevice value name.
|
||||
/// </summary>
|
||||
LPCSTR DeviceType = "PCAN_PCI";
|
||||
/// <summary>
|
||||
/// Sets value in range of a double. The input can be hexadecimal or decimal format.
|
||||
/// </summary>
|
||||
LPCSTR DeviceID = "";
|
||||
/// <summary>
|
||||
/// Sets a zero-based index value in range of a double. The input can be hexadecimal or decimal format.
|
||||
/// </summary>
|
||||
LPCSTR ControllerNumber = "";
|
||||
/// <summary>
|
||||
/// Sets a valid Internet Protocol address
|
||||
/// </summary>
|
||||
LPCSTR IPAddress = "";
|
||||
/// <summary>
|
||||
/// Sets a valid GUID for a PCAN device
|
||||
/// </summary>
|
||||
LPCSTR DeviceGUID = "";
|
||||
|
||||
|
||||
char sParameters[260];
|
||||
if (DeviceType != "")
|
||||
snprintf(sParameters, sizeof(sParameters), "%s=%s", LOOKUP_DEVICE_TYPE, DeviceType);
|
||||
if (DeviceID != "")
|
||||
{
|
||||
if (sParameters != "")
|
||||
snprintf(sParameters, sizeof(sParameters), "%s, ", sParameters);
|
||||
snprintf(sParameters, sizeof(sParameters), "%s%s=%s", sParameters, LOOKUP_DEVICE_ID, DeviceID);
|
||||
}
|
||||
if (ControllerNumber != "")
|
||||
{
|
||||
if (sParameters != "")
|
||||
snprintf(sParameters, sizeof(sParameters), "%s, ", sParameters);
|
||||
snprintf(sParameters, sizeof(sParameters), "%s%s=%s", sParameters, LOOKUP_CONTROLLER_NUMBER, ControllerNumber);
|
||||
}
|
||||
if (IPAddress != "")
|
||||
{
|
||||
if (sParameters != "")
|
||||
snprintf(sParameters, sizeof(sParameters), "%s, ", sParameters);
|
||||
snprintf(sParameters, sizeof(sParameters), "%s%s=%s", sParameters, LOOKUP_IP_ADDRESS, IPAddress);
|
||||
}
|
||||
|
||||
if (DeviceGUID != "")
|
||||
{
|
||||
if (sParameters != "")
|
||||
snprintf(sParameters, sizeof(sParameters), "%s, ", sParameters);
|
||||
snprintf(sParameters, sizeof(sParameters), "%s%s=%s", sParameters, LOOKUP_DEVICE_GUID, DeviceGUID);
|
||||
}
|
||||
|
||||
TPCANHandle handle;
|
||||
TPCANStatus stsResult = CAN_LookUpChannel((LPSTR)sParameters, &handle);
|
||||
TPCANStatus ret = CAN_Initialize(PcanHandle, Bitrate);
|
||||
if (ret != PCAN_ERROR_OK) {
|
||||
CMVR_LOG(ERROR) << "send message failed, error code: " << ret;
|
||||
return false;
|
||||
}
|
||||
|
||||
TPCANStatus state = CAN_GetStatus(PcanHandle);
|
||||
if (state & PCAN_ERROR_BUSOFF) {
|
||||
// 进入 bus-off,尝试复位总线
|
||||
CMVR_LOG(ERROR) << "send message failed, error code: " << ret;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PcanClient::start() {
|
||||
is_started_ = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PcanClient::stop() {
|
||||
if (is_started_) {
|
||||
is_started_ = false;
|
||||
CAN_Uninitialize(dev_handler_);
|
||||
CMVR_LOG(INFO) << "close socket can ok. port:" << port_;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
cmvr::msgs::ErrorCode PcanClient::send(const std::vector<CanFrame> &frames, int32_t *const frame_num) {
|
||||
if (frame_num == nullptr) {
|
||||
CMVR_LOG(FATAL) << "frame_num is null";
|
||||
}
|
||||
if (frames.size() != static_cast<size_t>(*frame_num)) {
|
||||
CMVR_LOG(FATAL) << "frames size does not match frame_num";
|
||||
}
|
||||
|
||||
if (!is_started_) {
|
||||
CMVR_LOG(ERROR) << "Nvidia can client has not been initiated! Please init first!";
|
||||
return ErrorCode::CAN_CLIENT_ERROR_SEND_FAILED;
|
||||
}
|
||||
for (size_t i = 0; i < frames.size() && i < MAX_CAN_SEND_FRAME_LEN; ++i) {
|
||||
if (frames[i].len > CANBUS_MESSAGE_LENGTH || frames[i].len < 0) {
|
||||
CMVR_LOG(ERROR) << "frames[" << i << "].len = " << frames[i].len
|
||||
<< ", which is not equal to can message data length ("
|
||||
<< CANBUS_MESSAGE_LENGTH << ").";
|
||||
return ErrorCode::CAN_CLIENT_ERROR_SEND_FAILED;
|
||||
}
|
||||
if (frames[i].id > CAN_STANDARD_MAX_ID) {
|
||||
send_frames_[i].ID = (frames[i].id & CAN_EFF_MASK) | CAN_EFF_FLAG;
|
||||
} else {
|
||||
send_frames_[i].ID = (frames[i].id & CAN_SFF_MASK);
|
||||
}
|
||||
// CMVR_LOG(INFO) << "send can id is " << send_frames_[i].can_id;
|
||||
send_frames_[i].LEN = frames[i].len;
|
||||
std::memcpy(send_frames_[i].DATA, frames[i].data, frames[i].len);
|
||||
send_frames_[i].MSGTYPE = PCAN_MESSAGE_EXTENDED;
|
||||
// Synchronous transmission of CAN messages
|
||||
TPCANStatus ret = CAN_Write(PcanHandle, &send_frames_[i]);
|
||||
if (ret != PCAN_ERROR_OK) {
|
||||
CMVR_LOG(ERROR) << "send message failed, error code: " << ret;
|
||||
return ErrorCode::CAN_CLIENT_ERROR_BASE;
|
||||
}
|
||||
}
|
||||
|
||||
return ErrorCode::OK;
|
||||
}
|
||||
|
||||
cmvr::msgs::ErrorCode PcanClient::receive(std::vector<CanFrame> *const frames, int32_t *const frame_num) {
|
||||
if (!is_started_) {
|
||||
CMVR_LOG(ERROR) << "Nvidia can client is not init! Please init first!";
|
||||
return ErrorCode::CAN_CLIENT_ERROR_RECV_FAILED;
|
||||
}
|
||||
|
||||
if (*frame_num > MAX_CAN_RECV_FRAME_LEN || *frame_num < 0) {
|
||||
CMVR_LOG(ERROR) << "recv can frame num not in range[0, " << MAX_CAN_RECV_FRAME_LEN
|
||||
<< "], frame_num:" << *frame_num;
|
||||
// TODO(Authors): check the difference of returning frame_num/error_code
|
||||
return ErrorCode::CAN_CLIENT_ERROR_FRAME_NUM;
|
||||
}
|
||||
TPCANTimestamp CANTimeStamp;
|
||||
for (int32_t i = 0; i < *frame_num && i < MAX_CAN_RECV_FRAME_LEN; ++i) {
|
||||
CanFrame cf;
|
||||
|
||||
// We execute the "Read" function of the PCANBasic
|
||||
TPCANStatus ret = CAN_Read(PcanHandle, &recv_frames_[i], &CANTimeStamp);
|
||||
if (ret != PCAN_ERROR_OK) {
|
||||
|
||||
CMVR_LOG(ERROR) << "receive message failed, error code: " << ret;
|
||||
return ErrorCode::CAN_CLIENT_ERROR_BASE;
|
||||
}
|
||||
if (recv_frames_[i].LEN > CANBUS_MESSAGE_LENGTH ||
|
||||
recv_frames_[i].LEN < 0) {
|
||||
CMVR_LOG(ERROR) << "recv_frames_[" << i
|
||||
<< "].can_dlc = " << recv_frames_[i].LEN
|
||||
<< ", which is not equal to can message data length ("
|
||||
<< CANBUS_MESSAGE_LENGTH << ").";
|
||||
return ErrorCode::CAN_CLIENT_ERROR_RECV_FAILED;
|
||||
}
|
||||
if (recv_frames_[i].ID > CAN_STANDARD_MAX_ID) {
|
||||
cf.id = enable_can_err_check_
|
||||
? recv_frames_[i].ID & CAN_EFF_MASK | CAN_ERR_FLAG
|
||||
: recv_frames_[i].ID & CAN_EFF_MASK;
|
||||
} else {
|
||||
cf.id = (recv_frames_[i].ID & CAN_SFF_MASK);
|
||||
}
|
||||
CMVR_LOG(INFO) << "Socket can receive can id is " << recv_frames_[i].ID;
|
||||
cf.len = recv_frames_[i].LEN;
|
||||
std::memcpy(cf.data, recv_frames_[i].DATA, recv_frames_[i].LEN);
|
||||
frames->push_back(cf);
|
||||
}
|
||||
return ErrorCode::OK;
|
||||
}
|
||||
|
||||
std::string PcanClient::getErrorString(const int32_t status) {
|
||||
return "";
|
||||
}
|
||||
} // namespace device
|
||||
} // namespace cmvr
|
||||
@ -1,86 +0,0 @@
|
||||
//
|
||||
// Created by lgv on 2025/8/7.
|
||||
//
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @brief Defines the SocketCanClientRaw class which inherits AbstractCanbus.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <linux/can.h>
|
||||
#include <linux/can/raw.h>
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "cmvr/msgs/error_code.pb.h"
|
||||
#include "cmvr/msgs/can_card_parameter.pb.h"
|
||||
#include "cmvr/config/motor_config/motor_config.pb.h"
|
||||
|
||||
#include "gflags/gflags.h"
|
||||
#include "../../abstract_canbus.h"
|
||||
#include "canbus/common/canbus_consts.h"
|
||||
|
||||
#include <PCANBasic.h>
|
||||
|
||||
namespace cmvr {
|
||||
namespace device {
|
||||
|
||||
class PcanClient final : public AbstractCanbus {
|
||||
public:
|
||||
explicit PcanClient(const config::SocketCanConfig &cfg);
|
||||
~PcanClient();
|
||||
std::string typeName() const override { return "PcanClient"; }
|
||||
bool init() override;
|
||||
bool start() override;
|
||||
bool stop() override;
|
||||
|
||||
/**
|
||||
* @brief Send messages
|
||||
* @param frames The messages to send.
|
||||
* @param frame_num The amount of messages to send.
|
||||
* @return The status of the sending action
|
||||
*/
|
||||
cmvr::msgs::ErrorCode send(const std::vector<CanFrame> &frames,
|
||||
int32_t *const frame_num) override;
|
||||
|
||||
/**
|
||||
* @brief Receive messages
|
||||
* @param frames The messages to receive.
|
||||
* @param frame_num The amount of messages to receive.
|
||||
* @return The status of the receiving action
|
||||
*/
|
||||
cmvr::msgs::ErrorCode receive(std::vector<CanFrame> *const frames,
|
||||
int32_t *const frame_num) override;
|
||||
|
||||
/**
|
||||
* @brief Get the error string.
|
||||
* @param status The status to get the error string.
|
||||
*/
|
||||
std::string getErrorString(const int32_t status) override;
|
||||
private:
|
||||
int dev_handler_ = 0;
|
||||
cmvr::msgs::CANCardParameter::CANChannelId port_;
|
||||
cmvr::msgs::CANCardParameter::CANInterface interface_;
|
||||
TPCANMsg send_frames_[MAX_CAN_SEND_FRAME_LEN];
|
||||
TPCANMsg recv_frames_[MAX_CAN_RECV_FRAME_LEN];
|
||||
|
||||
|
||||
//
|
||||
bool enable_can_err_check_{false};
|
||||
const TPCANHandle PcanHandle = PCAN_USBBUS1;
|
||||
const TPCANBaudrate Bitrate = PCAN_BAUD_1M;
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -1,46 +0,0 @@
|
||||
#include "common/base/logging/logger.h"
|
||||
//
|
||||
// Created by lgv on 2025/8/7.
|
||||
//
|
||||
#include "cmvr/msgs/error_code.pb.h"
|
||||
#include "cmvr/msgs/can_card_parameter.pb.h"
|
||||
#include "canbus/can_client/pcan/pcan_client.h"
|
||||
#include "gtest/gtest.h"
|
||||
namespace cmvr {
|
||||
namespace device {
|
||||
using cmvr::msgs::ErrorCode;
|
||||
using cmvr::msgs::CANCardParameter;
|
||||
|
||||
TEST(PcanClienTest, simple_test) {
|
||||
CANCardParameter param;
|
||||
param.set_brand(CANCardParameter::SOCKET_CAN_RAW);
|
||||
param.set_channel_id(CANCardParameter::CHANNEL_ID_ZERO);
|
||||
|
||||
config::SocketCanConfig cfg;
|
||||
cfg.set_channel_id(0);
|
||||
PcanClient socket_can_client(cfg);
|
||||
|
||||
socket_can_client.init();
|
||||
|
||||
// EXPECT_EQ(socket_can_client.start(), ErrorCode::CAN_CLIENT_ERROR_BASE);
|
||||
socket_can_client.start();
|
||||
std::vector<CanFrame> frames;
|
||||
// int32_t num = 0;
|
||||
// EXPECT_EQ(socket_can_client.send(frames, &num),
|
||||
// ErrorCode::OK);
|
||||
// ++num;
|
||||
// EXPECT_EQ(socket_can_client.receive(&frames, &num),
|
||||
// ErrorCode::OK);
|
||||
// CMVR_LOG(INFO) << frames.at(0).CanFrameString();
|
||||
CanFrame can_frame;
|
||||
can_frame.id = 0x123;
|
||||
can_frame.len = 8;
|
||||
memset(can_frame.data, 0xA3, sizeof(can_frame.data));
|
||||
frames.clear();
|
||||
frames.push_back(can_frame);
|
||||
EXPECT_EQ(socket_can_client.sendSingleFrame(frames),
|
||||
ErrorCode::OK);
|
||||
socket_can_client.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7,30 +7,3 @@ add_library(cmvr_es::device::rh56dftp_dexhand ALIAS rh56dftp_dexhand)
|
||||
target_link_libraries(rh56dftp_dexhand PRIVATE cmvr_es::hardware cmvr_es::proto -lmodbus)
|
||||
|
||||
install(TARGETS rh56dftp_dexhand LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(rh56dftp_dexhand_stop_all_test
|
||||
tests/rh56dftp_dexhand_stop_all_test.cpp
|
||||
)
|
||||
target_link_libraries(rh56dftp_dexhand_stop_all_test PRIVATE
|
||||
cmvr_es::device::rh56dftp_dexhand
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME rh56dftp_dexhand_stop_all_test
|
||||
COMMAND rh56dftp_dexhand_stop_all_test
|
||||
)
|
||||
set(_rh56_stop_all_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _rh56_stop_all_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(rh56dftp_dexhand_stop_all_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_rh56_stop_all_test_environment}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -1,348 +0,0 @@
|
||||
#include "devices/dexhand/rh56dftp_dexhand/include/rh56dftp_dexhand.h"
|
||||
|
||||
#include <array>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <deque>
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace cmvr::device {
|
||||
namespace {
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
class FakeModbusController final : public ModbusController {
|
||||
public:
|
||||
bool open(const std::string&, int) override
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
open_ = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void close() override
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
open_ = false;
|
||||
}
|
||||
|
||||
bool isOpen() const override
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return open_;
|
||||
}
|
||||
|
||||
bool writeRegisters(
|
||||
int,
|
||||
const uint16_t* values,
|
||||
const int count) override
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
++write_calls_;
|
||||
write_started_ = true;
|
||||
condition_.notify_all();
|
||||
condition_.wait(lock, [this] { return !block_write_; });
|
||||
if (!write_succeeds_) {
|
||||
return false;
|
||||
}
|
||||
actual_angles_.assign(values, values + count);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool readRegisterBlock(
|
||||
const int address,
|
||||
const int count,
|
||||
std::vector<uint16_t>& values) override
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
++read_calls_;
|
||||
read_started_ = true;
|
||||
condition_.notify_all();
|
||||
condition_.wait(lock, [this] { return !block_read_; });
|
||||
const std::vector<uint16_t>* source = &actual_angles_;
|
||||
std::vector<uint16_t> sampled_angles;
|
||||
if (address == 1546 && !actual_angle_samples_.empty()) {
|
||||
const auto sample = actual_angle_samples_.front();
|
||||
actual_angle_samples_.pop_front();
|
||||
sampled_angles.assign(sample.begin(), sample.end());
|
||||
source = &sampled_angles;
|
||||
}
|
||||
values.assign(static_cast<std::size_t>(count), 0U);
|
||||
for (std::size_t index = 0;
|
||||
index < values.size() && index < source->size();
|
||||
++index) {
|
||||
values[index] = (*source)[index];
|
||||
}
|
||||
return read_succeeds_;
|
||||
}
|
||||
|
||||
void setActualAngles(const std::array<uint16_t, 6>& values)
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
actual_angles_.assign(values.begin(), values.end());
|
||||
actual_angle_samples_.clear();
|
||||
}
|
||||
|
||||
void setActualAngleSamples(
|
||||
std::deque<std::array<uint16_t, 6>> samples)
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
actual_angle_samples_ = std::move(samples);
|
||||
}
|
||||
|
||||
void setWriteSucceeds(const bool succeeds)
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
write_succeeds_ = succeeds;
|
||||
}
|
||||
|
||||
void blockNextRead()
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_read_ = true;
|
||||
read_started_ = false;
|
||||
}
|
||||
|
||||
void releaseRead()
|
||||
{
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_read_ = false;
|
||||
}
|
||||
condition_.notify_all();
|
||||
}
|
||||
|
||||
bool waitForRead(const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return condition_.wait_for(
|
||||
lock, timeout, [this] { return read_started_; });
|
||||
}
|
||||
|
||||
bool waitForReadCalls(
|
||||
const int expected,
|
||||
const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return condition_.wait_for(
|
||||
lock, timeout, [this, expected] { return read_calls_ >= expected; });
|
||||
}
|
||||
|
||||
void blockNextWrite()
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_write_ = true;
|
||||
write_started_ = false;
|
||||
}
|
||||
|
||||
void releaseWrite()
|
||||
{
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_write_ = false;
|
||||
}
|
||||
condition_.notify_all();
|
||||
}
|
||||
|
||||
bool waitForWrite(const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return condition_.wait_for(
|
||||
lock, timeout, [this] { return write_started_; });
|
||||
}
|
||||
|
||||
int readCalls() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return read_calls_;
|
||||
}
|
||||
|
||||
int writeCalls() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return write_calls_;
|
||||
}
|
||||
|
||||
private:
|
||||
mutable std::mutex mutex_;
|
||||
std::condition_variable condition_;
|
||||
std::vector<uint16_t> actual_angles_{6U, 0U};
|
||||
std::deque<std::array<uint16_t, 6>> actual_angle_samples_;
|
||||
bool open_{false};
|
||||
bool block_read_{false};
|
||||
bool block_write_{false};
|
||||
bool read_started_{false};
|
||||
bool write_started_{false};
|
||||
bool read_succeeds_{true};
|
||||
bool write_succeeds_{true};
|
||||
int read_calls_{0};
|
||||
int write_calls_{0};
|
||||
};
|
||||
|
||||
struct TestHand {
|
||||
TestHand()
|
||||
{
|
||||
config.set_id("rh56-test");
|
||||
config.set_ip("fake-modbus");
|
||||
auto controller = std::make_unique<FakeModbusController>();
|
||||
fake = controller.get();
|
||||
hand = std::make_unique<RH56DFTPDexhand>(
|
||||
config, std::move(controller));
|
||||
EXPECT_TRUE(hand->init());
|
||||
}
|
||||
|
||||
~TestHand()
|
||||
{
|
||||
if (hand) {
|
||||
hand->stop();
|
||||
}
|
||||
}
|
||||
|
||||
config::RH56DFTPDexHandConfig config;
|
||||
FakeModbusController* fake{nullptr};
|
||||
std::unique_ptr<RH56DFTPDexhand> hand;
|
||||
};
|
||||
|
||||
TEST(RH56DFTPDexhandStopAllTest, IdleTactileDeviceStopsWithoutClosingLifecycle)
|
||||
{
|
||||
TestHand fixture;
|
||||
|
||||
EXPECT_TRUE(fixture.hand->stopOperationalActivity());
|
||||
EXPECT_EQ(fixture.hand->state(), AbstractDexHand::Status::INITIALIZED);
|
||||
EXPECT_TRUE(fixture.fake->isOpen());
|
||||
|
||||
const int reads_before = fixture.fake->readCalls();
|
||||
(void)fixture.hand->getSensorData(
|
||||
AbstractDexHand::FingerType::INDEX,
|
||||
AbstractDexHand::TactileRegion::TIP);
|
||||
EXPECT_EQ(fixture.fake->readCalls(), reads_before);
|
||||
}
|
||||
|
||||
TEST(RH56DFTPDexhandStopAllTest, UnreachedAngleTargetFailsClosedThenRecovers)
|
||||
{
|
||||
TestHand fixture;
|
||||
const std::vector<int> target{100, 200, 300, 400, 500, 600};
|
||||
|
||||
fixture.hand->setAngles(target);
|
||||
fixture.fake->setActualAngles({0, 0, 0, 0, 0, 0});
|
||||
EXPECT_FALSE(fixture.hand->stopOperationalActivity());
|
||||
|
||||
fixture.fake->setActualAngles({100, 200, 300, 400, 500, 600});
|
||||
EXPECT_TRUE(fixture.hand->stopOperationalActivity());
|
||||
EXPECT_TRUE(fixture.fake->isOpen());
|
||||
}
|
||||
|
||||
TEST(RH56DFTPDexhandStopAllTest, MovingSampleAtTargetDoesNotConfirmStop)
|
||||
{
|
||||
TestHand fixture;
|
||||
const std::vector<int> target{100, 200, 300, 400, 500, 600};
|
||||
|
||||
fixture.hand->setAngles(target);
|
||||
fixture.fake->setActualAngleSamples({
|
||||
{100, 200, 300, 400, 500, 600},
|
||||
{103, 203, 303, 403, 503, 603},
|
||||
{106, 206, 306, 406, 506, 606},
|
||||
});
|
||||
EXPECT_FALSE(fixture.hand->stopOperationalActivity());
|
||||
|
||||
fixture.fake->setActualAngles({100, 200, 300, 400, 500, 600});
|
||||
EXPECT_TRUE(fixture.hand->stopOperationalActivity());
|
||||
}
|
||||
|
||||
TEST(RH56DFTPDexhandStopAllTest, FailedAngleWriteRemainsUnconfirmed)
|
||||
{
|
||||
TestHand fixture;
|
||||
fixture.fake->setActualAngles({0, 0, 0, 0, 0, 0});
|
||||
fixture.fake->setWriteSucceeds(false);
|
||||
|
||||
fixture.hand->setAngles({100, 200, 300, 400, 500, 600});
|
||||
|
||||
EXPECT_FALSE(fixture.hand->stopOperationalActivity());
|
||||
}
|
||||
|
||||
TEST(RH56DFTPDexhandStopAllTest, StopWaitsForAdmittedAngleWrite)
|
||||
{
|
||||
TestHand fixture;
|
||||
fixture.fake->blockNextWrite();
|
||||
const std::vector<int> target{100, 200, 300, 400, 500, 600};
|
||||
auto command = std::async(std::launch::async, [&] {
|
||||
fixture.hand->setAngles(target);
|
||||
});
|
||||
ASSERT_TRUE(fixture.fake->waitForWrite(500ms));
|
||||
|
||||
auto stop = std::async(std::launch::async, [&] {
|
||||
return fixture.hand->stopOperationalActivity();
|
||||
});
|
||||
EXPECT_EQ(stop.wait_for(20ms), std::future_status::timeout);
|
||||
|
||||
fixture.fake->releaseWrite();
|
||||
EXPECT_EQ(command.wait_for(500ms), std::future_status::ready);
|
||||
command.get();
|
||||
ASSERT_EQ(stop.wait_for(500ms), std::future_status::ready);
|
||||
EXPECT_TRUE(stop.get());
|
||||
|
||||
const int writes_before = fixture.fake->writeCalls();
|
||||
fixture.hand->setAngles(target);
|
||||
EXPECT_EQ(fixture.fake->writeCalls(), writes_before);
|
||||
EXPECT_TRUE(fixture.hand->resumeOperationalActivity());
|
||||
fixture.hand->setAngles(target);
|
||||
EXPECT_EQ(fixture.fake->writeCalls(), writes_before + 1);
|
||||
}
|
||||
|
||||
TEST(RH56DFTPDexhandStopAllTest, StopWaitsForAdmittedTactileRead)
|
||||
{
|
||||
TestHand fixture;
|
||||
fixture.fake->blockNextRead();
|
||||
auto read = std::async(std::launch::async, [&] {
|
||||
return fixture.hand->getSensorData(
|
||||
AbstractDexHand::FingerType::INDEX,
|
||||
AbstractDexHand::TactileRegion::TIP);
|
||||
});
|
||||
ASSERT_TRUE(fixture.fake->waitForRead(500ms));
|
||||
|
||||
auto stop = std::async(std::launch::async, [&] {
|
||||
return fixture.hand->stopOperationalActivity();
|
||||
});
|
||||
EXPECT_EQ(stop.wait_for(20ms), std::future_status::timeout);
|
||||
|
||||
fixture.fake->releaseRead();
|
||||
EXPECT_EQ(read.wait_for(500ms), std::future_status::ready);
|
||||
(void)read.get();
|
||||
ASSERT_EQ(stop.wait_for(500ms), std::future_status::ready);
|
||||
EXPECT_TRUE(stop.get());
|
||||
}
|
||||
|
||||
TEST(RH56DFTPDexhandStopAllTest, StopDrainsAndPausesBackgroundTactilePolling)
|
||||
{
|
||||
TestHand fixture;
|
||||
ASSERT_TRUE(fixture.hand->start());
|
||||
|
||||
const int reads_before_block = fixture.fake->readCalls();
|
||||
fixture.fake->blockNextRead();
|
||||
ASSERT_TRUE(fixture.fake->waitForReadCalls(reads_before_block + 1, 500ms));
|
||||
|
||||
auto stop = std::async(std::launch::async, [&] {
|
||||
return fixture.hand->stopOperationalActivity();
|
||||
});
|
||||
EXPECT_EQ(stop.wait_for(20ms), std::future_status::timeout);
|
||||
|
||||
fixture.fake->releaseRead();
|
||||
ASSERT_EQ(stop.wait_for(500ms), std::future_status::ready);
|
||||
EXPECT_TRUE(stop.get());
|
||||
|
||||
const int reads_after_stop = fixture.fake->readCalls();
|
||||
std::this_thread::sleep_for(30ms);
|
||||
EXPECT_EQ(fixture.fake->readCalls(), reads_after_stop);
|
||||
|
||||
ASSERT_TRUE(fixture.hand->resumeOperationalActivity());
|
||||
EXPECT_TRUE(fixture.fake->waitForReadCalls(reads_after_stop + 1, 500ms));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::device
|
||||
@ -34,14 +34,3 @@ RobotArm 和业务 Task 只依赖 `MotorManager`/`AbstractMotor` 的稳定接口
|
||||
- 软件 `emergencyStop` 和 Quick Stop 不具备功能安全等级;
|
||||
- 真实设备必须具有经风险评估确定的硬接线急停、安全继电器和驱动器安全链;
|
||||
- 新硬件配置保持 `enable: false`,完成方向、限位和故障注入验证后才能启用。
|
||||
|
||||
## 测试
|
||||
|
||||
```bash
|
||||
cmake --build build --target grpc_motor_service_test -j4
|
||||
ctest --test-dir build \
|
||||
-R '^grpc_motor_service_test$' \
|
||||
--output-on-failure
|
||||
```
|
||||
|
||||
该测试使用 fake motor,不替代真实总线、驱动器或安全链验证。
|
||||
|
||||
@ -7,32 +7,3 @@ add_library(cmvr_es::device::ffmpeg_speaker ALIAS ffmpeg_speaker)
|
||||
target_link_libraries(ffmpeg_speaker PRIVATE -lpulse-simple -lpulse cmvr_es::proto)
|
||||
|
||||
install(TARGETS ffmpeg_speaker LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(ffmpeg_speaker_lifecycle_test
|
||||
tests/ffmpeg_speaker_lifecycle_test.cpp
|
||||
)
|
||||
target_link_libraries(ffmpeg_speaker_lifecycle_test
|
||||
PRIVATE
|
||||
cmvr_es::device::ffmpeg_speaker
|
||||
avcodec
|
||||
avformat
|
||||
avutil
|
||||
swresample
|
||||
)
|
||||
add_test(
|
||||
NAME ffmpeg_speaker_lifecycle_test
|
||||
COMMAND ffmpeg_speaker_lifecycle_test
|
||||
)
|
||||
set(_ffmpeg_speaker_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _ffmpeg_speaker_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(ffmpeg_speaker_lifecycle_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_ffmpeg_speaker_test_environment}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -1,54 +0,0 @@
|
||||
#include "include/ffmpeg_speaker.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace {
|
||||
|
||||
bool check(const bool condition, const char* expression, const int line)
|
||||
{
|
||||
if (condition) {
|
||||
return true;
|
||||
}
|
||||
std::cerr << "CHECK failed at line " << line << ": " << expression << '\n';
|
||||
return false;
|
||||
}
|
||||
|
||||
#define CHECK_TRUE(expression) \
|
||||
do { \
|
||||
if (!check(static_cast<bool>(expression), #expression, __LINE__)) { \
|
||||
return 1; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
cmvr::config::FFMpegSpeakerConfig config;
|
||||
config.set_id("lifecycle-test-speaker");
|
||||
cmvr::device::ffmpegSpeaker speaker(config);
|
||||
cmvr::device::SpeakerState state{};
|
||||
|
||||
CHECK_TRUE(speaker.init());
|
||||
speaker.getState(state);
|
||||
CHECK_TRUE(state.is_initialized);
|
||||
|
||||
speaker.resetPlayState();
|
||||
speaker.getState(state);
|
||||
CHECK_TRUE(state.is_initialized);
|
||||
|
||||
CHECK_TRUE(speaker.stopPlayback());
|
||||
speaker.getState(state);
|
||||
CHECK_TRUE(state.is_initialized);
|
||||
|
||||
speaker.stopStreaming();
|
||||
speaker.getState(state);
|
||||
CHECK_TRUE(state.is_initialized);
|
||||
|
||||
CHECK_TRUE(speaker.stop());
|
||||
speaker.getState(state);
|
||||
CHECK_TRUE(!state.is_initialized);
|
||||
|
||||
std::cout << "ffmpeg_speaker_lifecycle_test: PASS\n";
|
||||
return 0;
|
||||
}
|
||||
@ -229,16 +229,6 @@ ring generation 不等于 `TrackDescriptor::generation`,ring 的 `ReadResult.s
|
||||
|
||||
## 测试
|
||||
|
||||
MediaSourceManager:
|
||||
|
||||
```bash
|
||||
cmake --build build --target media_source_manager_test
|
||||
ctest \
|
||||
--test-dir build \
|
||||
-R '^media_source_manager_test$' \
|
||||
--output-on-failure
|
||||
```
|
||||
|
||||
DeviceManager 已有 `device_manager_snapshot_test`,覆盖全量状态表、生命周期失败、
|
||||
异常限长、排序和值快照并发读取。TaskManager 仍缺少独立 CTest。修改其行为时
|
||||
至少补充:
|
||||
|
||||
@ -12,23 +12,3 @@ add_library(
|
||||
ALIAS control_authority_manager
|
||||
)
|
||||
install(TARGETS control_authority_manager ARCHIVE DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(control_authority_manager_test
|
||||
tests/control_authority_manager_test.cpp
|
||||
)
|
||||
target_link_libraries(control_authority_manager_test
|
||||
PRIVATE
|
||||
cmvr_es::control_authority_manager
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME control_authority_manager_test
|
||||
COMMAND control_authority_manager_test
|
||||
)
|
||||
set_tests_properties(control_authority_manager_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -1,923 +0,0 @@
|
||||
#include "manager/control_authority_manager/include/control_authority_manager.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <future>
|
||||
#include <thread>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace cmvr::control {
|
||||
namespace {
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
class ControlAuthorityManagerTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
ControlAuthorityManager::instance().clear();
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
ControlAuthorityManager::instance().clear();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest, LeaseIsExclusiveAndExactReleaseRestoresAccess)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto first =
|
||||
manager.tryAcquire("right_arm", "session-a", 100ms);
|
||||
ASSERT_TRUE(first.acquired);
|
||||
EXPECT_TRUE(manager.validate(first.token));
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
|
||||
const auto conflict =
|
||||
manager.tryAcquire("right_arm", "session-b", 100ms);
|
||||
EXPECT_FALSE(conflict.acquired);
|
||||
|
||||
manager.release(first.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
EXPECT_TRUE(
|
||||
manager.tryAcquire("right_arm", "session-b", 100ms)
|
||||
.acquired);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest, StaleGenerationCannotReleaseNewLease)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto old =
|
||||
manager.tryAcquire("right_arm", "session-a", 100ms);
|
||||
ASSERT_TRUE(old.acquired);
|
||||
manager.release(old.token);
|
||||
const auto current =
|
||||
manager.tryAcquire("right_arm", "session-a", 100ms);
|
||||
ASSERT_TRUE(current.acquired);
|
||||
ASSERT_NE(
|
||||
old.token.generation,
|
||||
current.token.generation);
|
||||
|
||||
manager.release(old.token);
|
||||
EXPECT_TRUE(manager.validate(current.token));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
SafetyBarrierAtomicallyPreemptsControlAndRejectsOtherOwners)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 100ms);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
|
||||
const auto barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 100ms);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
EXPECT_FALSE(manager.validate(control.token));
|
||||
EXPECT_TRUE(manager.validate(barrier.token));
|
||||
|
||||
const auto move_during_stop =
|
||||
manager.tryAcquire("right_arm", "new-move", 100ms);
|
||||
EXPECT_FALSE(move_during_stop.acquired);
|
||||
const auto second_stop = manager.preemptAcquire(
|
||||
"right_arm", "second-stop", 100ms);
|
||||
ASSERT_TRUE(second_stop.acquired) << second_stop.detail;
|
||||
|
||||
manager.release(control.token);
|
||||
EXPECT_TRUE(manager.validate(barrier.token));
|
||||
manager.release(barrier.token);
|
||||
EXPECT_TRUE(manager.validate(second_stop.token));
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "new-move", 100ms)
|
||||
.acquired);
|
||||
manager.release(second_stop.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
SafetyPreemptionReturnsWhileDispatchIsInFlightAndWaitsForBoth)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
|
||||
auto dispatch = manager.tryBeginDispatch(control.token);
|
||||
ASSERT_TRUE(dispatch.acquired());
|
||||
auto pending_barrier = std::async(
|
||||
std::launch::async,
|
||||
[&manager]() {
|
||||
return manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
});
|
||||
|
||||
const auto preempt_status = pending_barrier.wait_for(100ms);
|
||||
if (preempt_status != std::future_status::ready) {
|
||||
dispatch = {};
|
||||
const auto cleanup_barrier = pending_barrier.get();
|
||||
if (cleanup_barrier.acquired) {
|
||||
manager.release(cleanup_barrier.token);
|
||||
}
|
||||
FAIL() << "safety preemption waited for an in-flight dispatch";
|
||||
return;
|
||||
}
|
||||
|
||||
const auto acquired_barrier = pending_barrier.get();
|
||||
ASSERT_TRUE(acquired_barrier.acquired)
|
||||
<< acquired_barrier.detail;
|
||||
EXPECT_FALSE(manager.validate(control.token));
|
||||
EXPECT_FALSE(manager.tryBeginDispatch(control.token).acquired());
|
||||
|
||||
EXPECT_FALSE(manager.waitForPreemptedRelease(
|
||||
acquired_barrier.token, 10ms));
|
||||
manager.release(control.token);
|
||||
EXPECT_FALSE(manager.waitForPreemptedRelease(
|
||||
acquired_barrier.token, 10ms));
|
||||
|
||||
dispatch = {};
|
||||
EXPECT_TRUE(manager.waitForPreemptedRelease(
|
||||
acquired_barrier.token, 10ms));
|
||||
manager.release(acquired_barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
DispatchOnOneResourceDoesNotDelaySafetyPreemptionOnAnother)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto right_control =
|
||||
manager.tryAcquire("right_arm", "right-move", 1s);
|
||||
const auto left_control =
|
||||
manager.tryAcquire("left_arm", "left-move", 1s);
|
||||
ASSERT_TRUE(right_control.acquired);
|
||||
ASSERT_TRUE(left_control.acquired);
|
||||
|
||||
auto right_dispatch = manager.tryBeginDispatch(right_control.token);
|
||||
ASSERT_TRUE(right_dispatch.acquired());
|
||||
auto pending_left_barrier = std::async(
|
||||
std::launch::async,
|
||||
[&manager]() {
|
||||
return manager.preemptAcquire(
|
||||
"left_arm", "left-stop", 1s);
|
||||
});
|
||||
|
||||
const auto preempt_status = pending_left_barrier.wait_for(100ms);
|
||||
if (preempt_status != std::future_status::ready) {
|
||||
right_dispatch = {};
|
||||
const auto cleanup_barrier = pending_left_barrier.get();
|
||||
if (cleanup_barrier.acquired) {
|
||||
manager.release(cleanup_barrier.token);
|
||||
}
|
||||
FAIL() << "one resource's dispatch blocked another resource's stop";
|
||||
return;
|
||||
}
|
||||
|
||||
const auto left_barrier = pending_left_barrier.get();
|
||||
ASSERT_TRUE(left_barrier.acquired) << left_barrier.detail;
|
||||
manager.release(left_control.token);
|
||||
EXPECT_TRUE(manager.waitForPreemptedRelease(
|
||||
left_barrier.token, 0ms));
|
||||
manager.release(left_barrier.token);
|
||||
|
||||
EXPECT_TRUE(right_dispatch.acquired());
|
||||
right_dispatch = {};
|
||||
manager.release(right_control.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
DispatchGuardDestructorReleasesTheInFlightFence)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
|
||||
ControlAcquireResult barrier;
|
||||
{
|
||||
auto dispatch = manager.tryBeginDispatch(control.token);
|
||||
ASSERT_TRUE(dispatch.acquired());
|
||||
barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
manager.release(control.token);
|
||||
EXPECT_FALSE(manager.waitForPreemptedRelease(
|
||||
barrier.token, 0ms));
|
||||
}
|
||||
|
||||
EXPECT_TRUE(manager.waitForPreemptedRelease(barrier.token, 0ms));
|
||||
manager.release(barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
DispatchGuardMoveAssignmentReleasesOnlyItsPreviousFence)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto right_control =
|
||||
manager.tryAcquire("right_arm", "right-move", 1s);
|
||||
const auto left_control =
|
||||
manager.tryAcquire("left_arm", "left-move", 1s);
|
||||
ASSERT_TRUE(right_control.acquired);
|
||||
ASSERT_TRUE(left_control.acquired);
|
||||
|
||||
auto right_dispatch = manager.tryBeginDispatch(right_control.token);
|
||||
auto left_dispatch = manager.tryBeginDispatch(left_control.token);
|
||||
ASSERT_TRUE(right_dispatch.acquired());
|
||||
ASSERT_TRUE(left_dispatch.acquired());
|
||||
const auto right_barrier = manager.preemptAcquire(
|
||||
"right_arm", "right-stop", 1s);
|
||||
const auto left_barrier = manager.preemptAcquire(
|
||||
"left_arm", "left-stop", 1s);
|
||||
ASSERT_TRUE(right_barrier.acquired) << right_barrier.detail;
|
||||
ASSERT_TRUE(left_barrier.acquired) << left_barrier.detail;
|
||||
manager.release(right_control.token);
|
||||
manager.release(left_control.token);
|
||||
|
||||
right_dispatch = std::move(left_dispatch);
|
||||
EXPECT_TRUE(right_dispatch.acquired());
|
||||
EXPECT_FALSE(left_dispatch.acquired());
|
||||
EXPECT_TRUE(manager.waitForPreemptedRelease(
|
||||
right_barrier.token, 0ms));
|
||||
EXPECT_FALSE(manager.waitForPreemptedRelease(
|
||||
left_barrier.token, 0ms));
|
||||
|
||||
right_dispatch = {};
|
||||
EXPECT_TRUE(manager.waitForPreemptedRelease(
|
||||
left_barrier.token, 0ms));
|
||||
manager.release(right_barrier.token);
|
||||
manager.release(left_barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
RevokeKeepsAnInFlightDispatchFencedFromNormalSuccessors)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
auto dispatch = manager.tryBeginDispatch(control.token);
|
||||
ASSERT_TRUE(dispatch.acquired());
|
||||
|
||||
manager.revoke("right_arm");
|
||||
EXPECT_FALSE(manager.validate(control.token));
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "successor", 1s).acquired);
|
||||
manager.release(control.token);
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "successor", 1s).acquired);
|
||||
|
||||
dispatch = {};
|
||||
const auto successor =
|
||||
manager.tryAcquire("right_arm", "successor", 1s);
|
||||
ASSERT_TRUE(successor.acquired) << successor.detail;
|
||||
manager.release(successor.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ClearKeepsInFlightDispatchesWhileErasingIdleEntries)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto active =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(active.acquired);
|
||||
ASSERT_TRUE(manager.tryAcquire("idle_arm", "idle-session", 1s).acquired);
|
||||
auto dispatch = manager.tryBeginDispatch(active.token);
|
||||
ASSERT_TRUE(dispatch.acquired());
|
||||
|
||||
manager.clear();
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "successor", 1s).acquired);
|
||||
const auto idle_successor =
|
||||
manager.tryAcquire("idle_arm", "idle-successor", 1s);
|
||||
ASSERT_TRUE(idle_successor.acquired) << idle_successor.detail;
|
||||
manager.release(idle_successor.token);
|
||||
|
||||
dispatch = {};
|
||||
const auto active_successor =
|
||||
manager.tryAcquire("right_arm", "successor", 1s);
|
||||
ASSERT_TRUE(active_successor.acquired) << active_successor.detail;
|
||||
manager.release(active_successor.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ExpiredLeaseKeepsInFlightDispatchFencedFromNormalSuccessors)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 10ms);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
auto dispatch = manager.tryBeginDispatch(control.token);
|
||||
ASSERT_TRUE(dispatch.acquired());
|
||||
std::this_thread::sleep_for(20ms);
|
||||
|
||||
EXPECT_FALSE(manager.validate(control.token));
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "successor", 1s).acquired);
|
||||
manager.release(control.token);
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "successor", 1s).acquired);
|
||||
|
||||
dispatch = {};
|
||||
const auto successor =
|
||||
manager.tryAcquire("right_arm", "successor", 1s);
|
||||
ASSERT_TRUE(successor.acquired) << successor.detail;
|
||||
manager.release(successor.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
DispatchGuardSurvivesAuthorityMapRehash)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
auto dispatch = manager.tryBeginDispatch(control.token);
|
||||
ASSERT_TRUE(dispatch.acquired());
|
||||
|
||||
for (int index = 0; index < 512; ++index) {
|
||||
ASSERT_TRUE(manager.tryAcquire(
|
||||
"rehash-resource-" + std::to_string(index),
|
||||
"rehash-owner",
|
||||
1s).acquired);
|
||||
}
|
||||
|
||||
const auto barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
manager.release(control.token);
|
||||
EXPECT_FALSE(manager.waitForPreemptedRelease(barrier.token, 0ms));
|
||||
dispatch = {};
|
||||
EXPECT_TRUE(manager.waitForPreemptedRelease(barrier.token, 0ms));
|
||||
manager.release(barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
StaleLeaseCannotBeginDispatchAfterSafetyPreemption)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
const auto barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
|
||||
EXPECT_FALSE(manager.tryBeginDispatch(control.token).acquired());
|
||||
manager.release(barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ReleasedLastSafetyBarrierKeepsPreemptedHandlerFenced)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
const auto barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
|
||||
manager.release(barrier.token);
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "new-move", 1s).acquired);
|
||||
|
||||
manager.release(control.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
EXPECT_TRUE(
|
||||
manager.tryAcquire("right_arm", "new-move", 1s).acquired);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
SafetyBarrierWaitsForPreemptedNormalLeaseRelease)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
const auto barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
|
||||
auto wait_result = std::async(
|
||||
std::launch::async,
|
||||
[&manager, token = barrier.token]() {
|
||||
return manager.waitForPreemptedRelease(token, 1s);
|
||||
});
|
||||
EXPECT_EQ(
|
||||
wait_result.wait_for(30ms),
|
||||
std::future_status::timeout);
|
||||
|
||||
manager.release(control.token);
|
||||
EXPECT_TRUE(wait_result.get());
|
||||
EXPECT_TRUE(manager.validate(barrier.token));
|
||||
manager.release(barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ConditionalSafetyBarrierTracksPreemptedNormalLeaseRelease)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
auto dispatch = manager.tryBeginDispatch(control.token);
|
||||
ASSERT_TRUE(dispatch.acquired());
|
||||
const auto barrier = manager.preemptAcquireIfCurrent(
|
||||
control.token, "timed-out-action", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
|
||||
EXPECT_FALSE(
|
||||
manager.waitForPreemptedRelease(barrier.token, 10ms));
|
||||
dispatch = {};
|
||||
EXPECT_FALSE(
|
||||
manager.waitForPreemptedRelease(barrier.token, 10ms));
|
||||
manager.release(control.token);
|
||||
EXPECT_TRUE(
|
||||
manager.waitForPreemptedRelease(barrier.token, 10ms));
|
||||
manager.release(barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ReleasedSafetyHolderStopsWaitingWithoutAffectingOtherHolder)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
const auto first_barrier = manager.preemptAcquire(
|
||||
"right_arm", "first-stop", 1s);
|
||||
ASSERT_TRUE(first_barrier.acquired) << first_barrier.detail;
|
||||
const auto second_barrier = manager.preemptAcquire(
|
||||
"right_arm", "second-stop", 1s);
|
||||
ASSERT_TRUE(second_barrier.acquired) << second_barrier.detail;
|
||||
|
||||
auto first_wait = std::async(
|
||||
std::launch::async,
|
||||
[&manager, token = first_barrier.token]() {
|
||||
return manager.waitForPreemptedRelease(token, 1s);
|
||||
});
|
||||
auto second_wait = std::async(
|
||||
std::launch::async,
|
||||
[&manager, token = second_barrier.token]() {
|
||||
return manager.waitForPreemptedRelease(token, 1s);
|
||||
});
|
||||
EXPECT_EQ(first_wait.wait_for(30ms), std::future_status::timeout);
|
||||
EXPECT_EQ(second_wait.wait_for(30ms), std::future_status::timeout);
|
||||
|
||||
manager.release(first_barrier.token);
|
||||
EXPECT_FALSE(first_wait.get());
|
||||
EXPECT_EQ(second_wait.wait_for(30ms), std::future_status::timeout);
|
||||
manager.release(control.token);
|
||||
EXPECT_TRUE(second_wait.get());
|
||||
manager.release(second_barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
PreemptedReleaseRequiresExactNormalLeaseToken)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
const auto barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
|
||||
auto forged = control.token;
|
||||
forged.owner_id = "different-owner";
|
||||
manager.release(forged);
|
||||
EXPECT_FALSE(
|
||||
manager.waitForPreemptedRelease(barrier.token, 10ms));
|
||||
|
||||
manager.release(control.token);
|
||||
EXPECT_TRUE(
|
||||
manager.waitForPreemptedRelease(barrier.token, 0ms));
|
||||
manager.release(barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ClearWakesPreemptedReleaseWaiterAndInvalidatesSafetyHolder)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
const auto barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
|
||||
auto wait_result = std::async(
|
||||
std::launch::async,
|
||||
[&manager, token = barrier.token]() {
|
||||
return manager.waitForPreemptedRelease(token, 1s);
|
||||
});
|
||||
EXPECT_EQ(
|
||||
wait_result.wait_for(30ms),
|
||||
std::future_status::timeout);
|
||||
|
||||
manager.clear();
|
||||
EXPECT_FALSE(wait_result.get());
|
||||
manager.release(control.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
RevokeWakesPreemptedReleaseWaiterAndInvalidatesSafetyHolder)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
const auto barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
|
||||
auto wait_result = std::async(
|
||||
std::launch::async,
|
||||
[&manager, token = barrier.token]() {
|
||||
return manager.waitForPreemptedRelease(token, 1s);
|
||||
});
|
||||
EXPECT_EQ(
|
||||
wait_result.wait_for(30ms),
|
||||
std::future_status::timeout);
|
||||
|
||||
manager.revoke("right_arm");
|
||||
EXPECT_FALSE(wait_result.get());
|
||||
manager.release(control.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ExpiredNormalLeaseStillRequiresHandlerReleaseAfterPreemption)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 10ms);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
std::this_thread::sleep_for(20ms);
|
||||
|
||||
const auto barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
EXPECT_FALSE(
|
||||
manager.waitForPreemptedRelease(barrier.token, 10ms));
|
||||
|
||||
manager.release(control.token);
|
||||
EXPECT_TRUE(
|
||||
manager.waitForPreemptedRelease(barrier.token, 0ms));
|
||||
manager.release(barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
QuarantinedFallbackTracksOriginalNormalHandlerRelease)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
ASSERT_TRUE(manager.quarantineIfCurrent(control.token));
|
||||
|
||||
const auto barrier = manager.preemptAcquire(
|
||||
"right_arm", "stop-operation", 1s);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
EXPECT_FALSE(
|
||||
manager.waitForPreemptedRelease(barrier.token, 10ms));
|
||||
|
||||
manager.release(control.token);
|
||||
EXPECT_TRUE(
|
||||
manager.waitForPreemptedRelease(barrier.token, 0ms));
|
||||
manager.release(barrier.token);
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
|
||||
manager.revoke("right_arm");
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
WaitRejectsStaleSafetyTokenForSuccessorEntry)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto old_control =
|
||||
manager.tryAcquire("right_arm", "old-move", 1s);
|
||||
ASSERT_TRUE(old_control.acquired);
|
||||
const auto old_barrier = manager.preemptAcquire(
|
||||
"right_arm", "old-stop", 1s);
|
||||
ASSERT_TRUE(old_barrier.acquired) << old_barrier.detail;
|
||||
manager.release(old_barrier.token);
|
||||
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "new-move", 1s).acquired);
|
||||
manager.release(old_control.token);
|
||||
|
||||
const auto successor =
|
||||
manager.tryAcquire("right_arm", "new-move", 1s);
|
||||
ASSERT_TRUE(successor.acquired);
|
||||
const auto current_barrier = manager.preemptAcquire(
|
||||
"right_arm", "new-stop", 1s);
|
||||
ASSERT_TRUE(current_barrier.acquired) << current_barrier.detail;
|
||||
|
||||
EXPECT_FALSE(manager.waitForPreemptedRelease(
|
||||
old_barrier.token, 0ms));
|
||||
EXPECT_FALSE(manager.waitForPreemptedRelease(
|
||||
current_barrier.token, 10ms));
|
||||
|
||||
manager.release(successor.token);
|
||||
EXPECT_TRUE(manager.waitForPreemptedRelease(
|
||||
current_barrier.token, 0ms));
|
||||
manager.release(current_barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ConditionalSafetyBarrierPreemptsMatchingCurrentLease)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 100ms);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
|
||||
const auto barrier = manager.preemptAcquireIfCurrent(
|
||||
control.token, "timed-out-action", 100ms);
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
EXPECT_FALSE(manager.validate(control.token));
|
||||
EXPECT_TRUE(manager.validate(barrier.token));
|
||||
manager.release(control.token);
|
||||
EXPECT_TRUE(manager.validate(barrier.token));
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "new-move", 100ms)
|
||||
.acquired);
|
||||
|
||||
manager.release(barrier.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ConditionalSafetyBarrierDoesNotPreemptSuccessorForStaleToken)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto old =
|
||||
manager.tryAcquire("right_arm", "move-session", 100ms);
|
||||
ASSERT_TRUE(old.acquired);
|
||||
const auto direct_stop = manager.preemptAcquire(
|
||||
"right_arm", "direct-stop", 100ms);
|
||||
ASSERT_TRUE(direct_stop.acquired) << direct_stop.detail;
|
||||
manager.release(direct_stop.token);
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "move-session", 100ms).acquired);
|
||||
manager.release(old.token);
|
||||
const auto successor =
|
||||
manager.tryAcquire("right_arm", "move-session", 100ms);
|
||||
ASSERT_TRUE(successor.acquired);
|
||||
ASSERT_NE(old.token.generation, successor.token.generation);
|
||||
|
||||
const auto barrier = manager.preemptAcquireIfCurrent(
|
||||
old.token, "delayed-stop", 100ms);
|
||||
EXPECT_FALSE(barrier.acquired);
|
||||
EXPECT_FALSE(barrier.token.valid());
|
||||
EXPECT_TRUE(manager.validate(successor.token));
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "competing-move", 100ms)
|
||||
.acquired);
|
||||
|
||||
manager.release(successor.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ConditionalSafetyBarrierDoesNotJoinExistingSafetyBarrier)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 100ms);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
const auto existing_barrier = manager.preemptAcquire(
|
||||
"right_arm", "direct-stop", 100ms);
|
||||
ASSERT_TRUE(existing_barrier.acquired) << existing_barrier.detail;
|
||||
|
||||
const auto delayed_barrier = manager.preemptAcquireIfCurrent(
|
||||
control.token, "delayed-action-stop", 100ms);
|
||||
EXPECT_FALSE(delayed_barrier.acquired);
|
||||
EXPECT_FALSE(delayed_barrier.token.valid());
|
||||
EXPECT_TRUE(manager.validate(existing_barrier.token));
|
||||
|
||||
manager.release(existing_barrier.token);
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
manager.release(control.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
EXPECT_TRUE(
|
||||
manager.tryAcquire("right_arm", "new-move", 100ms)
|
||||
.acquired);
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
QuarantineSurvivesNormalAndTemporarySafetyTokenRelease)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 20ms);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
|
||||
ASSERT_TRUE(manager.quarantineIfCurrent(control.token));
|
||||
EXPECT_FALSE(manager.validate(control.token));
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
|
||||
manager.release(control.token);
|
||||
std::this_thread::sleep_for(30ms);
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "new-move", 100ms)
|
||||
.acquired);
|
||||
|
||||
const auto temporary_stop = manager.preemptAcquire(
|
||||
"right_arm", "temporary-stop", 100ms);
|
||||
ASSERT_TRUE(temporary_stop.acquired) << temporary_stop.detail;
|
||||
EXPECT_TRUE(manager.validate(temporary_stop.token));
|
||||
manager.release(temporary_stop.token);
|
||||
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "new-move", 100ms)
|
||||
.acquired);
|
||||
|
||||
manager.revoke("right_arm");
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
QuarantineWithStaleTokenDoesNotAffectSuccessor)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto old =
|
||||
manager.tryAcquire("right_arm", "move-session", 100ms);
|
||||
ASSERT_TRUE(old.acquired);
|
||||
manager.release(old.token);
|
||||
const auto successor =
|
||||
manager.tryAcquire("right_arm", "move-session", 100ms);
|
||||
ASSERT_TRUE(successor.acquired);
|
||||
ASSERT_NE(old.token.generation, successor.token.generation);
|
||||
|
||||
EXPECT_FALSE(manager.quarantineIfCurrent(old.token));
|
||||
EXPECT_TRUE(manager.validate(successor.token));
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "competing-move", 100ms)
|
||||
.acquired);
|
||||
|
||||
manager.release(successor.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
RetiredSafetyHolderStaysFailClosedUntilConfirmedRecovery)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
const auto failed_stop = manager.preemptAcquire(
|
||||
"right_arm", "failed-stop", 1s);
|
||||
ASSERT_TRUE(failed_stop.acquired) << failed_stop.detail;
|
||||
|
||||
manager.release(control.token);
|
||||
ASSERT_TRUE(manager.waitForPreemptedRelease(
|
||||
failed_stop.token, 0ms));
|
||||
ASSERT_TRUE(manager.retireSafetyHolder(failed_stop.token));
|
||||
EXPECT_FALSE(manager.validate(failed_stop.token));
|
||||
|
||||
// A delayed destructor release cannot undo the retained fail-closed state.
|
||||
manager.release(failed_stop.token);
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
EXPECT_FALSE(
|
||||
manager.tryAcquire("right_arm", "new-move", 1s).acquired);
|
||||
|
||||
const auto recovery = manager.preemptAcquire(
|
||||
"right_arm", "confirmed-recovery", 1s);
|
||||
ASSERT_TRUE(recovery.acquired) << recovery.detail;
|
||||
ASSERT_TRUE(manager.waitForPreemptedRelease(recovery.token, 0ms));
|
||||
ASSERT_TRUE(manager.recoverRetiredSafetyHolders(recovery.token));
|
||||
EXPECT_TRUE(manager.validate(recovery.token));
|
||||
|
||||
manager.release(recovery.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
RecoveryWaitsForPreemptedNormalHandlerToRelease)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
const auto failed_stop = manager.preemptAcquire(
|
||||
"right_arm", "failed-stop", 1s);
|
||||
ASSERT_TRUE(failed_stop.acquired) << failed_stop.detail;
|
||||
ASSERT_TRUE(manager.retireSafetyHolder(failed_stop.token));
|
||||
|
||||
const auto recovery = manager.preemptAcquire(
|
||||
"right_arm", "confirmed-recovery", 1s);
|
||||
ASSERT_TRUE(recovery.acquired) << recovery.detail;
|
||||
EXPECT_FALSE(manager.recoverRetiredSafetyHolders(recovery.token));
|
||||
EXPECT_FALSE(manager.waitForPreemptedRelease(recovery.token, 10ms));
|
||||
|
||||
manager.release(control.token);
|
||||
ASSERT_TRUE(manager.waitForPreemptedRelease(recovery.token, 0ms));
|
||||
ASSERT_TRUE(manager.recoverRetiredSafetyHolders(recovery.token));
|
||||
manager.release(recovery.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
RecoveryPreservesEveryOtherActiveSafetyHolder)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto retired = manager.preemptAcquire(
|
||||
"right_arm", "failed-stop", 1s);
|
||||
ASSERT_TRUE(retired.acquired) << retired.detail;
|
||||
ASSERT_TRUE(manager.retireSafetyHolder(retired.token));
|
||||
|
||||
const auto independent_stop = manager.preemptAcquire(
|
||||
"right_arm", "independent-stop", 1s);
|
||||
const auto recovery = manager.preemptAcquire(
|
||||
"right_arm", "confirmed-recovery", 1s);
|
||||
ASSERT_TRUE(independent_stop.acquired) << independent_stop.detail;
|
||||
ASSERT_TRUE(recovery.acquired) << recovery.detail;
|
||||
|
||||
ASSERT_TRUE(manager.recoverRetiredSafetyHolders(recovery.token));
|
||||
EXPECT_TRUE(manager.validate(independent_stop.token));
|
||||
EXPECT_TRUE(manager.validate(recovery.token));
|
||||
EXPECT_FALSE(manager.validate(retired.token));
|
||||
|
||||
manager.release(recovery.token);
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
EXPECT_TRUE(manager.validate(independent_stop.token));
|
||||
manager.release(independent_stop.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
RetiredOrForgedSafetyTokenCannotAuthorizeRecovery)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto retired = manager.preemptAcquire(
|
||||
"right_arm", "failed-stop", 1s);
|
||||
ASSERT_TRUE(retired.acquired) << retired.detail;
|
||||
ASSERT_TRUE(manager.retireSafetyHolder(retired.token));
|
||||
EXPECT_FALSE(manager.recoverRetiredSafetyHolders(retired.token));
|
||||
|
||||
const auto recovery = manager.preemptAcquire(
|
||||
"right_arm", "confirmed-recovery", 1s);
|
||||
ASSERT_TRUE(recovery.acquired) << recovery.detail;
|
||||
auto forged = recovery.token;
|
||||
forged.owner_id = "different-owner";
|
||||
EXPECT_FALSE(manager.recoverRetiredSafetyHolders(forged));
|
||||
EXPECT_TRUE(manager.isLeased("right_arm"));
|
||||
|
||||
ASSERT_TRUE(manager.recoverRetiredSafetyHolders(recovery.token));
|
||||
manager.release(recovery.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest,
|
||||
ConfirmedRecoveryCanClearTokenlessQuarantine)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto control =
|
||||
manager.tryAcquire("right_arm", "move-session", 1s);
|
||||
ASSERT_TRUE(control.acquired);
|
||||
ASSERT_TRUE(manager.quarantineIfCurrent(control.token));
|
||||
|
||||
const auto recovery = manager.preemptAcquire(
|
||||
"right_arm", "confirmed-recovery", 1s);
|
||||
ASSERT_TRUE(recovery.acquired) << recovery.detail;
|
||||
EXPECT_FALSE(manager.recoverRetiredSafetyHolders(recovery.token));
|
||||
|
||||
manager.release(control.token);
|
||||
ASSERT_TRUE(manager.waitForPreemptedRelease(recovery.token, 0ms));
|
||||
ASSERT_TRUE(manager.recoverRetiredSafetyHolders(recovery.token));
|
||||
manager.release(recovery.token);
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest, ExpiryAndRenewUseMonotonicLocalTime)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
const auto lease =
|
||||
manager.tryAcquire("right_arm", "session-a", 20ms);
|
||||
ASSERT_TRUE(lease.acquired);
|
||||
std::this_thread::sleep_for(10ms);
|
||||
ASSERT_TRUE(manager.renew(lease.token, 30ms));
|
||||
std::this_thread::sleep_for(20ms);
|
||||
EXPECT_TRUE(manager.validate(lease.token));
|
||||
std::this_thread::sleep_for(20ms);
|
||||
EXPECT_FALSE(manager.validate(lease.token));
|
||||
EXPECT_FALSE(manager.isLeased("right_arm"));
|
||||
}
|
||||
|
||||
TEST_F(ControlAuthorityManagerTest, DifferentArmsCanBeLeasedIndependently)
|
||||
{
|
||||
auto& manager = ControlAuthorityManager::instance();
|
||||
EXPECT_TRUE(
|
||||
manager.tryAcquire("right_arm", "session-a", 100ms)
|
||||
.acquired);
|
||||
EXPECT_TRUE(
|
||||
manager.tryAcquire("left_arm", "session-b", 100ms)
|
||||
.acquired);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::control
|
||||
@ -56,27 +56,4 @@ if(BUILD_TESTING)
|
||||
)
|
||||
endif()
|
||||
|
||||
add_executable(device_manager_lifecycle_test
|
||||
tests/device_manager_lifecycle_test.cpp
|
||||
)
|
||||
target_link_libraries(device_manager_lifecycle_test PRIVATE
|
||||
cmvr_es::device_manager
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME device_manager_lifecycle_test
|
||||
COMMAND device_manager_lifecycle_test
|
||||
)
|
||||
set(_device_manager_lifecycle_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}")
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _device_manager_lifecycle_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(device_manager_lifecycle_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_device_manager_lifecycle_test_environment}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -1,153 +0,0 @@
|
||||
#include "manager/device_manager/include/device_manager.h"
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace {
|
||||
|
||||
class LifecycleDevice final : public cmvr::device::AbstractDevice {
|
||||
public:
|
||||
explicit LifecycleDevice(const std::string& id)
|
||||
: AbstractDevice(id)
|
||||
{
|
||||
}
|
||||
|
||||
cmvr::device::DeviceKind kind() const noexcept override
|
||||
{
|
||||
return cmvr::device::DeviceKind::Camera;
|
||||
}
|
||||
|
||||
std::string typeName() const override { return "LifecycleDevice"; }
|
||||
|
||||
bool start() override
|
||||
{
|
||||
++start_calls;
|
||||
if (throw_on_start) {
|
||||
throw std::runtime_error("start failure");
|
||||
}
|
||||
return start_result;
|
||||
}
|
||||
|
||||
bool stop() override
|
||||
{
|
||||
++stop_calls;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool start_result{true};
|
||||
bool throw_on_start{false};
|
||||
int start_calls{0};
|
||||
int stop_calls{0};
|
||||
};
|
||||
|
||||
class DeviceManagerLifecycleTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
cmvr::device::DeviceManager::destroyInstance();
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
cmvr::device::DeviceManager::destroyInstance();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(DeviceManagerLifecycleTest,
|
||||
EnabledDeviceCreationFailureMarksInitializationFailed)
|
||||
{
|
||||
cmvr::config::DeviceManagerConfig config;
|
||||
auto* entry = config.add_devices();
|
||||
entry->set_id("unsupported");
|
||||
entry->set_type(
|
||||
cmvr::config::DeviceConfigEntry::DEVICE_TYPE_UNKNOWN);
|
||||
entry->set_enable(true);
|
||||
|
||||
auto& manager =
|
||||
cmvr::device::DeviceManager::getInstance(config);
|
||||
EXPECT_FALSE(manager.initialized());
|
||||
EXPECT_FALSE(manager.start());
|
||||
}
|
||||
|
||||
TEST_F(DeviceManagerLifecycleTest, DisabledInvalidDeviceIsIgnored)
|
||||
{
|
||||
cmvr::config::DeviceManagerConfig config;
|
||||
auto* entry = config.add_devices();
|
||||
entry->set_id("disabled");
|
||||
entry->set_type(
|
||||
cmvr::config::DeviceConfigEntry::DEVICE_TYPE_UNKNOWN);
|
||||
entry->set_enable(false);
|
||||
|
||||
auto& manager =
|
||||
cmvr::device::DeviceManager::getInstance(config);
|
||||
EXPECT_TRUE(manager.initialized());
|
||||
EXPECT_TRUE(manager.start());
|
||||
}
|
||||
|
||||
TEST_F(DeviceManagerLifecycleTest,
|
||||
DeviceStartFailureIsReturnedAndTriggersStop)
|
||||
{
|
||||
cmvr::config::DeviceManagerConfig config;
|
||||
auto& manager =
|
||||
cmvr::device::DeviceManager::getInstance(config);
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
|
||||
auto device =
|
||||
std::make_shared<LifecycleDevice>("start_failure");
|
||||
device->start_result = false;
|
||||
manager.registerDevice(device);
|
||||
|
||||
EXPECT_FALSE(manager.start());
|
||||
EXPECT_EQ(device->start_calls, 1);
|
||||
EXPECT_EQ(device->stop_calls, 1);
|
||||
}
|
||||
|
||||
TEST_F(DeviceManagerLifecycleTest,
|
||||
DeviceStartExceptionIsReturnedAndTriggersStop)
|
||||
{
|
||||
cmvr::config::DeviceManagerConfig config;
|
||||
auto& manager =
|
||||
cmvr::device::DeviceManager::getInstance(config);
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
|
||||
auto device =
|
||||
std::make_shared<LifecycleDevice>("start_exception");
|
||||
device->throw_on_start = true;
|
||||
manager.registerDevice(device);
|
||||
|
||||
EXPECT_FALSE(manager.start());
|
||||
EXPECT_EQ(device->start_calls, 1);
|
||||
EXPECT_EQ(device->stop_calls, 1);
|
||||
}
|
||||
|
||||
TEST_F(DeviceManagerLifecycleTest,
|
||||
EnforceSelectedCannotStartWithMissingConfiguredTarget)
|
||||
{
|
||||
cmvr::config::DeviceManagerConfig config;
|
||||
auto* safety = config.mutable_safety();
|
||||
safety->set_mode(
|
||||
cmvr::config::SafetyManagerConfig::ENFORCE_SELECTED);
|
||||
safety->add_enforced_device_ids("missing-arm");
|
||||
|
||||
auto& manager = cmvr::device::DeviceManager::getInstance(config);
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
EXPECT_FALSE(manager.start());
|
||||
EXPECT_EQ(
|
||||
manager.safetyManager().snapshot().system_state,
|
||||
cmvr::safety::SystemAdmissionState::Starting);
|
||||
}
|
||||
|
||||
TEST_F(DeviceManagerLifecycleTest,
|
||||
EnforceSelectedCannotSilentlyCoverNoDevices)
|
||||
{
|
||||
cmvr::config::DeviceManagerConfig config;
|
||||
config.mutable_safety()->set_mode(
|
||||
cmvr::config::SafetyManagerConfig::ENFORCE_SELECTED);
|
||||
|
||||
auto& manager = cmvr::device::DeviceManager::getInstance(config);
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
EXPECT_FALSE(manager.start());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@ -1,7 +1,6 @@
|
||||
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
project(cmvr_media_source_manager LANGUAGES CXX)
|
||||
enable_testing()
|
||||
add_subdirectory(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../service/grpc/stop_all
|
||||
${CMAKE_CURRENT_BINARY_DIR}/stop_all
|
||||
@ -43,55 +42,4 @@ if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
||||
)
|
||||
add_library(cmvr_es::device_media_source_adapter ALIAS device_media_source_adapter)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(device_media_source_adapter_test
|
||||
tests/device_media_source_adapter_test.cpp
|
||||
)
|
||||
target_compile_features(device_media_source_adapter_test PRIVATE cxx_std_17)
|
||||
target_link_libraries(device_media_source_adapter_test
|
||||
PRIVATE
|
||||
cmvr_es::device_media_source_adapter
|
||||
gtest
|
||||
gtest_main
|
||||
)
|
||||
add_test(
|
||||
NAME device_media_source_adapter_test
|
||||
COMMAND device_media_source_adapter_test
|
||||
)
|
||||
set(_device_media_source_adapter_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}")
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _device_media_source_adapter_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(device_media_source_adapter_test PROPERTIES
|
||||
ENVIRONMENT
|
||||
"${_device_media_source_adapter_test_environment}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
option(CMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS
|
||||
"Build the standalone MediaSourceManager self-test"
|
||||
${PROJECT_IS_TOP_LEVEL})
|
||||
|
||||
if(CMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS)
|
||||
find_package(Threads REQUIRED)
|
||||
add_executable(media_source_manager_test
|
||||
tests/media_source_manager_test.cpp
|
||||
)
|
||||
target_compile_features(media_source_manager_test PRIVATE cxx_std_17)
|
||||
target_link_libraries(media_source_manager_test
|
||||
PRIVATE
|
||||
cmvr_es::media_source_manager
|
||||
Threads::Threads
|
||||
)
|
||||
# This self-test only links the static Hub and pthreads. In the root build,
|
||||
# the project-wide third-party RUNPATH can otherwise make the loader pick up
|
||||
# a vendor libstdc++.so (for example from the AUBO SDK), even though the test
|
||||
# has no dependency on that SDK.
|
||||
set_target_properties(media_source_manager_test PROPERTIES
|
||||
SKIP_BUILD_RPATH TRUE
|
||||
)
|
||||
add_test(NAME media_source_manager_test COMMAND media_source_manager_test)
|
||||
endif()
|
||||
|
||||
@ -1,113 +0,0 @@
|
||||
#include "manager/media_source_manager/include/device_media_source_adapter.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "manager/safety_manager/include/device_safety_endpoint.h"
|
||||
|
||||
namespace cmvr::media {
|
||||
namespace {
|
||||
|
||||
class FakeSensorEndpoint final : public safety::DeviceSafetyEndpoint {
|
||||
public:
|
||||
explicit FakeSensorEndpoint(std::string device_id)
|
||||
{
|
||||
descriptor_.device_id = std::move(device_id);
|
||||
descriptor_.kind = device::DeviceKind::Camera;
|
||||
descriptor_.default_policy = safety::SafetyPolicyFamily::Sensor;
|
||||
descriptor_.maximum_snapshot_age = std::chrono::seconds(1);
|
||||
descriptor_.supports_active_refresh = true;
|
||||
}
|
||||
|
||||
safety::DeviceSafetyDescriptor descriptor() const override
|
||||
{
|
||||
return descriptor_;
|
||||
}
|
||||
|
||||
void bindPublisher(safety::SafetySnapshotPublisher publisher) override
|
||||
{
|
||||
publisher_ = std::move(publisher);
|
||||
}
|
||||
|
||||
void requestSafetyRefresh() noexcept override
|
||||
{
|
||||
if (!publisher_) {
|
||||
return;
|
||||
}
|
||||
safety::DeviceSafetySnapshot snapshot;
|
||||
snapshot.device_id = descriptor_.device_id;
|
||||
snapshot.condition = safety::SafetyCondition::Nominal;
|
||||
snapshot.device_generation = 1;
|
||||
snapshot.sample_sequence = ++sequence_;
|
||||
snapshot.observed_at = safety::SafetyClock::now();
|
||||
snapshot.connected = safety::TriState::True;
|
||||
snapshot.operational_ready = safety::TriState::True;
|
||||
snapshot.quiescent = safety::TriState::True;
|
||||
snapshot.motion_active = safety::TriState::False;
|
||||
snapshot.actuator_enabled = safety::TriState::False;
|
||||
snapshot.emergency_stop_active = safety::TriState::False;
|
||||
snapshot.protective_stop_active = safety::TriState::False;
|
||||
snapshot.fault_active = safety::TriState::False;
|
||||
(void)publisher_(std::move(snapshot));
|
||||
}
|
||||
|
||||
safety::HardwareCheckResult validateBeforeDispatch(
|
||||
const safety::AdmissionPermit& permit) override
|
||||
{
|
||||
++hardware_checks;
|
||||
last_intent = permit.intent;
|
||||
return {true, safety::SafetyReason::None, {}};
|
||||
}
|
||||
|
||||
safety::RecoveryCheckResult reconcileAdmissionState(
|
||||
const safety::RecoveryContext&) override
|
||||
{
|
||||
return {true, safety::SafetyReason::None, {}};
|
||||
}
|
||||
|
||||
std::atomic<int> hardware_checks{0};
|
||||
safety::CommandIntent last_intent{safety::CommandIntent::Observe};
|
||||
|
||||
private:
|
||||
safety::DeviceSafetyDescriptor descriptor_;
|
||||
safety::SafetySnapshotPublisher publisher_;
|
||||
std::atomic<std::uint64_t> sequence_{0};
|
||||
};
|
||||
|
||||
TEST(DeviceMediaSourceAdapterTest,
|
||||
SensorStartUsesFinalCheckAndQuarantineRejectsRestart)
|
||||
{
|
||||
safety::SafetyManagerConfig config;
|
||||
config.enforcement_mode = safety::EnforcementMode::EnforceAll;
|
||||
safety::SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeSensorEndpoint>("camera");
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{endpoint->descriptor(), endpoint, {}}));
|
||||
endpoint->requestSafetyRefresh();
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"camera",
|
||||
device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
{
|
||||
auto dispatch = beginMediaSourceStartDispatch(coordinator, "camera");
|
||||
ASSERT_TRUE(dispatch.acquired());
|
||||
EXPECT_EQ(endpoint->hardware_checks.load(), 1);
|
||||
EXPECT_EQ(endpoint->last_intent, safety::CommandIntent::StartActivity);
|
||||
}
|
||||
|
||||
coordinator.quarantineDevice(
|
||||
"camera", safety::SafetyReason::OutcomeUnknown,
|
||||
"uncertain-media-start");
|
||||
auto rejected = beginMediaSourceStartDispatch(coordinator, "camera");
|
||||
EXPECT_FALSE(rejected.acquired());
|
||||
EXPECT_EQ(endpoint->hardware_checks.load(), 1);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::media
|
||||
@ -16,50 +16,3 @@ target_link_libraries(safety_manager PUBLIC
|
||||
|
||||
add_library(cmvr_es::safety_manager ALIAS safety_manager)
|
||||
install(TARGETS safety_manager LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(safety_snapshot_store_test
|
||||
tests/safety_snapshot_store_test.cpp
|
||||
)
|
||||
target_link_libraries(safety_snapshot_store_test PRIVATE
|
||||
cmvr_es::safety_manager
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME safety_snapshot_store_test
|
||||
COMMAND safety_snapshot_store_test
|
||||
)
|
||||
set_tests_properties(safety_snapshot_store_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
add_executable(command_ledger_test
|
||||
tests/command_ledger_test.cpp
|
||||
)
|
||||
target_link_libraries(command_ledger_test PRIVATE
|
||||
cmvr_es::safety_manager
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME command_ledger_test
|
||||
COMMAND command_ledger_test
|
||||
)
|
||||
set_tests_properties(command_ledger_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
add_executable(safety_manager_test
|
||||
tests/safety_manager_test.cpp
|
||||
)
|
||||
target_link_libraries(safety_manager_test PRIVATE
|
||||
cmvr_es::safety_manager
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME safety_manager_test
|
||||
COMMAND safety_manager_test
|
||||
)
|
||||
set_tests_properties(safety_manager_test PROPERTIES TIMEOUT 15)
|
||||
endif()
|
||||
|
||||
@ -13,7 +13,6 @@
|
||||
#include "manager/safety_manager/include/command_ledger.h"
|
||||
#include "manager/safety_manager/include/device_safety_endpoint.h"
|
||||
#include "manager/safety_manager/include/safety_participant.h"
|
||||
#include "manager/safety_manager/include/safety_snapshot_store.h"
|
||||
|
||||
namespace cmvr::safety {
|
||||
|
||||
@ -174,7 +173,6 @@ public:
|
||||
SafetyManager& operator=(const SafetyManager&) = delete;
|
||||
|
||||
bool registerDevice(DeviceSafetyRegistration registration);
|
||||
bool unregisterDevice(const std::string& device_id);
|
||||
bool registerParticipant(std::shared_ptr<SafetyParticipant> participant);
|
||||
bool unregisterParticipant(const std::string& participant_id);
|
||||
|
||||
@ -182,15 +180,12 @@ public:
|
||||
const std::string& device_id,
|
||||
device::ManagedDeviceState lifecycle,
|
||||
device::DeviceHealthSnapshot health = {});
|
||||
bool publishSafetySnapshot(DeviceSafetySnapshot snapshot);
|
||||
std::optional<std::uint64_t> advanceDeviceGeneration(
|
||||
const std::string& device_id);
|
||||
StartupCoverageResult validateStartupCoverage(
|
||||
SafetyClock::time_point deadline);
|
||||
void markStartupComplete();
|
||||
void beginShutdown() noexcept;
|
||||
|
||||
AdmissionDecision evaluate(const AdmissionRequest& request) const;
|
||||
AdmissionResult admit(const AdmissionRequest& request);
|
||||
// Lightweight session check. This validates the coordinator-owned epoch,
|
||||
// generation, freshness, and admission state without calling the device
|
||||
@ -208,16 +203,16 @@ public:
|
||||
RecoveryResult recover(const RecoveryRequest& request);
|
||||
|
||||
SafetyManagerSnapshot snapshot() const;
|
||||
SafetySnapshotStore& snapshotStore() noexcept;
|
||||
const SafetySnapshotStore& snapshotStore() const noexcept;
|
||||
CommandLedger& commandLedger() noexcept;
|
||||
const CommandLedger& commandLedger() const noexcept;
|
||||
const std::string& serviceInstanceId() const noexcept;
|
||||
const SafetyManagerConfig& config() const noexcept;
|
||||
|
||||
private:
|
||||
friend class DispatchGuard;
|
||||
struct Impl;
|
||||
bool publishSafetySnapshot(DeviceSafetySnapshot snapshot);
|
||||
void beginShutdown() noexcept;
|
||||
AdmissionDecision evaluate(const AdmissionRequest& request) const;
|
||||
void endDispatch_(const std::string& device_id) noexcept;
|
||||
std::unique_ptr<Impl> impl_;
|
||||
};
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
#include "manager/safety_manager/include/safety_manager.h"
|
||||
#include "manager/safety_manager/include/safety_snapshot_store.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
@ -531,51 +532,6 @@ bool SafetyManager::registerDevice(DeviceSafetyRegistration registration)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SafetyManager::unregisterDevice(const std::string& device_id)
|
||||
{
|
||||
std::shared_ptr<DeviceSafetyEndpoint> endpoint;
|
||||
std::string participant_id;
|
||||
{
|
||||
std::lock_guard lock(impl_->mutex);
|
||||
const auto found = impl_->devices.find(device_id);
|
||||
if (found == impl_->devices.end()) {
|
||||
return false;
|
||||
}
|
||||
if (found->second.in_flight_dispatches != 0) {
|
||||
return false;
|
||||
}
|
||||
found->second.publisher_binding->active.store(
|
||||
false, std::memory_order_release);
|
||||
endpoint = found->second.endpoint;
|
||||
if (found->second.participant) {
|
||||
participant_id =
|
||||
found->second.participant->descriptor().participant_id;
|
||||
impl_->participants.erase(participant_id);
|
||||
const auto runtime =
|
||||
impl_->participant_runtime.find(participant_id);
|
||||
if (runtime != impl_->participant_runtime.end()) {
|
||||
runtime->second.registered = false;
|
||||
if (!runtime->second.barrier_active &&
|
||||
impl_->retained_barriers.count(participant_id) == 0U) {
|
||||
impl_->participant_runtime.erase(runtime);
|
||||
}
|
||||
}
|
||||
}
|
||||
found->second.admission_state = DeviceAdmissionState::Removed;
|
||||
impl_->devices.erase(found);
|
||||
impl_->addEventLocked(
|
||||
SafetyReason::DeviceUnavailable,
|
||||
device_id,
|
||||
{},
|
||||
"device safety capability unregistered");
|
||||
}
|
||||
if (endpoint) {
|
||||
endpoint->bindPublisher({});
|
||||
}
|
||||
impl_->snapshots.unregisterDevice(device_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SafetyManager::registerParticipant(
|
||||
std::shared_ptr<SafetyParticipant> participant)
|
||||
{
|
||||
@ -2529,26 +2485,11 @@ SafetyManagerSnapshot SafetyManager::snapshot() const
|
||||
return result;
|
||||
}
|
||||
|
||||
SafetySnapshotStore& SafetyManager::snapshotStore() noexcept
|
||||
{
|
||||
return impl_->snapshots;
|
||||
}
|
||||
|
||||
const SafetySnapshotStore& SafetyManager::snapshotStore() const noexcept
|
||||
{
|
||||
return impl_->snapshots;
|
||||
}
|
||||
|
||||
CommandLedger& SafetyManager::commandLedger() noexcept
|
||||
{
|
||||
return impl_->ledger;
|
||||
}
|
||||
|
||||
const CommandLedger& SafetyManager::commandLedger() const noexcept
|
||||
{
|
||||
return impl_->ledger;
|
||||
}
|
||||
|
||||
const std::string& SafetyManager::serviceInstanceId() const noexcept
|
||||
{
|
||||
return impl_->service_instance_id;
|
||||
|
||||
@ -1,122 +0,0 @@
|
||||
#include "manager/safety_manager/include/command_ledger.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace cmvr::safety {
|
||||
namespace {
|
||||
|
||||
CommandKey key(const std::string& id)
|
||||
{
|
||||
return {"anonymous", id};
|
||||
}
|
||||
|
||||
CommandOutcome completedOutcome()
|
||||
{
|
||||
CommandOutcome outcome;
|
||||
outcome.lifecycle = CommandLifecycle::Completed;
|
||||
outcome.reason = SafetyReason::None;
|
||||
outcome.serialized_response = "done";
|
||||
return outcome;
|
||||
}
|
||||
|
||||
TEST(CommandLedgerTest, SameIdJoinsAndDifferentPayloadConflicts)
|
||||
{
|
||||
CommandLedger ledger;
|
||||
const auto first = ledger.reserve(key("command-1"), "payload-a");
|
||||
ASSERT_EQ(first.status, CommandReservationStatus::AcceptedNew);
|
||||
EXPECT_EQ(
|
||||
ledger.reserve(key("command-1"), "payload-a").status,
|
||||
CommandReservationStatus::JoinedInFlight);
|
||||
EXPECT_EQ(
|
||||
ledger.reserve(key("command-1"), "payload-b").status,
|
||||
CommandReservationStatus::CommandIdConflict);
|
||||
|
||||
ASSERT_TRUE(ledger.complete(first.ticket, completedOutcome()));
|
||||
const auto cached = ledger.reserve(key("command-1"), "payload-a");
|
||||
ASSERT_EQ(cached.status, CommandReservationStatus::CachedResult);
|
||||
ASSERT_TRUE(cached.cached_outcome.has_value());
|
||||
EXPECT_EQ(cached.cached_outcome->serialized_response, "done");
|
||||
}
|
||||
|
||||
TEST(CommandLedgerTest, ConcurrentCallersNeverCreateASecondReservation)
|
||||
{
|
||||
CommandLedger ledger;
|
||||
std::atomic<int> accepted{0};
|
||||
std::vector<std::thread> workers;
|
||||
for (int index = 0; index < 16; ++index) {
|
||||
workers.emplace_back([&] {
|
||||
const auto result = ledger.reserve(key("shared"), "payload");
|
||||
if (result.status == CommandReservationStatus::AcceptedNew) {
|
||||
accepted.fetch_add(1);
|
||||
}
|
||||
});
|
||||
}
|
||||
for (auto& worker : workers) {
|
||||
worker.join();
|
||||
}
|
||||
EXPECT_EQ(accepted.load(), 1);
|
||||
EXPECT_EQ(ledger.acceptedIdCount(), 1U);
|
||||
}
|
||||
|
||||
TEST(CommandLedgerTest, OutcomeUnknownIsCachedAndNeverReservedAgain)
|
||||
{
|
||||
CommandLedger ledger;
|
||||
const auto first = ledger.reserve(key("uncertain"), "payload");
|
||||
ASSERT_EQ(first.status, CommandReservationStatus::AcceptedNew);
|
||||
|
||||
CommandOutcome outcome;
|
||||
outcome.lifecycle = CommandLifecycle::OutcomeUnknown;
|
||||
outcome.reason = SafetyReason::OutcomeUnknown;
|
||||
outcome.hardware_submission_possible = true;
|
||||
ASSERT_TRUE(ledger.complete(first.ticket, outcome));
|
||||
|
||||
const auto retry = ledger.reserve(key("uncertain"), "payload");
|
||||
ASSERT_EQ(retry.status, CommandReservationStatus::CachedResult);
|
||||
ASSERT_TRUE(retry.cached_outcome.has_value());
|
||||
EXPECT_EQ(
|
||||
retry.cached_outcome->lifecycle, CommandLifecycle::OutcomeUnknown);
|
||||
EXPECT_TRUE(retry.cached_outcome->hardware_submission_possible);
|
||||
}
|
||||
|
||||
TEST(CommandLedgerTest, EvictedResultLeavesAnExactTombstone)
|
||||
{
|
||||
CommandLedger ledger({1, 3});
|
||||
auto first = ledger.reserve(key("first"), "payload-1");
|
||||
ASSERT_TRUE(ledger.complete(first.ticket, completedOutcome()));
|
||||
auto second = ledger.reserve(key("second"), "payload-2");
|
||||
ASSERT_TRUE(ledger.complete(second.ticket, completedOutcome()));
|
||||
|
||||
EXPECT_EQ(
|
||||
ledger.reserve(key("first"), "payload-1").status,
|
||||
CommandReservationStatus::ResultEvicted);
|
||||
EXPECT_EQ(
|
||||
ledger.reserve(key("first"), "different").status,
|
||||
CommandReservationStatus::CommandIdConflict);
|
||||
|
||||
auto third = ledger.reserve(key("third"), "payload-3");
|
||||
ASSERT_EQ(third.status, CommandReservationStatus::AcceptedNew);
|
||||
EXPECT_EQ(
|
||||
ledger.reserve(key("fourth"), "payload-4").status,
|
||||
CommandReservationStatus::LedgerExhausted);
|
||||
}
|
||||
|
||||
TEST(CommandLedgerTest, WaitTimesOutWithoutChangingExecution)
|
||||
{
|
||||
CommandLedger ledger;
|
||||
const auto reservation = ledger.reserve(key("slow"), "payload");
|
||||
ASSERT_EQ(reservation.status, CommandReservationStatus::AcceptedNew);
|
||||
EXPECT_FALSE(ledger.wait(
|
||||
reservation.ticket,
|
||||
SafetyClock::now() + std::chrono::milliseconds(5)).has_value());
|
||||
EXPECT_EQ(
|
||||
ledger.reserve(key("slow"), "payload").status,
|
||||
CommandReservationStatus::JoinedInFlight);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::safety
|
||||
@ -1,782 +0,0 @@
|
||||
#include "manager/safety_manager/include/safety_manager.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace cmvr::safety {
|
||||
namespace {
|
||||
|
||||
DeviceSafetyDescriptor controlDescriptor(std::string device_id = "arm")
|
||||
{
|
||||
DeviceSafetyDescriptor descriptor;
|
||||
descriptor.device_id = std::move(device_id);
|
||||
descriptor.kind = device::DeviceKind::Arm;
|
||||
descriptor.default_policy = SafetyPolicyFamily::Control;
|
||||
descriptor.maximum_snapshot_age = std::chrono::seconds(1);
|
||||
descriptor.requires_safe_stop = true;
|
||||
descriptor.supports_active_refresh = true;
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
class FakeEndpoint final : public DeviceSafetyEndpoint {
|
||||
public:
|
||||
explicit FakeEndpoint(DeviceSafetyDescriptor descriptor)
|
||||
: descriptor_(std::move(descriptor))
|
||||
{
|
||||
}
|
||||
|
||||
DeviceSafetyDescriptor descriptor() const override
|
||||
{
|
||||
return descriptor_;
|
||||
}
|
||||
|
||||
void bindPublisher(SafetySnapshotPublisher publisher) override
|
||||
{
|
||||
publisher_ = std::move(publisher);
|
||||
}
|
||||
|
||||
void requestSafetyRefresh() noexcept override
|
||||
{
|
||||
if (!publisher_ || !publish_on_refresh) {
|
||||
return;
|
||||
}
|
||||
DeviceSafetySnapshot snapshot;
|
||||
snapshot.device_id = descriptor_.device_id;
|
||||
snapshot.condition = condition;
|
||||
snapshot.device_generation = generation;
|
||||
snapshot.sample_sequence = ++sequence;
|
||||
snapshot.observed_at = SafetyClock::now();
|
||||
snapshot.connected = connected;
|
||||
snapshot.operational_ready = ready;
|
||||
snapshot.quiescent = quiescent;
|
||||
snapshot.motion_active =
|
||||
quiescent == TriState::True ? TriState::False : TriState::Unknown;
|
||||
snapshot.emergency_stop_active = emergency_stop;
|
||||
snapshot.protective_stop_active = protective_stop;
|
||||
snapshot.fault_active = fault;
|
||||
(void)publisher_(std::move(snapshot));
|
||||
}
|
||||
|
||||
HardwareCheckResult validateBeforeDispatch(
|
||||
const AdmissionPermit&) override
|
||||
{
|
||||
++hardware_checks;
|
||||
return final_check;
|
||||
}
|
||||
|
||||
RecoveryCheckResult reconcileAdmissionState(
|
||||
const RecoveryContext&) override
|
||||
{
|
||||
++recoveries;
|
||||
return recovery_check;
|
||||
}
|
||||
|
||||
RecoveryCheckResult restoreOperationalState(
|
||||
const RecoveryContext&) override
|
||||
{
|
||||
++operational_restores;
|
||||
if (operational_restore_check.reconciled &&
|
||||
restore_to_nominal_on_success) {
|
||||
condition = SafetyCondition::Nominal;
|
||||
connected = TriState::True;
|
||||
ready = TriState::True;
|
||||
quiescent = TriState::True;
|
||||
emergency_stop = TriState::False;
|
||||
protective_stop = TriState::False;
|
||||
fault = TriState::False;
|
||||
}
|
||||
return operational_restore_check;
|
||||
}
|
||||
|
||||
DeviceSafetyDescriptor descriptor_;
|
||||
SafetySnapshotPublisher publisher_;
|
||||
SafetyCondition condition{SafetyCondition::Nominal};
|
||||
TriState connected{TriState::True};
|
||||
TriState ready{TriState::True};
|
||||
TriState quiescent{TriState::True};
|
||||
TriState emergency_stop{TriState::False};
|
||||
TriState protective_stop{TriState::False};
|
||||
TriState fault{TriState::False};
|
||||
HardwareCheckResult final_check{true, SafetyReason::None, {}};
|
||||
RecoveryCheckResult recovery_check{true, SafetyReason::None, {}};
|
||||
RecoveryCheckResult operational_restore_check{
|
||||
true, SafetyReason::None, {}};
|
||||
std::uint64_t generation{1};
|
||||
std::uint64_t sequence{0};
|
||||
bool publish_on_refresh{true};
|
||||
std::atomic<int> hardware_checks{0};
|
||||
std::atomic<int> recoveries{0};
|
||||
std::atomic<int> operational_restores{0};
|
||||
bool restore_to_nominal_on_success{true};
|
||||
};
|
||||
|
||||
class FakeParticipant final : public SafetyParticipant {
|
||||
public:
|
||||
ParticipantDescriptor descriptor() const override
|
||||
{
|
||||
return {"arm", ParticipantPhase::Actuator, true,
|
||||
std::chrono::milliseconds(100)};
|
||||
}
|
||||
|
||||
BarrierToken beginBarrier(
|
||||
const SafetyOperationContext& context) override
|
||||
{
|
||||
++barriers;
|
||||
return {"arm", context.operation_id, context.safety_epoch,
|
||||
static_cast<std::uint64_t>(barriers.load())};
|
||||
}
|
||||
|
||||
ParticipantResult requestQuiesce(
|
||||
const BarrierToken&,
|
||||
const SafetyOperationContext&) override
|
||||
{
|
||||
++stop_requests;
|
||||
return stop_result;
|
||||
}
|
||||
|
||||
ParticipantResult verifyQuiescent(
|
||||
const BarrierToken&,
|
||||
const SafetyOperationContext&) override
|
||||
{
|
||||
++verifications;
|
||||
return verify_result;
|
||||
}
|
||||
|
||||
RecoveryCheckResult recoverAdmission(
|
||||
const BarrierToken&,
|
||||
const RecoveryContext&) override
|
||||
{
|
||||
++recoveries;
|
||||
return recovery_result;
|
||||
}
|
||||
|
||||
ParticipantResult releaseBarrier(
|
||||
const BarrierToken&) noexcept override
|
||||
{
|
||||
++releases;
|
||||
return release_result;
|
||||
}
|
||||
|
||||
ParticipantResult stop_result{true, SafetyReason::None, {}};
|
||||
ParticipantResult verify_result{true, SafetyReason::None, {}};
|
||||
RecoveryCheckResult recovery_result{true, SafetyReason::None, {}};
|
||||
ParticipantResult release_result{true, SafetyReason::None, {}};
|
||||
std::atomic<int> barriers{0};
|
||||
std::atomic<int> stop_requests{0};
|
||||
std::atomic<int> verifications{0};
|
||||
std::atomic<int> recoveries{0};
|
||||
std::atomic<int> releases{0};
|
||||
};
|
||||
|
||||
AdmissionRequest actuateRequest()
|
||||
{
|
||||
AdmissionRequest request;
|
||||
request.command = {
|
||||
"/cmvr.api.ArmService/moveJ",
|
||||
CommandIntent::Actuate,
|
||||
SafetyPolicyFamily::Control,
|
||||
true,
|
||||
false};
|
||||
request.device_id = "arm";
|
||||
request.command_id = "command-1";
|
||||
request.deadline = SafetyClock::now() + std::chrono::seconds(1);
|
||||
return request;
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, ShadowReportsDenyWithoutChangingLegacyBehavior)
|
||||
{
|
||||
SafetyManager coordinator;
|
||||
ASSERT_TRUE(coordinator.registerDevice({controlDescriptor(), {}, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
const auto result = coordinator.admit(actuateRequest());
|
||||
EXPECT_TRUE(result.decision.allowed);
|
||||
EXPECT_FALSE(result.decision.policy_allowed);
|
||||
EXPECT_FALSE(result.decision.enforced);
|
||||
EXPECT_EQ(result.decision.reason, SafetyReason::SafetyStateMissing);
|
||||
EXPECT_TRUE(result.permit.has_value());
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest,
|
||||
EnforceSelectedStartupRejectsEmptyOrUnknownCoverage)
|
||||
{
|
||||
SafetyManagerConfig empty_config;
|
||||
empty_config.enforcement_mode = EnforcementMode::EnforceSelected;
|
||||
SafetyManager empty(empty_config);
|
||||
const auto empty_result = empty.validateStartupCoverage(
|
||||
SafetyClock::now() + std::chrono::milliseconds(10));
|
||||
ASSERT_FALSE(empty_result.ready);
|
||||
ASSERT_EQ(empty_result.issues.size(), 1U);
|
||||
EXPECT_EQ(empty_result.issues.front().reason, SafetyReason::InvalidArgument);
|
||||
|
||||
SafetyManagerConfig missing_config;
|
||||
missing_config.enforcement_mode = EnforcementMode::EnforceSelected;
|
||||
missing_config.enforced_device_ids.insert("missing-arm");
|
||||
SafetyManager missing(missing_config);
|
||||
const auto missing_result = missing.validateStartupCoverage(
|
||||
SafetyClock::now() + std::chrono::milliseconds(10));
|
||||
ASSERT_FALSE(missing_result.ready);
|
||||
ASSERT_EQ(missing_result.issues.size(), 1U);
|
||||
EXPECT_EQ(missing_result.issues.front().target_id, "missing-arm");
|
||||
EXPECT_EQ(missing_result.issues.front().reason, SafetyReason::DeviceNotFound);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest,
|
||||
EnforceAllStartupRequiresEndpointParticipantAndFreshSnapshot)
|
||||
{
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
|
||||
SafetyManager missing_capability(config);
|
||||
ASSERT_TRUE(missing_capability.registerDevice(
|
||||
{controlDescriptor(), {}, {}}));
|
||||
const auto structural = missing_capability.validateStartupCoverage(
|
||||
SafetyClock::now() + std::chrono::milliseconds(10));
|
||||
EXPECT_FALSE(structural.ready);
|
||||
EXPECT_EQ(structural.issues.size(), 2U);
|
||||
|
||||
SafetyManager missing_sample(config);
|
||||
auto silent_endpoint =
|
||||
std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
silent_endpoint->publish_on_refresh = false;
|
||||
ASSERT_TRUE(missing_sample.registerDevice({
|
||||
controlDescriptor(),
|
||||
silent_endpoint,
|
||||
std::make_shared<FakeParticipant>()}));
|
||||
const auto stale = missing_sample.validateStartupCoverage(
|
||||
SafetyClock::now() + std::chrono::milliseconds(10));
|
||||
ASSERT_FALSE(stale.ready);
|
||||
ASSERT_EQ(stale.issues.size(), 1U);
|
||||
EXPECT_EQ(stale.issues.front().reason, SafetyReason::SafetyStateMissing);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest,
|
||||
HardwareUnsafeSnapshotBlocksAdmissionButNotStructuralStartup)
|
||||
{
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
endpoint->condition = SafetyCondition::Unsafe;
|
||||
endpoint->emergency_stop = TriState::True;
|
||||
ASSERT_TRUE(coordinator.registerDevice({
|
||||
controlDescriptor(), endpoint, std::make_shared<FakeParticipant>()}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm", device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
|
||||
const auto coverage = coordinator.validateStartupCoverage(
|
||||
SafetyClock::now() + std::chrono::milliseconds(50));
|
||||
EXPECT_TRUE(coverage.ready);
|
||||
coordinator.markStartupComplete();
|
||||
const auto admission = coordinator.admit(actuateRequest());
|
||||
EXPECT_FALSE(admission.decision.allowed);
|
||||
EXPECT_EQ(
|
||||
admission.decision.reason, SafetyReason::EmergencyStopActive);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, EnforceAllFailsClosedOnUnknownControlState)
|
||||
{
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyManager coordinator(config);
|
||||
ASSERT_TRUE(coordinator.registerDevice({controlDescriptor(), {}, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
const auto result = coordinator.admit(actuateRequest());
|
||||
EXPECT_FALSE(result.decision.allowed);
|
||||
EXPECT_FALSE(result.decision.policy_allowed);
|
||||
EXPECT_TRUE(result.decision.enforced);
|
||||
EXPECT_FALSE(result.permit.has_value());
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, ControlSafetyBitsMustBeExplicitlyFalse)
|
||||
{
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
endpoint->protective_stop = TriState::Unknown;
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, {}}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm", device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
const auto result = coordinator.admit(actuateRequest());
|
||||
EXPECT_FALSE(result.decision.allowed);
|
||||
EXPECT_EQ(result.decision.reason, SafetyReason::ProtectiveStopActive);
|
||||
ASSERT_EQ(coordinator.snapshot().devices.size(), 1U);
|
||||
EXPECT_EQ(
|
||||
coordinator.snapshot().devices.front().admission_state,
|
||||
DeviceAdmissionState::Blocked);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, EnforcedDispatchRunsFinalHardwareCheck)
|
||||
{
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, {}}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm", device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
auto admission = coordinator.admit(actuateRequest());
|
||||
ASSERT_TRUE(admission.decision.allowed) << admission.decision.detail;
|
||||
ASSERT_TRUE(admission.permit.has_value());
|
||||
auto dispatch = coordinator.beginDispatch(*admission.permit);
|
||||
EXPECT_TRUE(dispatch.acquired());
|
||||
EXPECT_EQ(endpoint->hardware_checks.load(), 1);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest,
|
||||
StartActivityMayEnterFromRestrictedButActuationMayNot)
|
||||
{
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
endpoint->condition = SafetyCondition::Restricted;
|
||||
endpoint->ready = TriState::False;
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, {}}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm", device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
auto start = actuateRequest();
|
||||
start.command.intent = CommandIntent::StartActivity;
|
||||
const auto start_result = coordinator.admit(start);
|
||||
ASSERT_TRUE(start_result.decision.allowed)
|
||||
<< start_result.decision.detail;
|
||||
ASSERT_TRUE(start_result.permit.has_value());
|
||||
EXPECT_TRUE(coordinator.beginDispatch(*start_result.permit).acquired());
|
||||
|
||||
const auto actuation = coordinator.admit(actuateRequest());
|
||||
EXPECT_FALSE(actuation.decision.allowed);
|
||||
EXPECT_EQ(actuation.decision.reason, SafetyReason::HardwareUnsafe);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, SuccessfulStopInvalidatesOldPermitAndReopens)
|
||||
{
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
auto participant = std::make_shared<FakeParticipant>();
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, participant}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm", device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
auto admission = coordinator.admit(actuateRequest());
|
||||
ASSERT_TRUE(admission.permit.has_value());
|
||||
const auto old_epoch = admission.permit->safety_epoch;
|
||||
const auto stopped = coordinator.stopAll(
|
||||
"stop-1", SafetyClock::now() + std::chrono::seconds(1));
|
||||
ASSERT_TRUE(stopped.success);
|
||||
EXPECT_EQ(stopped.system_state, SystemAdmissionState::Open);
|
||||
EXPECT_GT(stopped.current_safety_epoch, old_epoch);
|
||||
const auto revalidated =
|
||||
coordinator.revalidatePermit(*admission.permit);
|
||||
EXPECT_FALSE(revalidated.safe);
|
||||
EXPECT_EQ(revalidated.reason, SafetyReason::SafetyLatched);
|
||||
EXPECT_FALSE(coordinator.beginDispatch(*admission.permit).acquired());
|
||||
EXPECT_EQ(participant->stop_requests.load(), 1);
|
||||
EXPECT_EQ(participant->verifications.load(), 1);
|
||||
const auto snapshot = coordinator.snapshot();
|
||||
ASSERT_EQ(snapshot.participants.size(), 1U);
|
||||
EXPECT_EQ(snapshot.participants.front().descriptor.participant_id, "arm");
|
||||
EXPECT_FALSE(snapshot.participants.front().barrier_active);
|
||||
EXPECT_FALSE(snapshot.participants.front().barrier_retained);
|
||||
EXPECT_TRUE(snapshot.participants.front().last_request.recorded);
|
||||
EXPECT_TRUE(snapshot.participants.front().last_request.success);
|
||||
EXPECT_TRUE(snapshot.participants.front().last_verify.recorded);
|
||||
EXPECT_TRUE(snapshot.participants.front().last_verify.success);
|
||||
EXPECT_TRUE(snapshot.participants.front().last_release.recorded);
|
||||
EXPECT_TRUE(snapshot.participants.front().last_release.success);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, FailedStopRequiresVerifiedRecovery)
|
||||
{
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
auto participant = std::make_shared<FakeParticipant>();
|
||||
participant->verify_result = {
|
||||
false, SafetyReason::StopUnconfirmed, "motion not confirmed"};
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, participant}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm", device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
const auto stopped = coordinator.stopAll(
|
||||
"stop-failed", SafetyClock::now() + std::chrono::seconds(1));
|
||||
ASSERT_FALSE(stopped.success);
|
||||
ASSERT_EQ(stopped.system_state, SystemAdmissionState::Latched);
|
||||
const auto latched = coordinator.snapshot();
|
||||
ASSERT_EQ(latched.participants.size(), 1U);
|
||||
EXPECT_TRUE(latched.participants.front().barrier_active);
|
||||
EXPECT_TRUE(latched.participants.front().barrier_retained);
|
||||
EXPECT_TRUE(latched.participants.front().last_verify.recorded);
|
||||
EXPECT_FALSE(latched.participants.front().last_verify.success);
|
||||
EXPECT_FALSE(latched.participants.front().last_release.recorded);
|
||||
|
||||
participant->verify_result = {true, SafetyReason::None, {}};
|
||||
RecoveryRequest request;
|
||||
request.recovery_id = "recovery-1";
|
||||
request.all_devices = true;
|
||||
request.expected_safety_epoch = stopped.current_safety_epoch;
|
||||
request.verify_only = false;
|
||||
request.reason = "operator confirmed work cell is clear";
|
||||
request.deadline = SafetyClock::now() + std::chrono::seconds(1);
|
||||
const auto recovered = coordinator.recover(request);
|
||||
EXPECT_EQ(recovered.result, RecoveryResultCode::Recovered);
|
||||
EXPECT_EQ(recovered.system_state, SystemAdmissionState::Open);
|
||||
EXPECT_EQ(endpoint->recoveries.load(), 1);
|
||||
EXPECT_EQ(participant->recoveries.load(), 1);
|
||||
const auto reopened = coordinator.snapshot();
|
||||
ASSERT_EQ(reopened.participants.size(), 1U);
|
||||
EXPECT_FALSE(reopened.participants.front().barrier_active);
|
||||
EXPECT_FALSE(reopened.participants.front().barrier_retained);
|
||||
EXPECT_TRUE(reopened.participants.front().last_release.recorded);
|
||||
EXPECT_TRUE(reopened.participants.front().last_release.success);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, RecoveryCannotIgnoreEmergencyStop)
|
||||
{
|
||||
SafetyManager coordinator;
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
auto participant = std::make_shared<FakeParticipant>();
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, participant}));
|
||||
coordinator.markStartupComplete();
|
||||
coordinator.quarantineDevice("arm", SafetyReason::OutcomeUnknown);
|
||||
const auto before = coordinator.snapshot();
|
||||
|
||||
endpoint->emergency_stop = TriState::True;
|
||||
RecoveryRequest request;
|
||||
request.recovery_id = "recovery-estop";
|
||||
request.all_devices = true;
|
||||
request.expected_safety_epoch = before.safety_epoch;
|
||||
request.verify_only = false;
|
||||
request.reason = "test";
|
||||
request.deadline = SafetyClock::now() + std::chrono::seconds(1);
|
||||
const auto recovered = coordinator.recover(request);
|
||||
EXPECT_EQ(recovered.result, RecoveryResultCode::BlockerRemains);
|
||||
EXPECT_EQ(recovered.system_state, SystemAdmissionState::Latched);
|
||||
ASSERT_FALSE(recovered.targets.empty());
|
||||
EXPECT_EQ(
|
||||
recovered.targets.front().reason,
|
||||
SafetyReason::EmergencyStopActive);
|
||||
EXPECT_EQ(endpoint->recoveries.load(), 0);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest,
|
||||
OperationalRestoreClearsRecoverableHardwareAndSoftwareState)
|
||||
{
|
||||
SafetyManager coordinator;
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
endpoint->condition = SafetyCondition::Unsafe;
|
||||
endpoint->ready = TriState::False;
|
||||
endpoint->protective_stop = TriState::True;
|
||||
endpoint->quiescent = TriState::True;
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
coordinator.quarantineDevice("arm", SafetyReason::OutcomeUnknown);
|
||||
const auto before = coordinator.snapshot();
|
||||
|
||||
RecoveryRequest request;
|
||||
request.recovery_id = "restore-operational";
|
||||
request.all_devices = true;
|
||||
request.expected_safety_epoch = before.safety_epoch;
|
||||
request.verify_only = false;
|
||||
request.restore_operational_state = true;
|
||||
request.reason = "operator confirmed the work cell is clear";
|
||||
request.deadline = SafetyClock::now() + std::chrono::seconds(1);
|
||||
request.authorize_clear = [] { return true; };
|
||||
|
||||
const auto restored = coordinator.recover(request);
|
||||
|
||||
EXPECT_EQ(restored.result, RecoveryResultCode::Recovered);
|
||||
EXPECT_EQ(restored.system_state, SystemAdmissionState::Open);
|
||||
ASSERT_EQ(restored.targets.size(), 1U);
|
||||
EXPECT_TRUE(restored.targets.front().success)
|
||||
<< restored.targets.front().detail;
|
||||
EXPECT_EQ(endpoint->operational_restores.load(), 1);
|
||||
EXPECT_EQ(endpoint->recoveries.load(), 1);
|
||||
EXPECT_EQ(
|
||||
coordinator.snapshot().devices.front().admission_state,
|
||||
DeviceAdmissionState::Open);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, OperationalRestoreFailsClosedOnActiveEmergencyStop)
|
||||
{
|
||||
SafetyManager coordinator;
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
endpoint->condition = SafetyCondition::Unsafe;
|
||||
endpoint->ready = TriState::False;
|
||||
endpoint->emergency_stop = TriState::True;
|
||||
endpoint->quiescent = TriState::True;
|
||||
endpoint->operational_restore_check = {
|
||||
false,
|
||||
SafetyReason::EmergencyStopActive,
|
||||
"hardware emergency-stop input is still active"};
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
coordinator.quarantineDevice("arm", SafetyReason::OutcomeUnknown);
|
||||
const auto before = coordinator.snapshot();
|
||||
|
||||
RecoveryRequest request;
|
||||
request.recovery_id = "restore-active-estop";
|
||||
request.all_devices = true;
|
||||
request.expected_safety_epoch = before.safety_epoch;
|
||||
request.verify_only = false;
|
||||
request.restore_operational_state = true;
|
||||
request.reason = "operator requested recovery";
|
||||
request.deadline = SafetyClock::now() + std::chrono::seconds(1);
|
||||
request.authorize_clear = [] { return true; };
|
||||
|
||||
const auto restored = coordinator.recover(request);
|
||||
|
||||
EXPECT_EQ(restored.result, RecoveryResultCode::BlockerRemains);
|
||||
EXPECT_EQ(restored.system_state, SystemAdmissionState::Latched);
|
||||
ASSERT_EQ(restored.targets.size(), 1U);
|
||||
EXPECT_FALSE(restored.targets.front().success);
|
||||
EXPECT_EQ(
|
||||
restored.targets.front().reason,
|
||||
SafetyReason::EmergencyStopActive);
|
||||
EXPECT_EQ(endpoint->operational_restores.load(), 0);
|
||||
EXPECT_EQ(endpoint->recoveries.load(), 0);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, OperationalRestoreDoesNotRecoverAnActiveDevice)
|
||||
{
|
||||
SafetyManager coordinator;
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
endpoint->condition = SafetyCondition::Unsafe;
|
||||
endpoint->ready = TriState::False;
|
||||
endpoint->quiescent = TriState::False;
|
||||
endpoint->fault = TriState::True;
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
coordinator.quarantineDevice("arm", SafetyReason::OutcomeUnknown);
|
||||
|
||||
RecoveryRequest request;
|
||||
request.recovery_id = "restore-active-device";
|
||||
request.all_devices = true;
|
||||
request.expected_safety_epoch = coordinator.snapshot().safety_epoch;
|
||||
request.verify_only = false;
|
||||
request.restore_operational_state = true;
|
||||
request.reason = "operator requested recovery";
|
||||
request.deadline = SafetyClock::now() + std::chrono::seconds(1);
|
||||
request.authorize_clear = [] { return true; };
|
||||
|
||||
const auto restored = coordinator.recover(request);
|
||||
|
||||
EXPECT_EQ(restored.result, RecoveryResultCode::BlockerRemains);
|
||||
ASSERT_EQ(restored.targets.size(), 1U);
|
||||
EXPECT_EQ(
|
||||
restored.targets.front().reason,
|
||||
SafetyReason::DeviceStillMoving);
|
||||
EXPECT_EQ(endpoint->operational_restores.load(), 0);
|
||||
EXPECT_EQ(endpoint->recoveries.load(), 0);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, OperationalRestoreAuditFailurePreventsDeviceRecovery)
|
||||
{
|
||||
SafetyManager coordinator;
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
endpoint->condition = SafetyCondition::Unsafe;
|
||||
endpoint->ready = TriState::False;
|
||||
endpoint->protective_stop = TriState::True;
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
coordinator.quarantineDevice("arm", SafetyReason::OutcomeUnknown);
|
||||
|
||||
RecoveryRequest request;
|
||||
request.recovery_id = "restore-audit-failure";
|
||||
request.all_devices = true;
|
||||
request.expected_safety_epoch = coordinator.snapshot().safety_epoch;
|
||||
request.verify_only = false;
|
||||
request.restore_operational_state = true;
|
||||
request.reason = "operator requested recovery";
|
||||
request.deadline = SafetyClock::now() + std::chrono::seconds(1);
|
||||
request.authorize_clear = [] { return false; };
|
||||
|
||||
const auto restored = coordinator.recover(request);
|
||||
|
||||
EXPECT_EQ(restored.result, RecoveryResultCode::BlockerRemains);
|
||||
ASSERT_EQ(restored.targets.size(), 1U);
|
||||
EXPECT_EQ(
|
||||
restored.targets.front().reason,
|
||||
SafetyReason::RecoveryAuditFailed);
|
||||
EXPECT_EQ(endpoint->operational_restores.load(), 0);
|
||||
EXPECT_EQ(endpoint->recoveries.load(), 0);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, OperationalRestoreRequiresExplicitAuthorization)
|
||||
{
|
||||
SafetyManager coordinator;
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
RecoveryRequest request;
|
||||
request.recovery_id = "restore-without-authorization";
|
||||
request.all_devices = true;
|
||||
request.expected_safety_epoch = coordinator.snapshot().safety_epoch;
|
||||
request.verify_only = false;
|
||||
request.restore_operational_state = true;
|
||||
request.reason = "operator requested recovery";
|
||||
|
||||
const auto restored = coordinator.recover(request);
|
||||
|
||||
EXPECT_EQ(restored.result, RecoveryResultCode::Failed);
|
||||
ASSERT_EQ(restored.targets.size(), 1U);
|
||||
EXPECT_EQ(
|
||||
restored.targets.front().reason,
|
||||
SafetyReason::InvalidArgument);
|
||||
EXPECT_EQ(endpoint->operational_restores.load(), 0);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest,
|
||||
OperationalRestoreAuditFailureWithNoDevicesRemainsLatched)
|
||||
{
|
||||
SafetyManager coordinator;
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
RecoveryRequest request;
|
||||
request.recovery_id = "empty-restore-audit-failure";
|
||||
request.all_devices = true;
|
||||
request.expected_safety_epoch = coordinator.snapshot().safety_epoch;
|
||||
request.verify_only = false;
|
||||
request.restore_operational_state = true;
|
||||
request.reason = "operator requested recovery";
|
||||
request.deadline = SafetyClock::now() + std::chrono::seconds(1);
|
||||
request.authorize_clear = [] { return false; };
|
||||
|
||||
const auto restored = coordinator.recover(request);
|
||||
|
||||
EXPECT_EQ(restored.result, RecoveryResultCode::BlockerRemains);
|
||||
EXPECT_EQ(restored.system_state, SystemAdmissionState::Latched);
|
||||
ASSERT_EQ(restored.targets.size(), 1U);
|
||||
EXPECT_EQ(restored.targets.front().target_id, "system");
|
||||
EXPECT_EQ(
|
||||
restored.targets.front().reason,
|
||||
SafetyReason::RecoveryAuditFailed);
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest,
|
||||
OperationalRestoreDoesNotPartiallyReleaseSoftwareAdmission)
|
||||
{
|
||||
SafetyManager coordinator;
|
||||
auto first = std::make_shared<FakeEndpoint>(
|
||||
controlDescriptor("arm-first"));
|
||||
first->condition = SafetyCondition::Unsafe;
|
||||
first->ready = TriState::False;
|
||||
first->protective_stop = TriState::True;
|
||||
auto second = std::make_shared<FakeEndpoint>(
|
||||
controlDescriptor("arm-second"));
|
||||
second->condition = SafetyCondition::Unsafe;
|
||||
second->ready = TriState::False;
|
||||
second->fault = TriState::True;
|
||||
second->operational_restore_check = {
|
||||
false, SafetyReason::DeviceFault, "fault reset failed"};
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor("arm-first"), first, {}}));
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor("arm-second"), second, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
coordinator.quarantineDevice(
|
||||
"arm-first", SafetyReason::OutcomeUnknown);
|
||||
coordinator.quarantineDevice(
|
||||
"arm-second", SafetyReason::OutcomeUnknown);
|
||||
|
||||
RecoveryRequest request;
|
||||
request.recovery_id = "restore-partial-failure";
|
||||
request.all_devices = true;
|
||||
request.expected_safety_epoch = coordinator.snapshot().safety_epoch;
|
||||
request.verify_only = false;
|
||||
request.restore_operational_state = true;
|
||||
request.reason = "operator requested recovery";
|
||||
request.deadline = SafetyClock::now() + std::chrono::seconds(1);
|
||||
request.authorize_clear = [] { return true; };
|
||||
|
||||
const auto restored = coordinator.recover(request);
|
||||
|
||||
EXPECT_EQ(restored.result, RecoveryResultCode::BlockerRemains);
|
||||
EXPECT_EQ(restored.system_state, SystemAdmissionState::Latched);
|
||||
EXPECT_EQ(first->operational_restores.load(), 1);
|
||||
EXPECT_EQ(second->operational_restores.load(), 1);
|
||||
EXPECT_EQ(first->recoveries.load(), 0);
|
||||
EXPECT_EQ(second->recoveries.load(), 0);
|
||||
const auto snapshot = coordinator.snapshot();
|
||||
ASSERT_EQ(snapshot.devices.size(), 2U);
|
||||
for (const auto& device : snapshot.devices) {
|
||||
EXPECT_EQ(
|
||||
device.admission_state,
|
||||
DeviceAdmissionState::Quarantined)
|
||||
<< device.descriptor.device_id;
|
||||
}
|
||||
}
|
||||
|
||||
TEST(SafetyManagerTest, RecoveryAuditFailureCannotReleaseLatch)
|
||||
{
|
||||
SafetyManager coordinator;
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
auto participant = std::make_shared<FakeParticipant>();
|
||||
participant->verify_result = {
|
||||
false, SafetyReason::StopUnconfirmed, "motion not confirmed"};
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, participant}));
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
const auto stopped = coordinator.stopAll(
|
||||
"stop-audit", SafetyClock::now() + std::chrono::seconds(1));
|
||||
ASSERT_FALSE(stopped.success);
|
||||
participant->verify_result = {true, SafetyReason::None, {}};
|
||||
|
||||
RecoveryRequest request;
|
||||
request.recovery_id = "recovery-audit";
|
||||
request.all_devices = true;
|
||||
request.expected_safety_epoch = stopped.current_safety_epoch;
|
||||
request.verify_only = false;
|
||||
request.reason = "operator inspected the work cell";
|
||||
request.deadline = SafetyClock::now() + std::chrono::seconds(1);
|
||||
request.authorize_clear = [] { return false; };
|
||||
const auto recovered = coordinator.recover(request);
|
||||
|
||||
EXPECT_EQ(recovered.result, RecoveryResultCode::BlockerRemains);
|
||||
EXPECT_EQ(recovered.system_state, SystemAdmissionState::Latched);
|
||||
ASSERT_FALSE(recovered.targets.empty());
|
||||
EXPECT_EQ(
|
||||
recovered.targets.front().reason,
|
||||
SafetyReason::RecoveryAuditFailed);
|
||||
EXPECT_EQ(endpoint->recoveries.load(), 0);
|
||||
EXPECT_EQ(participant->recoveries.load(), 0);
|
||||
EXPECT_EQ(participant->releases.load(), 0);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::safety
|
||||
@ -1,111 +0,0 @@
|
||||
#include "manager/safety_manager/include/safety_snapshot_store.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace cmvr::safety {
|
||||
namespace {
|
||||
|
||||
DeviceSafetyDescriptor descriptor()
|
||||
{
|
||||
DeviceSafetyDescriptor result;
|
||||
result.device_id = "arm";
|
||||
result.kind = device::DeviceKind::Arm;
|
||||
result.default_policy = SafetyPolicyFamily::Control;
|
||||
result.maximum_snapshot_age = std::chrono::milliseconds(50);
|
||||
result.requires_safe_stop = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
DeviceSafetySnapshot sample(
|
||||
const std::uint64_t generation,
|
||||
const std::uint64_t sequence,
|
||||
const SafetyClock::time_point observed_at = SafetyClock::now())
|
||||
{
|
||||
DeviceSafetySnapshot result;
|
||||
result.device_id = "arm";
|
||||
result.condition = SafetyCondition::Nominal;
|
||||
result.device_generation = generation;
|
||||
result.sample_sequence = sequence;
|
||||
result.observed_at = observed_at;
|
||||
result.connected = TriState::True;
|
||||
result.operational_ready = TriState::True;
|
||||
result.quiescent = TriState::True;
|
||||
result.motion_active = TriState::False;
|
||||
result.emergency_stop_active = TriState::False;
|
||||
result.protective_stop_active = TriState::False;
|
||||
result.fault_active = TriState::False;
|
||||
return result;
|
||||
}
|
||||
|
||||
TEST(SafetySnapshotStoreTest, RejectsOldGenerationAndSequence)
|
||||
{
|
||||
SafetySnapshotStore store;
|
||||
ASSERT_TRUE(store.registerDevice(descriptor(), 3));
|
||||
EXPECT_FALSE(store.publish(sample(2, 1)));
|
||||
ASSERT_TRUE(store.publish(sample(3, 2)));
|
||||
EXPECT_FALSE(store.publish(sample(3, 2)));
|
||||
EXPECT_FALSE(store.publish(sample(3, 1)));
|
||||
EXPECT_TRUE(store.publish(sample(4, 1)));
|
||||
|
||||
const auto view = store.get("arm");
|
||||
ASSERT_TRUE(view.registered);
|
||||
EXPECT_EQ(view.snapshot.device_generation, 4U);
|
||||
EXPECT_EQ(view.snapshot.sample_sequence, 1U);
|
||||
}
|
||||
|
||||
TEST(SafetySnapshotStoreTest, FreshnessUsesMonotonicObservationTime)
|
||||
{
|
||||
SafetySnapshotStore store;
|
||||
ASSERT_TRUE(store.registerDevice(descriptor()));
|
||||
const auto observed = SafetyClock::now();
|
||||
ASSERT_TRUE(store.publish(sample(1, 1, observed)));
|
||||
|
||||
EXPECT_TRUE(store.get(
|
||||
"arm", observed + std::chrono::milliseconds(49)).fresh);
|
||||
const auto stale = store.get(
|
||||
"arm", observed + std::chrono::milliseconds(51));
|
||||
EXPECT_FALSE(stale.fresh);
|
||||
EXPECT_EQ(stale.sample_age, std::chrono::milliseconds(51));
|
||||
}
|
||||
|
||||
TEST(SafetySnapshotStoreTest, BumpGenerationRequiresANewSample)
|
||||
{
|
||||
SafetySnapshotStore store;
|
||||
ASSERT_TRUE(store.registerDevice(descriptor()));
|
||||
ASSERT_TRUE(store.publish(sample(1, 8)));
|
||||
ASSERT_EQ(store.bumpGeneration("arm"), 2U);
|
||||
|
||||
const auto view = store.get("arm");
|
||||
EXPECT_FALSE(view.has_sample);
|
||||
EXPECT_FALSE(view.fresh);
|
||||
EXPECT_EQ(view.snapshot.device_generation, 2U);
|
||||
EXPECT_FALSE(store.publish(sample(1, 9)));
|
||||
EXPECT_TRUE(store.publish(sample(2, 1)));
|
||||
}
|
||||
|
||||
TEST(SafetySnapshotStoreTest, WaiterObservesOnlyANewerSample)
|
||||
{
|
||||
SafetySnapshotStore store;
|
||||
ASSERT_TRUE(store.registerDevice(descriptor()));
|
||||
ASSERT_TRUE(store.publish(sample(1, 1)));
|
||||
|
||||
std::atomic<bool> published{false};
|
||||
std::thread writer([&] {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
||||
published.store(store.publish(sample(1, 2)));
|
||||
});
|
||||
|
||||
SafetySnapshotView view;
|
||||
EXPECT_TRUE(store.waitForNewerSample(
|
||||
"arm", 1, SafetyClock::now() + std::chrono::seconds(1), view));
|
||||
writer.join();
|
||||
EXPECT_TRUE(published.load());
|
||||
EXPECT_EQ(view.snapshot.sample_sequence, 2U);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::safety
|
||||
@ -16,30 +16,3 @@ target_link_libraries(task_manager
|
||||
|
||||
add_library(cmvr_es::task_manager ALIAS task_manager)
|
||||
install(TARGETS task_manager LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(task_manager_lifecycle_test
|
||||
tests/task_manager_lifecycle_test.cpp
|
||||
)
|
||||
target_link_libraries(task_manager_lifecycle_test PRIVATE
|
||||
cmvr_es::task_manager
|
||||
cmvr_es::stop_all_admission_gate
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME task_manager_lifecycle_test
|
||||
COMMAND task_manager_lifecycle_test
|
||||
)
|
||||
set(_task_manager_lifecycle_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}")
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _task_manager_lifecycle_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(task_manager_lifecycle_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_task_manager_lifecycle_test_environment}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -1,428 +0,0 @@
|
||||
#include "manager/task_manager/include/task_manager.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <condition_variable>
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "task/task_factory.h"
|
||||
|
||||
namespace {
|
||||
|
||||
struct TaskBehavior {
|
||||
bool init_result{true};
|
||||
bool start_result{true};
|
||||
bool throw_on_start{false};
|
||||
bool stop_activity_result{true};
|
||||
bool block_start{false};
|
||||
bool query_snapshot_on_stop{false};
|
||||
};
|
||||
|
||||
TaskBehavior task_behavior;
|
||||
std::vector<std::string> stop_order;
|
||||
|
||||
class LifecycleTask final : public cmvr::task::Task {
|
||||
public:
|
||||
explicit LifecycleTask(
|
||||
std::string id,
|
||||
const cmvr::task::TaskShutdownPhase shutdown_phase =
|
||||
cmvr::task::TaskShutdownPhase::DEPENDENT_ACTIVITY)
|
||||
: id_(std::move(id)),
|
||||
shutdown_phase_(shutdown_phase)
|
||||
{
|
||||
}
|
||||
|
||||
const std::string& id() const override { return id_; }
|
||||
cmvr::task::TaskRunMode runMode() const override
|
||||
{
|
||||
return cmvr::task::TaskRunMode::BLOCKING_SERVICE;
|
||||
}
|
||||
cmvr::task::TaskShutdownPhase shutdownPhase() const override
|
||||
{
|
||||
return shutdown_phase_;
|
||||
}
|
||||
|
||||
bool init() override
|
||||
{
|
||||
++init_calls;
|
||||
state_ = task_behavior.init_result
|
||||
? cmvr::task::TaskState::IDLE
|
||||
: cmvr::task::TaskState::FAILED;
|
||||
return task_behavior.init_result;
|
||||
}
|
||||
|
||||
bool start() override
|
||||
{
|
||||
++start_calls;
|
||||
{
|
||||
std::unique_lock lock(start_mutex);
|
||||
start_entered = true;
|
||||
start_condition.notify_all();
|
||||
start_condition.wait(lock, [] {
|
||||
return !task_behavior.block_start;
|
||||
});
|
||||
}
|
||||
if (task_behavior.throw_on_start) {
|
||||
throw std::runtime_error("start failure");
|
||||
}
|
||||
state_ = task_behavior.start_result
|
||||
? cmvr::task::TaskState::RUNNING
|
||||
: cmvr::task::TaskState::FAILED;
|
||||
return task_behavior.start_result;
|
||||
}
|
||||
|
||||
bool step(double) override { return true; }
|
||||
|
||||
void stop() override
|
||||
{
|
||||
++stop_calls;
|
||||
if (task_behavior.query_snapshot_on_stop) {
|
||||
(void)cmvr::task::TaskManager::activitySnapshotIfInitialized();
|
||||
}
|
||||
stop_order.push_back(id_);
|
||||
state_ = cmvr::task::TaskState::STOPPED;
|
||||
}
|
||||
|
||||
bool stopActivity() override
|
||||
{
|
||||
++stop_activity_calls;
|
||||
return task_behavior.stop_activity_result;
|
||||
}
|
||||
|
||||
cmvr::task::TaskState state() const override { return state_; }
|
||||
bool isBusy() const override
|
||||
{
|
||||
return state_ == cmvr::task::TaskState::RUNNING;
|
||||
}
|
||||
bool isFinished() const override
|
||||
{
|
||||
return state_ == cmvr::task::TaskState::STOPPED;
|
||||
}
|
||||
bool isFailed() const override
|
||||
{
|
||||
return state_ == cmvr::task::TaskState::FAILED;
|
||||
}
|
||||
std::string stateString() const override
|
||||
{
|
||||
return cmvr::task::taskStateToString(state_);
|
||||
}
|
||||
std::string detailStatusString() const override
|
||||
{
|
||||
return stateString();
|
||||
}
|
||||
|
||||
int init_calls{0};
|
||||
int start_calls{0};
|
||||
int stop_calls{0};
|
||||
int stop_activity_calls{0};
|
||||
std::mutex start_mutex;
|
||||
std::condition_variable start_condition;
|
||||
bool start_entered{false};
|
||||
|
||||
private:
|
||||
std::string id_;
|
||||
cmvr::task::TaskShutdownPhase shutdown_phase_;
|
||||
cmvr::task::TaskState state_{
|
||||
cmvr::task::TaskState::UNINITIALIZED};
|
||||
};
|
||||
|
||||
std::shared_ptr<LifecycleTask> created_task;
|
||||
std::shared_ptr<LifecycleTask> created_ingress_task;
|
||||
|
||||
cmvr::config::TaskManagerConfig enabledTaskConfig()
|
||||
{
|
||||
cmvr::config::TaskManagerConfig config;
|
||||
auto* entry = config.add_tasks();
|
||||
entry->set_id("lifecycle_task");
|
||||
entry->set_type(
|
||||
cmvr::config::TaskConfigEntry::TASK_TYPE_UME_TELEOP);
|
||||
entry->set_enable(true);
|
||||
entry->set_run_mode(
|
||||
cmvr::config::TaskConfigEntry::
|
||||
TASK_RUN_MODE_BLOCKING_SERVICE);
|
||||
return config;
|
||||
}
|
||||
|
||||
class TaskManagerLifecycleTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
cmvr::task::TaskManager::destroyInstance();
|
||||
cmvr::service::globalStopAllAdmissionGate().clearForTesting();
|
||||
task_behavior = {};
|
||||
created_task.reset();
|
||||
created_ingress_task.reset();
|
||||
stop_order.clear();
|
||||
cmvr::task::TaskFactory::registerCreator(
|
||||
cmvr::config::TaskConfigEntry::TASK_TYPE_UME_TELEOP,
|
||||
[](const cmvr::config::TaskConfigEntry& entry) {
|
||||
created_task =
|
||||
std::make_shared<LifecycleTask>(entry.id());
|
||||
return created_task;
|
||||
});
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
if (created_task) {
|
||||
{
|
||||
std::lock_guard lock(created_task->start_mutex);
|
||||
task_behavior.block_start = false;
|
||||
}
|
||||
created_task->start_condition.notify_all();
|
||||
}
|
||||
cmvr::task::TaskManager::destroyInstance();
|
||||
cmvr::service::globalStopAllAdmissionGate().clearForTesting();
|
||||
created_task.reset();
|
||||
created_ingress_task.reset();
|
||||
stop_order.clear();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest,
|
||||
EnabledTaskInitFailureMarksInitializationFailed)
|
||||
{
|
||||
task_behavior.init_result = false;
|
||||
auto& manager =
|
||||
cmvr::task::TaskManager::getInstance(enabledTaskConfig());
|
||||
|
||||
ASSERT_NE(created_task, nullptr);
|
||||
EXPECT_FALSE(manager.initialized());
|
||||
EXPECT_FALSE(manager.startRunTask());
|
||||
EXPECT_FALSE(manager.running());
|
||||
EXPECT_EQ(created_task->init_calls, 1);
|
||||
EXPECT_EQ(created_task->start_calls, 0);
|
||||
EXPECT_EQ(created_task->stop_calls, 1);
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest,
|
||||
TaskStartFailureIsReturnedAndRunningRemainsFalse)
|
||||
{
|
||||
task_behavior.start_result = false;
|
||||
auto& manager =
|
||||
cmvr::task::TaskManager::getInstance(enabledTaskConfig());
|
||||
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
ASSERT_NE(created_task, nullptr);
|
||||
EXPECT_FALSE(manager.startRunTask());
|
||||
EXPECT_FALSE(manager.running());
|
||||
EXPECT_EQ(created_task->start_calls, 1);
|
||||
EXPECT_EQ(created_task->stop_calls, 1);
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest,
|
||||
TaskStartExceptionIsReturnedAndRunningRemainsFalse)
|
||||
{
|
||||
task_behavior.throw_on_start = true;
|
||||
auto& manager =
|
||||
cmvr::task::TaskManager::getInstance(enabledTaskConfig());
|
||||
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
ASSERT_NE(created_task, nullptr);
|
||||
EXPECT_FALSE(manager.startRunTask());
|
||||
EXPECT_FALSE(manager.running());
|
||||
EXPECT_EQ(created_task->start_calls, 1);
|
||||
EXPECT_EQ(created_task->stop_calls, 1);
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest, SuccessfulStartAndStopAreReported)
|
||||
{
|
||||
auto& manager =
|
||||
cmvr::task::TaskManager::getInstance(enabledTaskConfig());
|
||||
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
ASSERT_NE(created_task, nullptr);
|
||||
EXPECT_TRUE(manager.startRunTask());
|
||||
EXPECT_TRUE(manager.running());
|
||||
manager.stopRunTask();
|
||||
EXPECT_FALSE(manager.running());
|
||||
EXPECT_EQ(created_task->start_calls, 1);
|
||||
EXPECT_EQ(created_task->stop_calls, 1);
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest,
|
||||
CommandIngressStopsBeforeDependentTaskActivity)
|
||||
{
|
||||
cmvr::task::TaskFactory::registerCreator(
|
||||
cmvr::config::TaskConfigEntry::TASK_TYPE_GRPC_SERVER,
|
||||
[](const cmvr::config::TaskConfigEntry& entry) {
|
||||
created_ingress_task = std::make_shared<LifecycleTask>(
|
||||
entry.id(),
|
||||
cmvr::task::TaskShutdownPhase::COMMAND_INGRESS);
|
||||
return created_ingress_task;
|
||||
});
|
||||
|
||||
auto config = enabledTaskConfig();
|
||||
auto* ingress = config.add_tasks();
|
||||
ingress->set_id("control_ingress");
|
||||
ingress->set_type(
|
||||
cmvr::config::TaskConfigEntry::TASK_TYPE_GRPC_SERVER);
|
||||
ingress->set_enable(true);
|
||||
ingress->set_run_mode(
|
||||
cmvr::config::TaskConfigEntry::TASK_RUN_MODE_BLOCKING_SERVICE);
|
||||
|
||||
auto& manager = cmvr::task::TaskManager::getInstance(config);
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
ASSERT_TRUE(manager.startRunTask());
|
||||
manager.stopRunTask();
|
||||
|
||||
ASSERT_EQ(stop_order.size(), 2U);
|
||||
EXPECT_EQ(stop_order[0], "control_ingress");
|
||||
EXPECT_EQ(stop_order[1], "lifecycle_task");
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest,
|
||||
DestroyDoesNotHoldSingletonLockWhileStoppingTasks)
|
||||
{
|
||||
task_behavior.query_snapshot_on_stop = true;
|
||||
auto& manager =
|
||||
cmvr::task::TaskManager::getInstance(enabledTaskConfig());
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
ASSERT_TRUE(manager.startRunTask());
|
||||
|
||||
auto destroy = std::async(std::launch::async, [] {
|
||||
cmvr::task::TaskManager::destroyInstance();
|
||||
});
|
||||
ASSERT_EQ(
|
||||
destroy.wait_for(std::chrono::seconds(1)),
|
||||
std::future_status::ready);
|
||||
destroy.get();
|
||||
|
||||
ASSERT_NE(created_task, nullptr);
|
||||
EXPECT_EQ(created_task->stop_calls, 1);
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest,
|
||||
StopAllActivitiesDoesNotStopSchedulerOrTaskLifecycle)
|
||||
{
|
||||
auto& manager =
|
||||
cmvr::task::TaskManager::getInstance(enabledTaskConfig());
|
||||
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
ASSERT_TRUE(manager.startRunTask());
|
||||
ASSERT_NE(created_task, nullptr);
|
||||
EXPECT_TRUE(manager.stopAllActivities());
|
||||
EXPECT_TRUE(manager.running());
|
||||
EXPECT_EQ(created_task->stop_activity_calls, 1);
|
||||
EXPECT_EQ(created_task->stop_calls, 0);
|
||||
|
||||
manager.stopRunTask();
|
||||
EXPECT_EQ(created_task->stop_calls, 1);
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest,
|
||||
StopAllActivitiesReportsUnconfirmedOperationalStop)
|
||||
{
|
||||
task_behavior.stop_activity_result = false;
|
||||
auto& manager =
|
||||
cmvr::task::TaskManager::getInstance(enabledTaskConfig());
|
||||
|
||||
std::vector<std::string> failures;
|
||||
EXPECT_FALSE(manager.stopAllActivities(&failures));
|
||||
ASSERT_EQ(failures.size(), 1U);
|
||||
EXPECT_NE(failures.front().find("lifecycle_task"), std::string::npos);
|
||||
EXPECT_EQ(created_task->stop_calls, 0);
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest,
|
||||
StopAllActivitiesIsSuccessfulWhenManagerIsNotInitialized)
|
||||
{
|
||||
cmvr::task::TaskManager::destroyInstance();
|
||||
std::vector<std::string> failures;
|
||||
EXPECT_TRUE(
|
||||
cmvr::task::TaskManager::stopAllActivitiesIfInitialized(&failures));
|
||||
EXPECT_TRUE(failures.empty());
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest, StartIsRejectedWhileStopAllAdmissionIsClosed)
|
||||
{
|
||||
auto& manager =
|
||||
cmvr::task::TaskManager::getInstance(enabledTaskConfig());
|
||||
auto& gate = cmvr::service::globalStopAllAdmissionGate();
|
||||
const auto ticket = gate.beginStopAll();
|
||||
|
||||
EXPECT_FALSE(manager.startRunTask());
|
||||
EXPECT_FALSE(manager.running());
|
||||
ASSERT_NE(created_task, nullptr);
|
||||
EXPECT_EQ(created_task->start_calls, 0);
|
||||
|
||||
EXPECT_TRUE(gate.finishStopAll(ticket, true));
|
||||
EXPECT_TRUE(manager.startRunTask());
|
||||
EXPECT_TRUE(manager.running());
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest,
|
||||
StartCrossingStopAllGenerationRollsBackStartedTasks)
|
||||
{
|
||||
task_behavior.block_start = true;
|
||||
auto& manager =
|
||||
cmvr::task::TaskManager::getInstance(enabledTaskConfig());
|
||||
ASSERT_NE(created_task, nullptr);
|
||||
|
||||
std::atomic<bool> start_result{true};
|
||||
std::thread starter([&] {
|
||||
start_result.store(manager.startRunTask());
|
||||
});
|
||||
bool start_entered = false;
|
||||
{
|
||||
std::unique_lock lock(created_task->start_mutex);
|
||||
start_entered = created_task->start_condition.wait_for(
|
||||
lock, std::chrono::seconds(2), [&] {
|
||||
return created_task->start_entered;
|
||||
});
|
||||
}
|
||||
if (!start_entered) {
|
||||
{
|
||||
std::lock_guard lock(created_task->start_mutex);
|
||||
task_behavior.block_start = false;
|
||||
}
|
||||
created_task->start_condition.notify_all();
|
||||
starter.join();
|
||||
FAIL() << "task start did not reach the generation-race barrier";
|
||||
}
|
||||
|
||||
auto& gate = cmvr::service::globalStopAllAdmissionGate();
|
||||
const auto ticket = gate.beginStopAll();
|
||||
{
|
||||
std::lock_guard lock(created_task->start_mutex);
|
||||
task_behavior.block_start = false;
|
||||
}
|
||||
created_task->start_condition.notify_all();
|
||||
starter.join();
|
||||
|
||||
EXPECT_FALSE(start_result.load());
|
||||
EXPECT_FALSE(manager.running());
|
||||
EXPECT_EQ(created_task->start_calls, 1);
|
||||
EXPECT_EQ(created_task->stop_calls, 1);
|
||||
|
||||
EXPECT_TRUE(gate.finishStopAll(ticket, true));
|
||||
EXPECT_TRUE(manager.startRunTask());
|
||||
}
|
||||
|
||||
TEST_F(TaskManagerLifecycleTest,
|
||||
FailedStopAllKeepsTaskStartupRejectedUntilSuccessfulRound)
|
||||
{
|
||||
auto& manager =
|
||||
cmvr::task::TaskManager::getInstance(enabledTaskConfig());
|
||||
auto& gate = cmvr::service::globalStopAllAdmissionGate();
|
||||
auto ticket = gate.beginStopAll();
|
||||
EXPECT_FALSE(gate.finishStopAll(ticket, false));
|
||||
|
||||
EXPECT_FALSE(manager.startRunTask());
|
||||
ASSERT_NE(created_task, nullptr);
|
||||
EXPECT_EQ(created_task->start_calls, 0);
|
||||
|
||||
ticket = gate.beginStopAll();
|
||||
EXPECT_TRUE(gate.finishStopAll(ticket, true));
|
||||
EXPECT_TRUE(manager.startRunTask());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@ -19,33 +19,3 @@ target_link_libraries(cmvr_runtime PUBLIC
|
||||
|
||||
add_library(cmvr_es::runtime ALIAS cmvr_runtime)
|
||||
install(TARGETS cmvr_runtime LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(runtime_lifecycle_test
|
||||
tests/runtime_lifecycle_test.cpp
|
||||
)
|
||||
target_compile_features(runtime_lifecycle_test PRIVATE cxx_std_17)
|
||||
target_include_directories(runtime_lifecycle_test PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(runtime_lifecycle_test PRIVATE
|
||||
cmvr_es::runtime
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME runtime_lifecycle_test
|
||||
COMMAND runtime_lifecycle_test
|
||||
)
|
||||
set(_runtime_lifecycle_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}")
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _runtime_lifecycle_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(runtime_lifecycle_test PROPERTIES
|
||||
TIMEOUT 20
|
||||
ENVIRONMENT "${_runtime_lifecycle_test_environment}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -1,266 +0,0 @@
|
||||
#include "runtime/include/cmvr_runtime.h"
|
||||
|
||||
#include <arpa/inet.h>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/socket.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <cstdlib>
|
||||
#include <filesystem>
|
||||
#include <string>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "cmvr/config/cmvr_es_config/cmvr_es_config.pb.h"
|
||||
#include "cmvr/config/device_manager_config/device_manager_config.pb.h"
|
||||
#include "cmvr/config/grpc_server_config/grpc_server_config.pb.h"
|
||||
#include "cmvr/config/logger_config/logger_config.pb.h"
|
||||
#include "cmvr/config/task_manager_config/task_manager_config.pb.h"
|
||||
#include "common/io/proto_file_io.h"
|
||||
|
||||
namespace {
|
||||
|
||||
class TempConfigTree {
|
||||
public:
|
||||
TempConfigTree()
|
||||
{
|
||||
std::array<char, 64> pattern{};
|
||||
const std::string value =
|
||||
"/tmp/cmvr-runtime-lifecycle-XXXXXX";
|
||||
std::copy(value.begin(), value.end(), pattern.begin());
|
||||
char* created = ::mkdtemp(pattern.data());
|
||||
if (created) {
|
||||
root_ = created;
|
||||
}
|
||||
}
|
||||
|
||||
~TempConfigTree()
|
||||
{
|
||||
if (root_.empty()) {
|
||||
return;
|
||||
}
|
||||
std::error_code error;
|
||||
std::filesystem::remove_all(root_, error);
|
||||
}
|
||||
|
||||
bool valid() const { return !root_.empty(); }
|
||||
|
||||
template <typename Message>
|
||||
bool write(const std::string& name, const Message& message) const
|
||||
{
|
||||
return ProtoMessageIo::setProtoToAsciiFile(
|
||||
message, (root_ / name).string());
|
||||
}
|
||||
|
||||
std::string path(const std::string& name) const
|
||||
{
|
||||
return (root_ / name).string();
|
||||
}
|
||||
|
||||
bool writeLogger() const
|
||||
{
|
||||
cmvr::config::LoggerRootConfig root;
|
||||
auto* logger = root.mutable_logger();
|
||||
logger->set_minimum_level(
|
||||
cmvr::config::LOG_LEVEL_INFO);
|
||||
auto* route = logger->add_routes();
|
||||
route->set_level(cmvr::config::LOG_LEVEL_INFO);
|
||||
route->set_terminal(false);
|
||||
route->set_file(false);
|
||||
return write("logger.pb.txt", root);
|
||||
}
|
||||
|
||||
bool writeRoot() const
|
||||
{
|
||||
cmvr::config::CMVRESRootConfig root;
|
||||
auto* config = root.mutable_cmvr_es();
|
||||
config->set_logger_config_file("logger.pb.txt");
|
||||
config->set_device_manager_config_file(
|
||||
"device_manager.pb.txt");
|
||||
config->set_task_manager_config_file(
|
||||
"task_manager.pb.txt");
|
||||
return write("cmvr_es.pb.txt", root);
|
||||
}
|
||||
|
||||
private:
|
||||
std::filesystem::path root_;
|
||||
};
|
||||
|
||||
class OccupiedTcpPort {
|
||||
public:
|
||||
OccupiedTcpPort()
|
||||
{
|
||||
fd_ = ::socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);
|
||||
if (fd_ < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
sockaddr_in address{};
|
||||
address.sin_family = AF_INET;
|
||||
address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
|
||||
address.sin_port = 0;
|
||||
if (::bind(fd_, reinterpret_cast<sockaddr*>(&address),
|
||||
sizeof(address)) != 0 ||
|
||||
::listen(fd_, 1) != 0) {
|
||||
::close(fd_);
|
||||
fd_ = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
socklen_t length = sizeof(address);
|
||||
if (::getsockname(fd_,
|
||||
reinterpret_cast<sockaddr*>(&address),
|
||||
&length) != 0) {
|
||||
::close(fd_);
|
||||
fd_ = -1;
|
||||
return;
|
||||
}
|
||||
port_ = ntohs(address.sin_port);
|
||||
}
|
||||
|
||||
~OccupiedTcpPort()
|
||||
{
|
||||
if (fd_ >= 0) {
|
||||
::close(fd_);
|
||||
}
|
||||
}
|
||||
|
||||
bool valid() const { return fd_ >= 0 && port_ != 0; }
|
||||
std::string port() const { return std::to_string(port_); }
|
||||
|
||||
private:
|
||||
int fd_{-1};
|
||||
unsigned short port_{0};
|
||||
};
|
||||
|
||||
TEST(RuntimeLifecycleTest, EnabledDeviceInitFailureFailsRuntimeInit)
|
||||
{
|
||||
TempConfigTree tree;
|
||||
ASSERT_TRUE(tree.valid());
|
||||
ASSERT_TRUE(tree.writeLogger());
|
||||
ASSERT_TRUE(tree.writeRoot());
|
||||
|
||||
cmvr::config::DeviceManagerRootConfig devices;
|
||||
auto* entry =
|
||||
devices.mutable_device_manager()->add_devices();
|
||||
entry->set_id("unsupported");
|
||||
entry->set_type(
|
||||
cmvr::config::DeviceConfigEntry::DEVICE_TYPE_UNKNOWN);
|
||||
entry->set_enable(true);
|
||||
ASSERT_TRUE(tree.write("device_manager.pb.txt", devices));
|
||||
|
||||
cmvr::config::TaskManagerRootConfig tasks;
|
||||
ASSERT_TRUE(tree.write("task_manager.pb.txt", tasks));
|
||||
|
||||
cmvr::Runtime runtime;
|
||||
EXPECT_FALSE(runtime.init(tree.path("cmvr_es.pb.txt")));
|
||||
EXPECT_FALSE(runtime.initialized());
|
||||
EXPECT_FALSE(runtime.tasksStarted());
|
||||
}
|
||||
|
||||
TEST(RuntimeLifecycleTest, EnabledTaskInitFailureFailsRuntimeInit)
|
||||
{
|
||||
TempConfigTree tree;
|
||||
ASSERT_TRUE(tree.valid());
|
||||
ASSERT_TRUE(tree.writeLogger());
|
||||
ASSERT_TRUE(tree.writeRoot());
|
||||
|
||||
cmvr::config::DeviceManagerRootConfig devices;
|
||||
ASSERT_TRUE(tree.write("device_manager.pb.txt", devices));
|
||||
|
||||
cmvr::config::TaskManagerRootConfig tasks;
|
||||
auto* entry = tasks.mutable_task_manager()->add_tasks();
|
||||
entry->set_id("unsupported");
|
||||
entry->set_type(
|
||||
cmvr::config::TaskConfigEntry::TASK_TYPE_UNKNOWN);
|
||||
entry->set_enable(true);
|
||||
entry->set_run_mode(
|
||||
cmvr::config::TaskConfigEntry::
|
||||
TASK_RUN_MODE_BLOCKING_SERVICE);
|
||||
ASSERT_TRUE(tree.write("task_manager.pb.txt", tasks));
|
||||
|
||||
cmvr::Runtime runtime;
|
||||
EXPECT_FALSE(runtime.init(tree.path("cmvr_es.pb.txt")));
|
||||
EXPECT_FALSE(runtime.initialized());
|
||||
EXPECT_FALSE(runtime.tasksStarted());
|
||||
}
|
||||
|
||||
TEST(RuntimeLifecycleTest,
|
||||
TaskConfigLoadFailureRollsBackDeviceManagerSingleton)
|
||||
{
|
||||
TempConfigTree first_tree;
|
||||
ASSERT_TRUE(first_tree.valid());
|
||||
ASSERT_TRUE(first_tree.writeLogger());
|
||||
ASSERT_TRUE(first_tree.writeRoot());
|
||||
|
||||
cmvr::config::DeviceManagerRootConfig first_devices;
|
||||
first_devices.mutable_device_manager()->set_name("first");
|
||||
ASSERT_TRUE(first_tree.write(
|
||||
"device_manager.pb.txt", first_devices));
|
||||
// Deliberately do not create task_manager.pb.txt.
|
||||
|
||||
cmvr::Runtime runtime;
|
||||
ASSERT_FALSE(
|
||||
runtime.init(first_tree.path("cmvr_es.pb.txt")));
|
||||
ASSERT_FALSE(runtime.initialized());
|
||||
|
||||
TempConfigTree second_tree;
|
||||
ASSERT_TRUE(second_tree.valid());
|
||||
ASSERT_TRUE(second_tree.writeLogger());
|
||||
ASSERT_TRUE(second_tree.writeRoot());
|
||||
|
||||
cmvr::config::DeviceManagerRootConfig second_devices;
|
||||
second_devices.mutable_device_manager()->set_name("second");
|
||||
ASSERT_TRUE(second_tree.write(
|
||||
"device_manager.pb.txt", second_devices));
|
||||
cmvr::config::TaskManagerRootConfig second_tasks;
|
||||
ASSERT_TRUE(second_tree.write(
|
||||
"task_manager.pb.txt", second_tasks));
|
||||
|
||||
ASSERT_TRUE(
|
||||
runtime.init(second_tree.path("cmvr_es.pb.txt")));
|
||||
EXPECT_EQ(runtime.deviceManager().name(), "second");
|
||||
}
|
||||
|
||||
TEST(RuntimeLifecycleTest, GrpcBindFailureDoesNotMarkTasksStarted)
|
||||
{
|
||||
OccupiedTcpPort occupied_port;
|
||||
ASSERT_TRUE(occupied_port.valid());
|
||||
|
||||
TempConfigTree tree;
|
||||
ASSERT_TRUE(tree.valid());
|
||||
ASSERT_TRUE(tree.writeLogger());
|
||||
ASSERT_TRUE(tree.writeRoot());
|
||||
|
||||
cmvr::config::DeviceManagerRootConfig devices;
|
||||
ASSERT_TRUE(tree.write("device_manager.pb.txt", devices));
|
||||
|
||||
cmvr::config::GRPCServerRootConfig grpc;
|
||||
auto* grpc_config = grpc.mutable_grpc_server();
|
||||
grpc_config->set_id("grpc_server");
|
||||
grpc_config->set_host("127.0.0.1");
|
||||
grpc_config->set_port(occupied_port.port());
|
||||
ASSERT_TRUE(tree.write("grpc.pb.txt", grpc));
|
||||
|
||||
cmvr::config::TaskManagerRootConfig tasks;
|
||||
auto* entry = tasks.mutable_task_manager()->add_tasks();
|
||||
entry->set_id("grpc_server");
|
||||
entry->set_type(
|
||||
cmvr::config::TaskConfigEntry::TASK_TYPE_GRPC_SERVER);
|
||||
entry->set_enable(true);
|
||||
entry->set_run_mode(
|
||||
cmvr::config::TaskConfigEntry::
|
||||
TASK_RUN_MODE_BLOCKING_SERVICE);
|
||||
entry->set_config_file("grpc.pb.txt");
|
||||
ASSERT_TRUE(tree.write("task_manager.pb.txt", tasks));
|
||||
|
||||
cmvr::Runtime runtime;
|
||||
ASSERT_TRUE(runtime.init(tree.path("cmvr_es.pb.txt")));
|
||||
EXPECT_FALSE(runtime.startTasks());
|
||||
EXPECT_FALSE(runtime.tasksStarted());
|
||||
EXPECT_FALSE(runtime.taskManager().running());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@ -121,7 +121,6 @@ ActionQueue 遵循以下执行语义:
|
||||
- 实现:[`grpc/server/include/grpc_motor_service.h`](grpc/server/include/grpc_motor_service.h)
|
||||
和 [`grpc/server/src/grpc_motor_service.cpp`](grpc/server/src/grpc_motor_service.cpp)
|
||||
- 注册:[`../task/grpc_server_task/src/grpc_server_task.cpp`](../task/grpc_server_task/src/grpc_server_task.cpp)
|
||||
- 单元测试:[`grpc/server/tests/grpc_motor_service_test.cpp`](grpc/server/tests/grpc_motor_service_test.cpp)
|
||||
|
||||
服务按单电机仲裁。同步 Profile 命令、Cyclic Position/Velocity 双向流、
|
||||
`setEnabled`、状态读取和软件 `emergencyStop` 共用同一控制权状态:
|
||||
|
||||
@ -49,136 +49,6 @@ add_library(cmvr_es::service ALIAS service)
|
||||
install(TARGETS service LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(stop_all_admission_gate_test
|
||||
stop_all/tests/stop_all_admission_gate_test.cpp
|
||||
stop_all/src/stop_all_admission_gate.cpp
|
||||
)
|
||||
target_include_directories(stop_all_admission_gate_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(stop_all_admission_gate_test PRIVATE
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME stop_all_admission_gate_test
|
||||
COMMAND stop_all_admission_gate_test
|
||||
)
|
||||
set_tests_properties(stop_all_admission_gate_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
add_executable(stop_operation_dispatcher_test
|
||||
stop_all/tests/stop_operation_dispatcher_test.cpp
|
||||
stop_all/src/stop_operation_dispatcher.cpp
|
||||
)
|
||||
target_include_directories(stop_operation_dispatcher_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(stop_operation_dispatcher_test PRIVATE
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME stop_operation_dispatcher_test
|
||||
COMMAND stop_operation_dispatcher_test
|
||||
)
|
||||
set_tests_properties(stop_operation_dispatcher_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
add_executable(camera_operational_activity_registry_test
|
||||
server/tests/camera_operational_activity_registry_test.cpp
|
||||
)
|
||||
target_include_directories(camera_operational_activity_registry_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(camera_operational_activity_registry_test PRIVATE
|
||||
cmvr_es::proto
|
||||
cmvr_es::camera_operational_activity_registry
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME camera_operational_activity_registry_test
|
||||
COMMAND camera_operational_activity_registry_test
|
||||
)
|
||||
set_tests_properties(camera_operational_activity_registry_test PROPERTIES
|
||||
TIMEOUT 10)
|
||||
|
||||
add_executable(camera_ptz_activity_registry_test
|
||||
server/tests/camera_ptz_activity_registry_test.cpp
|
||||
server/src/camera_ptz_activity_registry.cpp
|
||||
stop_all/src/stop_all_admission_gate.cpp
|
||||
)
|
||||
target_include_directories(camera_ptz_activity_registry_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(camera_ptz_activity_registry_test PRIVATE
|
||||
cmvr_es::proto
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME camera_ptz_activity_registry_test
|
||||
COMMAND camera_ptz_activity_registry_test
|
||||
)
|
||||
set_tests_properties(camera_ptz_activity_registry_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
add_executable(media_activity_coordinator_test
|
||||
server/tests/media_activity_coordinator_test.cpp
|
||||
server/src/media_activity_coordinator.cpp
|
||||
stop_all/src/stop_all_admission_gate.cpp
|
||||
)
|
||||
target_include_directories(media_activity_coordinator_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(media_activity_coordinator_test PRIVATE
|
||||
cmvr_es::logging
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME media_activity_coordinator_test
|
||||
COMMAND media_activity_coordinator_test
|
||||
)
|
||||
set(_grpc_media_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _grpc_media_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(media_activity_coordinator_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_grpc_media_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(motor_activity_coordinator_test
|
||||
server/tests/motor_activity_coordinator_test.cpp
|
||||
server/src/motor_activity_coordinator.cpp
|
||||
)
|
||||
target_include_directories(motor_activity_coordinator_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(motor_activity_coordinator_test PRIVATE
|
||||
cmvr_es::logging
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME motor_activity_coordinator_test
|
||||
COMMAND motor_activity_coordinator_test
|
||||
)
|
||||
set_tests_properties(motor_activity_coordinator_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_grpc_media_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_camera_stream_policy_test
|
||||
server/tests/grpc_camera_stream_policy_test.cpp
|
||||
)
|
||||
@ -191,306 +61,6 @@ if(BUILD_TESTING)
|
||||
COMMAND grpc_camera_stream_policy_test
|
||||
)
|
||||
set_tests_properties(grpc_camera_stream_policy_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
add_executable(grpc_system_service_test
|
||||
server/tests/grpc_system_service_test.cpp
|
||||
)
|
||||
target_include_directories(grpc_system_service_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
|
||||
)
|
||||
target_link_libraries(grpc_system_service_test
|
||||
PRIVATE
|
||||
service
|
||||
cmvr_es::proto
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_system_service_test
|
||||
COMMAND grpc_system_service_test
|
||||
)
|
||||
set(_grpc_system_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _grpc_system_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(grpc_system_service_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_grpc_system_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_error_logging_interceptor_test
|
||||
server/tests/grpc_error_logging_interceptor_test.cpp
|
||||
server/src/grpc_error_logging_interceptor.cpp
|
||||
)
|
||||
target_include_directories(grpc_error_logging_interceptor_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(grpc_error_logging_interceptor_test
|
||||
PRIVATE
|
||||
cmvr_es::logging
|
||||
cmvr_es::proto
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_error_logging_interceptor_test
|
||||
COMMAND grpc_error_logging_interceptor_test
|
||||
)
|
||||
set_tests_properties(grpc_error_logging_interceptor_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_grpc_system_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_security_test
|
||||
server/tests/grpc_security_test.cpp
|
||||
server/src/grpc_security.cpp
|
||||
)
|
||||
target_include_directories(grpc_security_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(grpc_security_test
|
||||
PRIVATE
|
||||
cmvr_es::proto
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_security_test
|
||||
COMMAND grpc_security_test
|
||||
)
|
||||
set_tests_properties(grpc_security_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_grpc_system_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_command_transaction_test
|
||||
server/tests/grpc_command_transaction_test.cpp
|
||||
server/src/grpc_command_transaction.cpp
|
||||
server/src/grpc_safety_proto.cpp
|
||||
server/src/grpc_security.cpp
|
||||
)
|
||||
target_include_directories(grpc_command_transaction_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(grpc_command_transaction_test PRIVATE
|
||||
cmvr_es::safety_manager
|
||||
cmvr_es::proto
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_command_transaction_test
|
||||
COMMAND grpc_command_transaction_test
|
||||
)
|
||||
set_tests_properties(grpc_command_transaction_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_grpc_system_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_arm_service_test
|
||||
server/tests/grpc_arm_service_test.cpp
|
||||
)
|
||||
target_include_directories(grpc_arm_service_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
|
||||
)
|
||||
target_link_libraries(grpc_arm_service_test
|
||||
PRIVATE
|
||||
service
|
||||
cmvr_es::proto
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_arm_service_test
|
||||
COMMAND grpc_arm_service_test
|
||||
)
|
||||
set_tests_properties(grpc_arm_service_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_grpc_system_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_arm_teleop_service_test
|
||||
server/tests/grpc_arm_teleop_service_test.cpp
|
||||
)
|
||||
target_include_directories(grpc_arm_teleop_service_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(grpc_arm_teleop_service_test
|
||||
PRIVATE
|
||||
service
|
||||
cmvr_es::proto
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_arm_teleop_service_test
|
||||
COMMAND grpc_arm_teleop_service_test
|
||||
)
|
||||
set(_grpc_arm_teleop_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _grpc_arm_teleop_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(grpc_arm_teleop_service_test PROPERTIES
|
||||
TIMEOUT 20
|
||||
ENVIRONMENT "${_grpc_arm_teleop_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_robot_arm_teleop_backend_test
|
||||
server/tests/grpc_robot_arm_teleop_backend_test.cpp
|
||||
)
|
||||
target_include_directories(grpc_robot_arm_teleop_backend_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
target_link_libraries(grpc_robot_arm_teleop_backend_test
|
||||
PRIVATE
|
||||
service
|
||||
cmvr_es::proto
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_robot_arm_teleop_backend_test
|
||||
COMMAND grpc_robot_arm_teleop_backend_test
|
||||
)
|
||||
set_tests_properties(grpc_robot_arm_teleop_backend_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_grpc_arm_teleop_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_motor_service_test
|
||||
server/tests/grpc_motor_service_test.cpp
|
||||
)
|
||||
target_include_directories(grpc_motor_service_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
|
||||
)
|
||||
target_link_libraries(grpc_motor_service_test
|
||||
PRIVATE
|
||||
service
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_motor_service_test
|
||||
COMMAND grpc_motor_service_test
|
||||
)
|
||||
set(_grpc_motor_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _grpc_motor_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(grpc_motor_service_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_grpc_motor_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_agv_service_test
|
||||
server/tests/grpc_agv_service_test.cpp
|
||||
)
|
||||
target_include_directories(grpc_agv_service_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
|
||||
)
|
||||
target_link_libraries(grpc_agv_service_test
|
||||
PRIVATE
|
||||
service
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_agv_service_test
|
||||
COMMAND grpc_agv_service_test
|
||||
)
|
||||
set(_grpc_agv_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
|
||||
)
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _grpc_agv_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(grpc_agv_service_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_grpc_agv_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_head_service_test
|
||||
server/tests/grpc_head_service_test.cpp
|
||||
)
|
||||
target_include_directories(grpc_head_service_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
|
||||
)
|
||||
target_link_libraries(grpc_head_service_test
|
||||
PRIVATE
|
||||
service
|
||||
cmvr_es::proto
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_head_service_test
|
||||
COMMAND grpc_head_service_test
|
||||
)
|
||||
set_tests_properties(grpc_head_service_test PROPERTIES
|
||||
TIMEOUT 15
|
||||
ENVIRONMENT "${_grpc_system_test_environment}"
|
||||
)
|
||||
|
||||
add_executable(grpc_dexhand_service_test
|
||||
server/tests/grpc_dexhand_service_test.cpp
|
||||
)
|
||||
target_include_directories(grpc_dexhand_service_test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
|
||||
)
|
||||
target_link_libraries(grpc_dexhand_service_test
|
||||
PRIVATE
|
||||
service
|
||||
cmvr_es::proto
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME grpc_dexhand_service_test
|
||||
COMMAND grpc_dexhand_service_test
|
||||
)
|
||||
set_tests_properties(grpc_dexhand_service_test PROPERTIES
|
||||
TIMEOUT 15
|
||||
ENVIRONMENT "${_grpc_system_test_environment}"
|
||||
)
|
||||
|
||||
endif()
|
||||
|
||||
# --------------------------------------------------------
|
||||
|
||||
@ -14,25 +14,3 @@ target_link_libraries(arm_teleop_client
|
||||
|
||||
add_library(cmvr_es::arm_teleop_client ALIAS arm_teleop_client)
|
||||
install(TARGETS arm_teleop_client ARCHIVE DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(grpc_arm_teleop_client_test
|
||||
tests/grpc_arm_teleop_client_test.cpp
|
||||
)
|
||||
target_compile_features(grpc_arm_teleop_client_test PRIVATE cxx_std_17)
|
||||
target_link_libraries(grpc_arm_teleop_client_test
|
||||
PRIVATE
|
||||
cmvr_es::arm_teleop_client
|
||||
Threads::Threads
|
||||
)
|
||||
add_test(NAME grpc_arm_teleop_client_test COMMAND grpc_arm_teleop_client_test)
|
||||
set(_arm_teleop_client_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}")
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _arm_teleop_client_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(grpc_arm_teleop_client_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_arm_teleop_client_test_environment}")
|
||||
endif()
|
||||
|
||||
@ -1,220 +0,0 @@
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <cstdio>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
|
||||
#include <grpcpp/grpcpp.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "cmvr/api/arm_teleop_v1.grpc.pb.h"
|
||||
#include "service/grpc/client/include/grpc_arm_teleop_client.h"
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
namespace api = cmvr::api::armteleop::v1;
|
||||
|
||||
class TestArmTeleopService final : public api::ArmTeleopService::Service {
|
||||
public:
|
||||
grpc::Status Teleoperate(
|
||||
grpc::ServerContext*,
|
||||
grpc::ServerReaderWriter<api::ServerFrame, api::ClientFrame>* stream) override
|
||||
{
|
||||
api::ClientFrame frame;
|
||||
if (!stream->Read(&frame) || !frame.has_open()) {
|
||||
return grpc::Status(
|
||||
grpc::StatusCode::INVALID_ARGUMENT,
|
||||
"OpenSession must be first");
|
||||
}
|
||||
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
open_received_ = true;
|
||||
}
|
||||
condition_.notify_all();
|
||||
|
||||
api::ServerFrame opened;
|
||||
opened.mutable_status()->set_session_id("client-test-session");
|
||||
opened.mutable_status()->set_phase(api::SESSION_PHASE_OPENED);
|
||||
if (!stream->Write(opened)) {
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
|
||||
while (stream->Read(&frame)) {
|
||||
if (frame.has_heartbeat()) {
|
||||
heartbeat_received_.store(true);
|
||||
condition_.notify_all();
|
||||
}
|
||||
}
|
||||
handler_finished_.store(true);
|
||||
condition_.notify_all();
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
|
||||
bool waitForOpen(const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return condition_.wait_for(lock, timeout, [this] { return open_received_; });
|
||||
}
|
||||
|
||||
bool waitForHeartbeat(const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return condition_.wait_for(
|
||||
lock, timeout, [this] { return heartbeat_received_.load(); });
|
||||
}
|
||||
|
||||
bool waitForHandlerFinish(const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return condition_.wait_for(
|
||||
lock, timeout, [this] { return handler_finished_.load(); });
|
||||
}
|
||||
|
||||
private:
|
||||
std::mutex mutex_;
|
||||
std::condition_variable condition_;
|
||||
bool open_received_{false};
|
||||
std::atomic<bool> heartbeat_received_{false};
|
||||
std::atomic<bool> handler_finished_{false};
|
||||
};
|
||||
|
||||
int fail(const std::string& detail)
|
||||
{
|
||||
std::cerr << "grpc_arm_teleop_client_test: " << detail << '\n';
|
||||
return 1;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
TestArmTeleopService service;
|
||||
const std::string socket_path =
|
||||
"/tmp/cmvr_arm_teleop_client_test_" +
|
||||
std::to_string(static_cast<long long>(::getpid())) + ".sock";
|
||||
std::remove(socket_path.c_str());
|
||||
const std::string endpoint = "unix:" + socket_path;
|
||||
|
||||
grpc::ServerBuilder builder;
|
||||
builder.AddListeningPort(
|
||||
endpoint,
|
||||
grpc::InsecureServerCredentials());
|
||||
builder.RegisterService(&service);
|
||||
std::unique_ptr<grpc::Server> server = builder.BuildAndStart();
|
||||
if (!server) {
|
||||
return fail("failed to start in-process gRPC server");
|
||||
}
|
||||
|
||||
auto channel = grpc::CreateChannel(
|
||||
endpoint,
|
||||
grpc::InsecureChannelCredentials());
|
||||
cmvr::teleop::GrpcArmTeleopClient client(channel);
|
||||
|
||||
api::OpenSession open;
|
||||
open.set_protocol_major(1);
|
||||
open.set_protocol_minor(0);
|
||||
open.set_client_instance_id("grpc-client-test");
|
||||
open.mutable_expected_robot()->set_robot_id("test-arm");
|
||||
open.set_watchdog_timeout_ms(100);
|
||||
open.set_requested_lease_ms(500);
|
||||
|
||||
std::mutex frame_mutex;
|
||||
std::condition_variable frame_condition;
|
||||
bool opened_received = false;
|
||||
grpc::Status session_status;
|
||||
std::thread session_thread([&] {
|
||||
session_status = client.runSession(
|
||||
open,
|
||||
[&](const api::ServerFrame& frame) {
|
||||
if (frame.has_status() &&
|
||||
frame.status().phase() == api::SESSION_PHASE_OPENED) {
|
||||
{
|
||||
std::lock_guard lock(frame_mutex);
|
||||
opened_received = true;
|
||||
}
|
||||
frame_condition.notify_all();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (!service.waitForOpen(2s)) {
|
||||
client.tryCancel();
|
||||
session_thread.join();
|
||||
server->Shutdown();
|
||||
return fail("server did not receive OpenSession");
|
||||
}
|
||||
{
|
||||
std::unique_lock lock(frame_mutex);
|
||||
if (!frame_condition.wait_for(lock, 2s, [&] { return opened_received; })) {
|
||||
client.tryCancel();
|
||||
session_thread.join();
|
||||
server->Shutdown();
|
||||
return fail("client did not receive OPENED status");
|
||||
}
|
||||
}
|
||||
if (!client.isSessionActive()) {
|
||||
client.tryCancel();
|
||||
session_thread.join();
|
||||
server->Shutdown();
|
||||
return fail("client did not expose an active session");
|
||||
}
|
||||
const std::uint64_t generation =
|
||||
client.activeSessionGeneration();
|
||||
if (generation == 0) {
|
||||
client.tryCancel();
|
||||
session_thread.join();
|
||||
server->Shutdown();
|
||||
return fail("active stream did not expose a session generation");
|
||||
}
|
||||
|
||||
api::ClientHeartbeat heartbeat;
|
||||
heartbeat.set_sequence(1);
|
||||
if (client.sendHeartbeat(heartbeat, generation + 1)) {
|
||||
client.tryCancel();
|
||||
session_thread.join();
|
||||
server->Shutdown();
|
||||
return fail("stale session generation was allowed to write");
|
||||
}
|
||||
if (!client.sendHeartbeat(heartbeat, generation) ||
|
||||
!service.waitForHeartbeat(2s)) {
|
||||
client.tryCancel();
|
||||
session_thread.join();
|
||||
server->Shutdown();
|
||||
return fail("heartbeat did not traverse the active stream");
|
||||
}
|
||||
|
||||
const auto cancel_begin = std::chrono::steady_clock::now();
|
||||
client.tryCancel();
|
||||
session_thread.join();
|
||||
const auto cancel_elapsed = std::chrono::steady_clock::now() - cancel_begin;
|
||||
|
||||
if (cancel_elapsed > 2s) {
|
||||
server->Shutdown();
|
||||
return fail("TryCancel did not unblock and join the session promptly");
|
||||
}
|
||||
if (session_status.error_code() != grpc::StatusCode::CANCELLED) {
|
||||
server->Shutdown();
|
||||
return fail(
|
||||
"cancelled session returned unexpected status: " +
|
||||
std::to_string(session_status.error_code()));
|
||||
}
|
||||
if (client.isSessionActive()) {
|
||||
server->Shutdown();
|
||||
return fail("client retained an active stream after cancellation");
|
||||
}
|
||||
if (!service.waitForHandlerFinish(2s)) {
|
||||
server->Shutdown();
|
||||
return fail("server handler did not observe client cancellation");
|
||||
}
|
||||
|
||||
server->Shutdown();
|
||||
std::remove(socket_path.c_str());
|
||||
std::cout << "grpc_arm_teleop_client_test: PASS\n";
|
||||
return 0;
|
||||
}
|
||||
@ -1,491 +0,0 @@
|
||||
#include "service/grpc/server/include/camera_operational_activity_registry.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
class TestCamera final : public device::AbstractCamera {
|
||||
public:
|
||||
explicit TestCamera(std::string id)
|
||||
{
|
||||
id_ = std::move(id);
|
||||
state_.is_initialized = true;
|
||||
}
|
||||
|
||||
std::string typeName() const override { return "TestCamera"; }
|
||||
|
||||
void getState(device::CameraState& state) override
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
state = state_;
|
||||
}
|
||||
|
||||
bool start() override
|
||||
{
|
||||
++lifecycle_start_calls_;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool stop() override
|
||||
{
|
||||
++lifecycle_stop_calls_;
|
||||
std::lock_guard lock(mutex_);
|
||||
operational_active_ = false;
|
||||
state_.is_opened = false;
|
||||
return !fail_lifecycle_stop_;
|
||||
}
|
||||
|
||||
bool startOperationalActivity() override
|
||||
{
|
||||
++operational_start_calls_;
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
start_entered_ = true;
|
||||
condition_.notify_all();
|
||||
condition_.wait(lock, [this] { return !block_start_; });
|
||||
if (fail_operational_start_) {
|
||||
return false;
|
||||
}
|
||||
operational_active_ = true;
|
||||
state_.is_opened = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool stopOperationalActivity() override
|
||||
{
|
||||
++operational_stop_calls_;
|
||||
std::unique_lock lock(mutex_);
|
||||
stop_entered_ = true;
|
||||
condition_.notify_all();
|
||||
condition_.wait(lock, [this] { return !block_stop_; });
|
||||
if (fail_operational_stop_) {
|
||||
return false;
|
||||
}
|
||||
operational_active_ = false;
|
||||
state_.is_opened = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void setFailOperationalStart(const bool fail)
|
||||
{
|
||||
fail_operational_start_ = fail;
|
||||
}
|
||||
|
||||
void setFailOperationalStop(const bool fail)
|
||||
{
|
||||
fail_operational_stop_ = fail;
|
||||
}
|
||||
|
||||
void blockStop()
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_stop_ = true;
|
||||
stop_entered_ = false;
|
||||
}
|
||||
|
||||
void waitForStopEntered()
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
condition_.wait(lock, [this] { return stop_entered_; });
|
||||
}
|
||||
|
||||
void releaseStop()
|
||||
{
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_stop_ = false;
|
||||
}
|
||||
condition_.notify_all();
|
||||
}
|
||||
|
||||
void blockStart()
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_start_ = true;
|
||||
start_entered_ = false;
|
||||
}
|
||||
|
||||
void waitForStartEntered()
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
condition_.wait(lock, [this] { return start_entered_; });
|
||||
}
|
||||
|
||||
void releaseStart()
|
||||
{
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_start_ = false;
|
||||
}
|
||||
condition_.notify_all();
|
||||
}
|
||||
|
||||
bool operationalActive() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return operational_active_;
|
||||
}
|
||||
|
||||
int lifecycleStartCalls() const { return lifecycle_start_calls_; }
|
||||
int lifecycleStopCalls() const { return lifecycle_stop_calls_; }
|
||||
int operationalStartCalls() const { return operational_start_calls_; }
|
||||
int operationalStopCalls() const { return operational_stop_calls_; }
|
||||
|
||||
private:
|
||||
mutable std::mutex mutex_;
|
||||
std::condition_variable condition_;
|
||||
bool operational_active_{false};
|
||||
bool fail_operational_start_{false};
|
||||
bool fail_operational_stop_{false};
|
||||
bool fail_lifecycle_stop_{false};
|
||||
bool block_start_{false};
|
||||
bool start_entered_{false};
|
||||
bool block_stop_{false};
|
||||
bool stop_entered_{false};
|
||||
std::atomic<int> lifecycle_start_calls_{0};
|
||||
std::atomic<int> lifecycle_stop_calls_{0};
|
||||
std::atomic<int> operational_start_calls_{0};
|
||||
std::atomic<int> operational_stop_calls_{0};
|
||||
};
|
||||
|
||||
class CameraOperationalActivityRegistryTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
globalStopAllAdmissionGate().clearForTesting();
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
globalStopAllAdmissionGate().clearForTesting();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(CameraOperationalActivityRegistryTest,
|
||||
StopAllStopsTrackedActivityWithoutLifecycleStopAndCanRestart)
|
||||
{
|
||||
CameraOperationalActivityRegistry registry;
|
||||
auto camera = std::make_shared<TestCamera>("camera");
|
||||
|
||||
EXPECT_EQ(
|
||||
registry.start(camera->id(), camera),
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
EXPECT_TRUE(camera->operationalActive());
|
||||
EXPECT_EQ(registry.activeCameraCount(), 1U);
|
||||
|
||||
auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
EXPECT_TRUE(registry.stopAllActivities());
|
||||
EXPECT_FALSE(camera->operationalActive());
|
||||
EXPECT_EQ(camera->lifecycleStopCalls(), 0);
|
||||
EXPECT_EQ(camera->operationalStopCalls(), 1);
|
||||
EXPECT_EQ(registry.activeCameraCount(), 0U);
|
||||
ASSERT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
|
||||
EXPECT_EQ(
|
||||
registry.start(camera->id(), camera),
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
EXPECT_TRUE(camera->operationalActive());
|
||||
EXPECT_EQ(camera->operationalStartCalls(), 2);
|
||||
EXPECT_EQ(camera->lifecycleStartCalls(), 0);
|
||||
}
|
||||
|
||||
TEST_F(CameraOperationalActivityRegistryTest,
|
||||
FailedOperationalStopRemainsTrackedAndKeepsAdmissionClosed)
|
||||
{
|
||||
CameraOperationalActivityRegistry registry;
|
||||
auto camera = std::make_shared<TestCamera>("camera");
|
||||
ASSERT_EQ(
|
||||
registry.start(camera->id(), camera),
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
|
||||
camera->setFailOperationalStop(true);
|
||||
auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
std::vector<std::string> failures;
|
||||
EXPECT_FALSE(registry.stopAllActivities(&failures));
|
||||
EXPECT_EQ(registry.activeCameraCount(), 1U);
|
||||
ASSERT_EQ(failures.size(), 1U);
|
||||
EXPECT_EQ(
|
||||
registry.start(camera->id(), camera),
|
||||
CameraOperationalActivityRegistry::DispatchResult::RejectedByStopAll);
|
||||
EXPECT_FALSE(globalStopAllAdmissionGate().finishStopAll(ticket, false));
|
||||
|
||||
camera->setFailOperationalStop(false);
|
||||
ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
EXPECT_TRUE(registry.stopAllActivities());
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
EXPECT_EQ(registry.activeCameraCount(), 0U);
|
||||
}
|
||||
|
||||
TEST_F(CameraOperationalActivityRegistryTest,
|
||||
StopAllWaitsForRacingStartThenStopsTheStartedActivity)
|
||||
{
|
||||
CameraOperationalActivityRegistry registry;
|
||||
auto camera = std::make_shared<TestCamera>("camera");
|
||||
camera->blockStart();
|
||||
|
||||
CameraOperationalActivityRegistry::DispatchResult start_result =
|
||||
CameraOperationalActivityRegistry::DispatchResult::DeviceFailure;
|
||||
std::thread start_thread([&] {
|
||||
start_result = registry.start(camera->id(), camera);
|
||||
});
|
||||
camera->waitForStartEntered();
|
||||
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
std::atomic<bool> stop_returned{false};
|
||||
bool stop_result = false;
|
||||
std::thread stop_thread([&] {
|
||||
stop_result = registry.stopAllActivities();
|
||||
stop_returned = true;
|
||||
});
|
||||
|
||||
std::this_thread::yield();
|
||||
EXPECT_FALSE(stop_returned.load());
|
||||
camera->releaseStart();
|
||||
start_thread.join();
|
||||
stop_thread.join();
|
||||
|
||||
EXPECT_EQ(
|
||||
start_result,
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
EXPECT_TRUE(stop_result);
|
||||
EXPECT_FALSE(camera->operationalActive());
|
||||
EXPECT_EQ(camera->operationalStopCalls(), 1);
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
}
|
||||
|
||||
TEST_F(CameraOperationalActivityRegistryTest,
|
||||
TrackedIdsExposeAStartThatIsStillInsideDriverIo)
|
||||
{
|
||||
CameraOperationalActivityRegistry registry;
|
||||
auto camera = std::make_shared<TestCamera>("camera.pending");
|
||||
camera->blockStart();
|
||||
|
||||
CameraOperationalActivityRegistry::DispatchResult start_result =
|
||||
CameraOperationalActivityRegistry::DispatchResult::DeviceFailure;
|
||||
std::thread start_thread([&] {
|
||||
start_result = registry.start(camera->id(), camera);
|
||||
});
|
||||
camera->waitForStartEntered();
|
||||
|
||||
const auto snapshot_started = std::chrono::steady_clock::now();
|
||||
EXPECT_EQ(
|
||||
registry.trackedDeviceIds(),
|
||||
(std::vector<std::string>{"camera.pending"}));
|
||||
EXPECT_LT(
|
||||
std::chrono::steady_clock::now() - snapshot_started,
|
||||
std::chrono::milliseconds(100));
|
||||
|
||||
camera->releaseStart();
|
||||
start_thread.join();
|
||||
EXPECT_EQ(
|
||||
start_result,
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
}
|
||||
|
||||
TEST_F(CameraOperationalActivityRegistryTest,
|
||||
DefaultOperationalStopFailsClosed)
|
||||
{
|
||||
class UnsupportedCamera final : public device::AbstractCamera {
|
||||
public:
|
||||
UnsupportedCamera() { id_ = "unsupported"; }
|
||||
std::string typeName() const override { return "UnsupportedCamera"; }
|
||||
void getState(device::CameraState& state) override { state = {}; }
|
||||
};
|
||||
|
||||
CameraOperationalActivityRegistry registry;
|
||||
auto camera = std::make_shared<UnsupportedCamera>();
|
||||
ASSERT_EQ(
|
||||
registry.start(camera->id(), camera),
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
EXPECT_FALSE(registry.stopAllActivities());
|
||||
EXPECT_EQ(registry.activeCameraCount(), 1U);
|
||||
EXPECT_FALSE(globalStopAllAdmissionGate().finishStopAll(ticket, false));
|
||||
}
|
||||
|
||||
TEST_F(CameraOperationalActivityRegistryTest,
|
||||
StopForDeviceIsSelectiveAndActiveIdsReflectFailures)
|
||||
{
|
||||
CameraOperationalActivityRegistry registry;
|
||||
auto first = std::make_shared<TestCamera>("camera.first");
|
||||
auto second = std::make_shared<TestCamera>("camera.second");
|
||||
ASSERT_EQ(
|
||||
registry.start(first->id(), first),
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
ASSERT_EQ(
|
||||
registry.start(second->id(), second),
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
EXPECT_EQ(
|
||||
registry.activeDeviceIds(),
|
||||
(std::vector<std::string>{"camera.first", "camera.second"}));
|
||||
EXPECT_EQ(
|
||||
registry.trackedDeviceIds(),
|
||||
(std::vector<std::string>{"camera.first", "camera.second"}));
|
||||
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
first->setFailOperationalStop(true);
|
||||
std::vector<std::string> failures;
|
||||
EXPECT_FALSE(registry.stopActivitiesForDevice(first->id(), &failures));
|
||||
EXPECT_EQ(failures.size(), 1U);
|
||||
EXPECT_TRUE(first->operationalActive());
|
||||
EXPECT_TRUE(second->operationalActive());
|
||||
EXPECT_EQ(second->operationalStopCalls(), 0);
|
||||
|
||||
first->setFailOperationalStop(false);
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(first->id()));
|
||||
EXPECT_EQ(
|
||||
registry.activeDeviceIds(),
|
||||
(std::vector<std::string>{"camera.second"}));
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice("missing"));
|
||||
EXPECT_TRUE(registry.stopAllActivities());
|
||||
EXPECT_TRUE(registry.activeDeviceIds().empty());
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
EXPECT_EQ(first->lifecycleStopCalls(), 0);
|
||||
EXPECT_EQ(second->lifecycleStopCalls(), 0);
|
||||
}
|
||||
|
||||
TEST_F(CameraOperationalActivityRegistryTest,
|
||||
InventoryFallbackStopsOncePerStopAllRoundAndCanStopAgainLater)
|
||||
{
|
||||
CameraOperationalActivityRegistry registry;
|
||||
auto camera = std::make_shared<TestCamera>("inventory-camera");
|
||||
ASSERT_TRUE(camera->startOperationalActivity());
|
||||
|
||||
auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(camera->id(), camera));
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(camera->id(), camera));
|
||||
EXPECT_FALSE(camera->operationalActive());
|
||||
EXPECT_EQ(camera->operationalStopCalls(), 1);
|
||||
EXPECT_EQ(camera->lifecycleStopCalls(), 0);
|
||||
ASSERT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
|
||||
ASSERT_TRUE(camera->startOperationalActivity());
|
||||
ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(camera->id(), camera));
|
||||
EXPECT_FALSE(camera->operationalActive());
|
||||
EXPECT_EQ(camera->operationalStopCalls(), 2);
|
||||
EXPECT_EQ(camera->lifecycleStopCalls(), 0);
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
}
|
||||
|
||||
TEST_F(CameraOperationalActivityRegistryTest,
|
||||
TrackedCameraTakesPrecedenceOverInventoryFallback)
|
||||
{
|
||||
CameraOperationalActivityRegistry registry;
|
||||
auto tracked = std::make_shared<TestCamera>("camera");
|
||||
auto fallback = std::make_shared<TestCamera>("camera");
|
||||
ASSERT_EQ(
|
||||
registry.start(tracked->id(), tracked),
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
ASSERT_TRUE(fallback->startOperationalActivity());
|
||||
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(
|
||||
tracked->id(), fallback));
|
||||
EXPECT_FALSE(tracked->operationalActive());
|
||||
EXPECT_EQ(tracked->operationalStopCalls(), 1);
|
||||
EXPECT_TRUE(fallback->operationalActive());
|
||||
EXPECT_EQ(fallback->operationalStopCalls(), 0);
|
||||
EXPECT_EQ(tracked->lifecycleStopCalls(), 0);
|
||||
EXPECT_EQ(fallback->lifecycleStopCalls(), 0);
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
}
|
||||
|
||||
TEST_F(CameraOperationalActivityRegistryTest,
|
||||
ActiveDeviceIdCannotBeReboundToAnotherCameraInstance)
|
||||
{
|
||||
CameraOperationalActivityRegistry registry;
|
||||
auto original = std::make_shared<TestCamera>("camera");
|
||||
auto replacement = std::make_shared<TestCamera>("camera");
|
||||
ASSERT_EQ(
|
||||
registry.start(original->id(), original),
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
|
||||
CameraOperationalActivityRegistry::ActivityToken replacement_token;
|
||||
EXPECT_EQ(
|
||||
registry.start(
|
||||
replacement->id(), replacement, &replacement_token),
|
||||
CameraOperationalActivityRegistry::DispatchResult::DeviceFailure);
|
||||
EXPECT_FALSE(replacement_token.valid());
|
||||
EXPECT_TRUE(original->operationalActive());
|
||||
EXPECT_FALSE(replacement->operationalActive());
|
||||
EXPECT_EQ(replacement->operationalStartCalls(), 0);
|
||||
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
EXPECT_TRUE(registry.stopAllActivities());
|
||||
EXPECT_FALSE(original->operationalActive());
|
||||
EXPECT_EQ(original->operationalStopCalls(), 1);
|
||||
EXPECT_EQ(replacement->operationalStopCalls(), 0);
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
}
|
||||
|
||||
TEST_F(CameraOperationalActivityRegistryTest,
|
||||
DifferentDevicesStopConcurrentlyAndSameDeviceStopIsSerialized)
|
||||
{
|
||||
CameraOperationalActivityRegistry registry;
|
||||
auto first = std::make_shared<TestCamera>("camera.first");
|
||||
auto second = std::make_shared<TestCamera>("camera.second");
|
||||
ASSERT_EQ(
|
||||
registry.start(first->id(), first),
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
ASSERT_EQ(
|
||||
registry.start(second->id(), second),
|
||||
CameraOperationalActivityRegistry::DispatchResult::Success);
|
||||
first->blockStop();
|
||||
second->blockStop();
|
||||
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
std::thread first_stop([&] {
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(first->id()));
|
||||
});
|
||||
first->waitForStopEntered();
|
||||
const auto snapshot_started = std::chrono::steady_clock::now();
|
||||
EXPECT_EQ(
|
||||
registry.trackedDeviceIds(),
|
||||
(std::vector<std::string>{"camera.first", "camera.second"}));
|
||||
EXPECT_LT(
|
||||
std::chrono::steady_clock::now() - snapshot_started,
|
||||
std::chrono::milliseconds(100));
|
||||
std::thread second_stop([&] {
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(second->id()));
|
||||
});
|
||||
second->waitForStopEntered();
|
||||
|
||||
std::atomic<bool> matching_stop_returned{false};
|
||||
std::thread matching_stop([&] {
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(first->id()));
|
||||
matching_stop_returned = true;
|
||||
});
|
||||
std::this_thread::yield();
|
||||
EXPECT_FALSE(matching_stop_returned.load());
|
||||
|
||||
second->releaseStop();
|
||||
second_stop.join();
|
||||
first->releaseStop();
|
||||
first_stop.join();
|
||||
matching_stop.join();
|
||||
EXPECT_TRUE(matching_stop_returned.load());
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,349 +0,0 @@
|
||||
#include "service/grpc/server/include/camera_ptz_activity_registry.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
class TestCamera final : public device::AbstractCamera {
|
||||
public:
|
||||
struct Call {
|
||||
device::PtzCommand command;
|
||||
bool stop;
|
||||
int speed;
|
||||
};
|
||||
|
||||
explicit TestCamera(std::string id)
|
||||
{
|
||||
id_ = std::move(id);
|
||||
}
|
||||
|
||||
std::string typeName() const override { return "TestCamera"; }
|
||||
void getState(device::CameraState& state) override { state = {}; }
|
||||
|
||||
bool controlPtz(
|
||||
const device::PtzCommand command,
|
||||
const bool stop,
|
||||
const int speed) override
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
calls_.push_back({command, stop, speed});
|
||||
if (stop) {
|
||||
stop_entered_ = true;
|
||||
condition_.notify_all();
|
||||
condition_.wait(lock, [this] { return !block_stop_; });
|
||||
}
|
||||
return !(stop && fail_stop_);
|
||||
}
|
||||
|
||||
bool stop() override
|
||||
{
|
||||
++lifecycle_stop_calls_;
|
||||
return true;
|
||||
}
|
||||
|
||||
std::vector<Call> calls() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return calls_;
|
||||
}
|
||||
|
||||
void setFailStop(const bool fail) { fail_stop_ = fail; }
|
||||
void blockStop()
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_stop_ = true;
|
||||
stop_entered_ = false;
|
||||
}
|
||||
void waitForStopEntered()
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
condition_.wait(lock, [this] { return stop_entered_; });
|
||||
}
|
||||
void releaseStop()
|
||||
{
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_stop_ = false;
|
||||
}
|
||||
condition_.notify_all();
|
||||
}
|
||||
int lifecycleStopCalls() const { return lifecycle_stop_calls_; }
|
||||
|
||||
private:
|
||||
mutable std::mutex mutex_;
|
||||
std::condition_variable condition_;
|
||||
std::vector<Call> calls_;
|
||||
bool fail_stop_{false};
|
||||
bool block_stop_{false};
|
||||
bool stop_entered_{false};
|
||||
int lifecycle_stop_calls_{0};
|
||||
};
|
||||
|
||||
class CameraPtzActivityRegistryTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
globalStopAllAdmissionGate().clearForTesting();
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
globalStopAllAdmissionGate().clearForTesting();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(CameraPtzActivityRegistryTest,
|
||||
StopAllMatchesEveryActiveStartAndNeverStopsLifecycle)
|
||||
{
|
||||
CameraPtzActivityRegistry registry;
|
||||
auto camera = std::make_shared<TestCamera>("camera");
|
||||
|
||||
EXPECT_EQ(
|
||||
registry.control(
|
||||
camera->id(), camera, device::PtzCommand::PanLeft, false, 4),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
EXPECT_EQ(
|
||||
registry.control(
|
||||
camera->id(), camera, device::PtzCommand::ZoomIn, false, 7),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
EXPECT_TRUE(registry.stopAllActivities());
|
||||
EXPECT_EQ(registry.activeCommandCount(), 0U);
|
||||
EXPECT_EQ(camera->lifecycleStopCalls(), 0);
|
||||
ASSERT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
|
||||
const auto calls = camera->calls();
|
||||
ASSERT_EQ(calls.size(), 4U);
|
||||
EXPECT_FALSE(calls[0].stop);
|
||||
EXPECT_FALSE(calls[1].stop);
|
||||
EXPECT_TRUE(calls[2].stop);
|
||||
EXPECT_TRUE(calls[3].stop);
|
||||
}
|
||||
|
||||
TEST_F(CameraPtzActivityRegistryTest,
|
||||
FailedStopRemainsTrackedForRetryAndAdmissionRecovers)
|
||||
{
|
||||
CameraPtzActivityRegistry registry;
|
||||
auto camera = std::make_shared<TestCamera>("camera");
|
||||
ASSERT_EQ(
|
||||
registry.control(
|
||||
camera->id(), camera, device::PtzCommand::TiltUp, false, 3),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
|
||||
auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
camera->setFailStop(true);
|
||||
std::vector<std::string> failures;
|
||||
EXPECT_FALSE(registry.stopAllActivities(&failures));
|
||||
EXPECT_EQ(registry.activeCommandCount(), 1U);
|
||||
ASSERT_FALSE(failures.empty());
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, false) == false);
|
||||
|
||||
EXPECT_EQ(
|
||||
registry.control(
|
||||
camera->id(), camera, device::PtzCommand::ZoomOut, false, 5),
|
||||
CameraPtzActivityRegistry::DispatchResult::RejectedByStopAll);
|
||||
|
||||
ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
camera->setFailStop(false);
|
||||
EXPECT_TRUE(registry.stopAllActivities());
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
EXPECT_EQ(
|
||||
registry.control(
|
||||
camera->id(), camera, device::PtzCommand::ZoomOut, false, 5),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
}
|
||||
|
||||
TEST_F(CameraPtzActivityRegistryTest,
|
||||
ExplicitStopRemainsAvailableWhileStartAdmissionIsLatched)
|
||||
{
|
||||
CameraPtzActivityRegistry registry;
|
||||
auto camera = std::make_shared<TestCamera>("camera");
|
||||
ASSERT_EQ(
|
||||
registry.control(
|
||||
camera->id(), camera, device::PtzCommand::PanLeft, false, 4),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
EXPECT_FALSE(globalStopAllAdmissionGate().finishStopAll(ticket, false));
|
||||
EXPECT_EQ(
|
||||
registry.control(
|
||||
camera->id(), camera, device::PtzCommand::ZoomIn, false, 4),
|
||||
CameraPtzActivityRegistry::DispatchResult::RejectedByStopAll);
|
||||
EXPECT_EQ(
|
||||
registry.control(
|
||||
camera->id(), camera, device::PtzCommand::PanLeft, true, 4),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
EXPECT_EQ(registry.activeCommandCount(), 0U);
|
||||
|
||||
const auto calls = camera->calls();
|
||||
ASSERT_EQ(calls.size(), 2U);
|
||||
EXPECT_FALSE(calls.front().stop);
|
||||
EXPECT_TRUE(calls.back().stop);
|
||||
}
|
||||
|
||||
TEST_F(CameraPtzActivityRegistryTest,
|
||||
StopForDeviceIsSelectiveAndActiveIdsReflectFailures)
|
||||
{
|
||||
CameraPtzActivityRegistry registry;
|
||||
auto first = std::make_shared<TestCamera>("camera.first");
|
||||
auto second = std::make_shared<TestCamera>("camera.second");
|
||||
ASSERT_EQ(
|
||||
registry.control(
|
||||
first->id(), first, device::PtzCommand::PanLeft, false, 4),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
ASSERT_EQ(
|
||||
registry.control(
|
||||
second->id(), second, device::PtzCommand::ZoomIn, false, 7),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
EXPECT_EQ(
|
||||
registry.activeDeviceIds(),
|
||||
(std::vector<std::string>{"camera.first", "camera.second"}));
|
||||
EXPECT_EQ(
|
||||
registry.trackedDeviceIds(),
|
||||
(std::vector<std::string>{"camera.first", "camera.second"}));
|
||||
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
first->setFailStop(true);
|
||||
std::vector<std::string> failures;
|
||||
EXPECT_FALSE(registry.stopActivitiesForDevice(first->id(), &failures));
|
||||
EXPECT_EQ(registry.activeCommandCount(), 2U);
|
||||
EXPECT_EQ(failures.size(), 1U);
|
||||
EXPECT_EQ(second->calls().size(), 1U);
|
||||
|
||||
first->setFailStop(false);
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(first->id()));
|
||||
EXPECT_EQ(registry.activeCommandCount(), 1U);
|
||||
EXPECT_EQ(
|
||||
registry.activeDeviceIds(),
|
||||
(std::vector<std::string>{"camera.second"}));
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice("missing"));
|
||||
EXPECT_TRUE(registry.stopAllActivities());
|
||||
EXPECT_TRUE(registry.activeDeviceIds().empty());
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
EXPECT_EQ(first->lifecycleStopCalls(), 0);
|
||||
EXPECT_EQ(second->lifecycleStopCalls(), 0);
|
||||
}
|
||||
|
||||
TEST_F(CameraPtzActivityRegistryTest,
|
||||
DifferentDevicesStopConcurrentlyButMatchingControlIsSerialized)
|
||||
{
|
||||
CameraPtzActivityRegistry registry;
|
||||
auto first = std::make_shared<TestCamera>("camera.first");
|
||||
auto second = std::make_shared<TestCamera>("camera.second");
|
||||
ASSERT_EQ(
|
||||
registry.control(
|
||||
first->id(), first, device::PtzCommand::PanLeft, false, 4),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
ASSERT_EQ(
|
||||
registry.control(
|
||||
second->id(), second, device::PtzCommand::ZoomIn, false, 7),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
first->blockStop();
|
||||
second->blockStop();
|
||||
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
std::thread first_stop([&] {
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(first->id()));
|
||||
});
|
||||
first->waitForStopEntered();
|
||||
const auto snapshot_started = std::chrono::steady_clock::now();
|
||||
EXPECT_EQ(
|
||||
registry.trackedDeviceIds(),
|
||||
(std::vector<std::string>{"camera.first", "camera.second"}));
|
||||
EXPECT_LT(
|
||||
std::chrono::steady_clock::now() - snapshot_started,
|
||||
std::chrono::milliseconds(100));
|
||||
std::thread second_stop([&] {
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(second->id()));
|
||||
});
|
||||
second->waitForStopEntered();
|
||||
|
||||
std::atomic<bool> matching_stop_returned{false};
|
||||
std::thread matching_stop([&] {
|
||||
EXPECT_TRUE(registry.stopActivitiesForDevice(first->id()));
|
||||
matching_stop_returned = true;
|
||||
});
|
||||
std::this_thread::yield();
|
||||
EXPECT_FALSE(matching_stop_returned.load());
|
||||
|
||||
second->releaseStop();
|
||||
second_stop.join();
|
||||
first->releaseStop();
|
||||
first_stop.join();
|
||||
matching_stop.join();
|
||||
EXPECT_TRUE(matching_stop_returned.load());
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
}
|
||||
|
||||
TEST_F(CameraPtzActivityRegistryTest,
|
||||
DispatchFenceRunsInsidePerDeviceQueueBeforeHardwareMutation)
|
||||
{
|
||||
CameraPtzActivityRegistry registry;
|
||||
auto camera = std::make_shared<TestCamera>("camera");
|
||||
std::mutex mutex;
|
||||
std::condition_variable condition;
|
||||
bool first_fence_entered = false;
|
||||
bool release_first_fence = false;
|
||||
std::atomic<bool> second_fence_entered{false};
|
||||
|
||||
std::thread first([&] {
|
||||
EXPECT_EQ(
|
||||
registry.control(
|
||||
camera->id(), camera, device::PtzCommand::PanLeft, false, 4,
|
||||
[&] {
|
||||
std::unique_lock lock(mutex);
|
||||
first_fence_entered = true;
|
||||
condition.notify_all();
|
||||
condition.wait(lock, [&] { return release_first_fence; });
|
||||
return true;
|
||||
}),
|
||||
CameraPtzActivityRegistry::DispatchResult::Success);
|
||||
});
|
||||
{
|
||||
std::unique_lock lock(mutex);
|
||||
condition.wait(lock, [&] { return first_fence_entered; });
|
||||
}
|
||||
|
||||
std::thread second([&] {
|
||||
EXPECT_EQ(
|
||||
registry.control(
|
||||
camera->id(), camera, device::PtzCommand::ZoomIn, false, 7,
|
||||
[&] {
|
||||
second_fence_entered = true;
|
||||
return false;
|
||||
}),
|
||||
CameraPtzActivityRegistry::DispatchResult::RejectedByDispatchFence);
|
||||
});
|
||||
std::this_thread::yield();
|
||||
EXPECT_FALSE(second_fence_entered.load());
|
||||
|
||||
{
|
||||
std::lock_guard lock(mutex);
|
||||
release_first_fence = true;
|
||||
}
|
||||
condition.notify_all();
|
||||
first.join();
|
||||
second.join();
|
||||
|
||||
EXPECT_TRUE(second_fence_entered.load());
|
||||
const auto calls = camera->calls();
|
||||
ASSERT_EQ(calls.size(), 1U);
|
||||
EXPECT_EQ(calls.front().command, device::PtzCommand::PanLeft);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,806 +0,0 @@
|
||||
#include "service/grpc/server/include/grpc_agv_service.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <grpcpp/grpcpp.h>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "cmvr/config/device_manager_config/device_manager_config.pb.h"
|
||||
#include "manager/control_authority_manager/include/control_authority_manager.h"
|
||||
#include "manager/device_manager/include/device_manager.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
constexpr char kNativeErrorMessage[] =
|
||||
"SEER Robokit command failed: ret_code=41200, err_msg=speed_illegal";
|
||||
constexpr char kNativeNavigationErrorMessage[] =
|
||||
"SEER Robokit command failed: ret_code=43051, err_msg=planner_rejected_pose";
|
||||
|
||||
class FakeAgv final : public device::AbstractAGV {
|
||||
public:
|
||||
FakeAgv()
|
||||
{
|
||||
id_ = "test-agv";
|
||||
}
|
||||
|
||||
std::string typeName() const override { return "FakeAgv"; }
|
||||
|
||||
device::AgvResult emergencyStop() override
|
||||
{
|
||||
++emergency_stop_calls_;
|
||||
emergency_stop_barrier_observed_ = normalLeaseIsBlocked_(
|
||||
"test-probe:emergencyStop");
|
||||
return device::AgvResult::success();
|
||||
}
|
||||
|
||||
device::AgvResult navigateToPose(
|
||||
const math::Pose2d& pose,
|
||||
const device::AgvMotionOptions& options,
|
||||
const device::AgvAdapterParams&) override
|
||||
{
|
||||
++navigate_pose_calls_;
|
||||
pose_cancellation_bound_ =
|
||||
static_cast<bool>(options.cancellation_requested);
|
||||
pose_cancellation_requested_during_call_ =
|
||||
pose_cancellation_bound_ && options.cancellation_requested();
|
||||
if (pose_cancellation_requested_during_call_) {
|
||||
return device::AgvResult::failure(
|
||||
device::AgvErrorCode::TaskCanceled,
|
||||
"navigation canceled before fake device dispatch");
|
||||
}
|
||||
pose_ = pose;
|
||||
pose_options_ = options;
|
||||
pose_options_.cancellation_requested = {};
|
||||
return pose_result_;
|
||||
}
|
||||
|
||||
device::AgvResult navigateToStation(
|
||||
const std::string& station_id,
|
||||
const device::AgvMotionOptions& options,
|
||||
const device::AgvAdapterParams& adapter_params) override
|
||||
{
|
||||
station_id_ = station_id;
|
||||
station_options_ = options;
|
||||
station_adapter_params_ = adapter_params;
|
||||
station_cancellation_bound_ =
|
||||
static_cast<bool>(options.cancellation_requested);
|
||||
station_cancellation_requested_during_call_ =
|
||||
station_cancellation_bound_ && options.cancellation_requested();
|
||||
station_options_.cancellation_requested = {};
|
||||
return device::AgvResult::success();
|
||||
}
|
||||
|
||||
device::AgvResult followPath(
|
||||
const std::vector<device::AgvPathSegment>& path,
|
||||
const device::AgvMotionOptions& options) override
|
||||
{
|
||||
path_ = path;
|
||||
path_options_ = options;
|
||||
path_cancellation_bound_ =
|
||||
static_cast<bool>(options.cancellation_requested);
|
||||
path_cancellation_requested_during_call_ =
|
||||
path_cancellation_bound_ && options.cancellation_requested();
|
||||
path_options_.cancellation_requested = {};
|
||||
return device::AgvResult::success();
|
||||
}
|
||||
|
||||
device::AgvResult setVelocity(const device::AgvVelocity&) override
|
||||
{
|
||||
++set_velocity_calls_;
|
||||
return device::AgvResult::failure(
|
||||
device::AgvErrorCode::CommandFailed,
|
||||
kNativeErrorMessage);
|
||||
}
|
||||
|
||||
device::AgvResult cancelNavigation() override
|
||||
{
|
||||
++cancel_navigation_calls_;
|
||||
cancel_navigation_barrier_observed_ = normalLeaseIsBlocked_(
|
||||
"test-probe:cancelNavigation");
|
||||
return device::AgvResult::success();
|
||||
}
|
||||
|
||||
device::AgvResult stopVelocityControl() override
|
||||
{
|
||||
++stop_velocity_calls_;
|
||||
stop_velocity_barrier_observed_ = normalLeaseIsBlocked_(
|
||||
"test-probe:stopVelocityControl");
|
||||
return device::AgvResult::success();
|
||||
}
|
||||
|
||||
device::AgvResult confirmMotionStopped() override
|
||||
{
|
||||
++confirm_stopped_calls_;
|
||||
confirm_stopped_barrier_observed_ = normalLeaseIsBlocked_(
|
||||
"test-probe:confirmMotionStopped");
|
||||
return confirm_stopped_result_;
|
||||
}
|
||||
|
||||
bool normalLeaseIsBlocked_(const std::string& owner)
|
||||
{
|
||||
auto& authority = control::ControlAuthorityManager::instance();
|
||||
const auto probe = authority.tryAcquire(
|
||||
id_, owner, std::chrono::hours(1));
|
||||
if (probe.acquired) {
|
||||
authority.release(probe.token);
|
||||
}
|
||||
return !probe.acquired;
|
||||
}
|
||||
|
||||
math::Pose2d pose_{};
|
||||
device::AgvMotionOptions pose_options_;
|
||||
device::AgvResult pose_result_{device::AgvResult::success()};
|
||||
std::string station_id_;
|
||||
device::AgvMotionOptions station_options_;
|
||||
device::AgvAdapterParams station_adapter_params_;
|
||||
std::vector<device::AgvPathSegment> path_;
|
||||
device::AgvMotionOptions path_options_;
|
||||
bool pose_cancellation_bound_{false};
|
||||
bool pose_cancellation_requested_during_call_{false};
|
||||
bool station_cancellation_bound_{false};
|
||||
bool station_cancellation_requested_during_call_{false};
|
||||
bool path_cancellation_bound_{false};
|
||||
bool path_cancellation_requested_during_call_{false};
|
||||
int emergency_stop_calls_{0};
|
||||
int cancel_navigation_calls_{0};
|
||||
int stop_velocity_calls_{0};
|
||||
int confirm_stopped_calls_{0};
|
||||
int set_velocity_calls_{0};
|
||||
int navigate_pose_calls_{0};
|
||||
bool emergency_stop_barrier_observed_{false};
|
||||
bool cancel_navigation_barrier_observed_{false};
|
||||
bool stop_velocity_barrier_observed_{false};
|
||||
bool confirm_stopped_barrier_observed_{false};
|
||||
device::AgvResult confirm_stopped_result_{
|
||||
device::AgvResult::success()};
|
||||
};
|
||||
|
||||
class LegacyFollowPathAgv final : public device::AbstractAGV {
|
||||
public:
|
||||
std::string typeName() const override { return "LegacyFollowPathAgv"; }
|
||||
|
||||
device::AgvResult followPath(
|
||||
const std::vector<device::AgvPathSegment>& path) override
|
||||
{
|
||||
path_ = path;
|
||||
return device::AgvResult::success();
|
||||
}
|
||||
|
||||
std::vector<device::AgvPathSegment> path_;
|
||||
};
|
||||
|
||||
class GrpcAgvServiceTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
control::ControlAuthorityManager::instance().clear();
|
||||
globalStopAllAdmissionGate().clearForTesting();
|
||||
config::DeviceManagerConfig config;
|
||||
auto& manager = device::DeviceManager::getInstance(config);
|
||||
agv_ = std::make_shared<FakeAgv>();
|
||||
manager.registerDevice(agv_);
|
||||
service_ = std::make_unique<gRPCAgvServiceImpl>();
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
service_.reset();
|
||||
agv_.reset();
|
||||
device::DeviceManager::destroyInstance();
|
||||
control::ControlAuthorityManager::instance().clear();
|
||||
globalStopAllAdmissionGate().clearForTesting();
|
||||
}
|
||||
|
||||
std::shared_ptr<FakeAgv> agv_;
|
||||
std::unique_ptr<gRPCAgvServiceImpl> service_;
|
||||
};
|
||||
|
||||
void setMotionOptions(msgs::AgvMotionOptions* options)
|
||||
{
|
||||
options->set_max_speed(0.4);
|
||||
options->set_max_angular_speed(0.5);
|
||||
options->set_max_acceleration(0.6);
|
||||
options->set_max_angular_acceleration(0.7);
|
||||
options->set_reach_distance(0.08);
|
||||
options->set_reach_angle(0.09);
|
||||
options->set_wait_timeout_ms(1234);
|
||||
options->set_poll_interval_ms(55);
|
||||
}
|
||||
|
||||
void expectMotionOptions(const device::AgvMotionOptions& options)
|
||||
{
|
||||
EXPECT_DOUBLE_EQ(options.max_speed, 0.4);
|
||||
EXPECT_DOUBLE_EQ(options.max_angular_speed, 0.5);
|
||||
EXPECT_DOUBLE_EQ(options.max_acceleration, 0.6);
|
||||
EXPECT_DOUBLE_EQ(options.max_angular_acceleration, 0.7);
|
||||
EXPECT_DOUBLE_EQ(options.reach_distance, 0.08);
|
||||
EXPECT_DOUBLE_EQ(options.reach_angle, 0.09);
|
||||
EXPECT_EQ(options.wait_timeout_ms, 1234);
|
||||
EXPECT_EQ(options.poll_interval_ms, 55);
|
||||
EXPECT_FALSE(options.asynchronous);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, NavigationRpcsForwardSpeedAndAccelerationOptions)
|
||||
{
|
||||
api::AgvNavigateToPoseCommand_Request pose_request;
|
||||
pose_request.mutable_header()->set_device_id("test-agv");
|
||||
pose_request.mutable_pose()->set_x(1.0);
|
||||
pose_request.mutable_pose()->set_y(2.0);
|
||||
pose_request.mutable_pose()->set_theta(0.5);
|
||||
setMotionOptions(pose_request.mutable_options());
|
||||
api::AgvNavigateToPoseCommand_Feedback pose_response;
|
||||
grpc::ServerContext pose_context;
|
||||
|
||||
const auto pose_status = service_->navigateToPose(
|
||||
&pose_context,
|
||||
&pose_request,
|
||||
&pose_response);
|
||||
|
||||
ASSERT_TRUE(pose_status.ok()) << pose_status.error_message();
|
||||
EXPECT_TRUE(pose_response.header().success());
|
||||
EXPECT_DOUBLE_EQ(agv_->pose_.x, 1.0);
|
||||
EXPECT_DOUBLE_EQ(agv_->pose_.y, 2.0);
|
||||
EXPECT_DOUBLE_EQ(agv_->pose_.theta, 0.5);
|
||||
expectMotionOptions(agv_->pose_options_);
|
||||
EXPECT_TRUE(agv_->pose_cancellation_bound_);
|
||||
EXPECT_FALSE(agv_->pose_cancellation_requested_during_call_);
|
||||
|
||||
api::AgvNavigateToStationCommand_Request station_request;
|
||||
station_request.mutable_header()->set_device_id("test-agv");
|
||||
station_request.set_station_id("station-1");
|
||||
setMotionOptions(station_request.mutable_options());
|
||||
api::AgvNavigateToStationCommand_Feedback station_response;
|
||||
grpc::ServerContext station_context;
|
||||
|
||||
const auto station_status = service_->navigateToStation(
|
||||
&station_context,
|
||||
&station_request,
|
||||
&station_response);
|
||||
|
||||
ASSERT_TRUE(station_status.ok()) << station_status.error_message();
|
||||
EXPECT_TRUE(station_response.header().success());
|
||||
EXPECT_EQ(agv_->station_id_, "station-1");
|
||||
expectMotionOptions(agv_->station_options_);
|
||||
EXPECT_TRUE(agv_->station_cancellation_bound_);
|
||||
EXPECT_FALSE(agv_->station_cancellation_requested_during_call_);
|
||||
|
||||
api::AgvFollowPathCommand_Request path_request;
|
||||
path_request.mutable_header()->set_device_id("test-agv");
|
||||
auto* segment = path_request.add_path();
|
||||
segment->set_source_station("station-1");
|
||||
segment->set_target_station("station-2");
|
||||
setMotionOptions(path_request.mutable_options());
|
||||
api::AgvFollowPathCommand_Feedback path_response;
|
||||
grpc::ServerContext path_context;
|
||||
|
||||
const auto path_status = service_->followPath(
|
||||
&path_context,
|
||||
&path_request,
|
||||
&path_response);
|
||||
|
||||
ASSERT_TRUE(path_status.ok()) << path_status.error_message();
|
||||
EXPECT_TRUE(path_response.header().success());
|
||||
ASSERT_EQ(agv_->path_.size(), 1U);
|
||||
EXPECT_EQ(agv_->path_[0].source_station, "station-1");
|
||||
EXPECT_EQ(agv_->path_[0].target_station, "station-2");
|
||||
expectMotionOptions(agv_->path_options_);
|
||||
EXPECT_TRUE(agv_->path_cancellation_bound_);
|
||||
EXPECT_FALSE(agv_->path_cancellation_requested_during_call_);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, NativeControllerCodeIsReturnedInGrpcMessage)
|
||||
{
|
||||
api::AgvSetVelocityCommand_Request request;
|
||||
request.mutable_header()->set_device_id("test-agv");
|
||||
request.mutable_velocity()->set_vx(0.1);
|
||||
api::AgvSetVelocityCommand_Feedback response;
|
||||
grpc::ServerContext context;
|
||||
|
||||
const auto status = service_->setVelocity(
|
||||
&context,
|
||||
&request,
|
||||
&response);
|
||||
|
||||
EXPECT_EQ(status.error_code(), grpc::StatusCode::INTERNAL);
|
||||
EXPECT_EQ(status.error_message(), kNativeErrorMessage);
|
||||
EXPECT_FALSE(response.header().success());
|
||||
EXPECT_EQ(response.header().error_message(), kNativeErrorMessage);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, NativeNavigationCodeIsReturnedInGrpcMessage)
|
||||
{
|
||||
agv_->pose_result_ = device::AgvResult::failure(
|
||||
device::AgvErrorCode::CommandFailed,
|
||||
kNativeNavigationErrorMessage);
|
||||
api::AgvNavigateToPoseCommand_Request request;
|
||||
request.mutable_header()->set_device_id("test-agv");
|
||||
request.mutable_pose()->set_x(1.0);
|
||||
request.mutable_pose()->set_y(2.0);
|
||||
api::AgvNavigateToPoseCommand_Feedback response;
|
||||
grpc::ServerContext context;
|
||||
|
||||
const auto status = service_->navigateToPose(
|
||||
&context,
|
||||
&request,
|
||||
&response);
|
||||
|
||||
EXPECT_EQ(status.error_code(), grpc::StatusCode::INTERNAL);
|
||||
EXPECT_EQ(status.error_message(), kNativeNavigationErrorMessage);
|
||||
EXPECT_FALSE(response.header().success());
|
||||
EXPECT_EQ(
|
||||
response.header().error_message(),
|
||||
kNativeNavigationErrorMessage);
|
||||
EXPECT_FALSE(agv_->pose_options_.asynchronous);
|
||||
EXPECT_EQ(agv_->pose_options_.wait_timeout_ms, 0);
|
||||
EXPECT_EQ(agv_->pose_options_.poll_interval_ms, 0);
|
||||
EXPECT_TRUE(agv_->pose_cancellation_bound_);
|
||||
EXPECT_FALSE(agv_->pose_cancellation_requested_during_call_);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, ExplicitAsynchronousNavigationIsForwarded)
|
||||
{
|
||||
api::AgvNavigateToStationCommand_Request request;
|
||||
request.mutable_header()->set_device_id("test-agv");
|
||||
request.set_station_id("station-async");
|
||||
request.mutable_options()->set_asynchronous(true);
|
||||
api::AgvNavigateToStationCommand_Feedback response;
|
||||
grpc::ServerContext context;
|
||||
|
||||
const auto status = service_->navigateToStation(
|
||||
&context,
|
||||
&request,
|
||||
&response);
|
||||
|
||||
ASSERT_TRUE(status.ok()) << status.error_message();
|
||||
EXPECT_TRUE(agv_->station_options_.asynchronous);
|
||||
EXPECT_TRUE(agv_->station_cancellation_bound_);
|
||||
EXPECT_FALSE(agv_->station_cancellation_requested_during_call_);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, ActionLeaseBlocksOrdinaryMutatingRpcs)
|
||||
{
|
||||
auto& authority = control::ControlAuthorityManager::instance();
|
||||
const auto action_lease = authority.tryAcquire(
|
||||
"test-agv",
|
||||
"action-sequence:test-action",
|
||||
std::chrono::hours(1));
|
||||
ASSERT_TRUE(action_lease.acquired) << action_lease.detail;
|
||||
|
||||
api::AgvNavigateToPoseCommand_Request navigation_request;
|
||||
navigation_request.mutable_header()->set_device_id("test-agv");
|
||||
api::AgvNavigateToPoseCommand_Feedback navigation_response;
|
||||
grpc::ServerContext navigation_context;
|
||||
const auto navigation_status = service_->navigateToPose(
|
||||
&navigation_context,
|
||||
&navigation_request,
|
||||
&navigation_response);
|
||||
EXPECT_EQ(
|
||||
navigation_status.error_code(),
|
||||
grpc::StatusCode::FAILED_PRECONDITION);
|
||||
EXPECT_FALSE(navigation_response.header().success());
|
||||
|
||||
api::CommandHeader_Request clear_fault_request;
|
||||
clear_fault_request.set_device_id("test-agv");
|
||||
api::CommandHeader_Feedback clear_fault_response;
|
||||
grpc::ServerContext clear_fault_context;
|
||||
const auto clear_fault_status = service_->clearFault(
|
||||
&clear_fault_context,
|
||||
&clear_fault_request,
|
||||
&clear_fault_response);
|
||||
EXPECT_EQ(
|
||||
clear_fault_status.error_code(),
|
||||
grpc::StatusCode::FAILED_PRECONDITION);
|
||||
EXPECT_FALSE(clear_fault_response.success());
|
||||
|
||||
api::AgvMapCommand_Request switch_map_request;
|
||||
switch_map_request.mutable_header()->set_device_id("test-agv");
|
||||
switch_map_request.set_map_name("map-1");
|
||||
api::AgvMapCommand_Feedback switch_map_response;
|
||||
grpc::ServerContext switch_map_context;
|
||||
const auto switch_map_status = service_->switchMap(
|
||||
&switch_map_context,
|
||||
&switch_map_request,
|
||||
&switch_map_response);
|
||||
EXPECT_EQ(
|
||||
switch_map_status.error_code(),
|
||||
grpc::StatusCode::FAILED_PRECONDITION);
|
||||
EXPECT_FALSE(switch_map_response.header().success());
|
||||
|
||||
authority.release(action_lease.token);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, NavigationCancellationIncludesControlLease)
|
||||
{
|
||||
auto& authority = control::ControlAuthorityManager::instance();
|
||||
const auto barrier = authority.preemptAcquire(
|
||||
"test-agv", "stop-all-test", std::chrono::hours(1));
|
||||
ASSERT_TRUE(barrier.acquired) << barrier.detail;
|
||||
|
||||
api::AgvNavigateToPoseCommand_Request request;
|
||||
request.mutable_header()->set_device_id("test-agv");
|
||||
api::AgvNavigateToPoseCommand_Feedback response;
|
||||
grpc::ServerContext context;
|
||||
const auto status = service_->navigateToPose(
|
||||
&context, &request, &response);
|
||||
|
||||
EXPECT_EQ(
|
||||
status.error_code(),
|
||||
grpc::StatusCode::FAILED_PRECONDITION);
|
||||
EXPECT_EQ(agv_->navigate_pose_calls_, 0);
|
||||
authority.release(barrier.token);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, SetVelocityDispatchRunsUnderControlFence)
|
||||
{
|
||||
api::AgvSetVelocityCommand_Request request;
|
||||
request.mutable_header()->set_device_id("test-agv");
|
||||
request.mutable_velocity()->set_vx(0.1);
|
||||
api::AgvSetVelocityCommand_Feedback response;
|
||||
grpc::ServerContext context;
|
||||
|
||||
const auto status = service_->setVelocity(
|
||||
&context, &request, &response);
|
||||
|
||||
EXPECT_EQ(status.error_code(), grpc::StatusCode::INTERNAL);
|
||||
EXPECT_EQ(agv_->set_velocity_calls_, 1);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest,
|
||||
StopAllGateRejectsMutatingCommandsButAllowsReadsAndStops)
|
||||
{
|
||||
auto& admission = globalStopAllAdmissionGate();
|
||||
const auto ticket = admission.beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
|
||||
api::AgvNavigateToPoseCommand_Request navigation_request;
|
||||
navigation_request.mutable_header()->set_device_id("test-agv");
|
||||
api::AgvNavigateToPoseCommand_Feedback navigation_response;
|
||||
grpc::ServerContext navigation_context;
|
||||
const auto navigation_status = service_->navigateToPose(
|
||||
&navigation_context, &navigation_request, &navigation_response);
|
||||
|
||||
api::AgvSetVelocityCommand_Request velocity_request;
|
||||
velocity_request.mutable_header()->set_device_id("test-agv");
|
||||
velocity_request.mutable_velocity()->set_vx(0.1);
|
||||
api::AgvSetVelocityCommand_Feedback velocity_response;
|
||||
grpc::ServerContext velocity_context;
|
||||
const auto velocity_status = service_->setVelocity(
|
||||
&velocity_context, &velocity_request, &velocity_response);
|
||||
|
||||
api::AgvRuntimeStateCommand_Request state_request;
|
||||
state_request.mutable_header()->set_device_id("test-agv");
|
||||
api::AgvRuntimeStateCommand_Feedback state_response;
|
||||
grpc::ServerContext state_context;
|
||||
const auto state_status = service_->getRuntimeState(
|
||||
&state_context, &state_request, &state_response);
|
||||
|
||||
api::CommandHeader_Request stop_request;
|
||||
stop_request.set_device_id("test-agv");
|
||||
api::CommandHeader_Feedback stop_response;
|
||||
grpc::ServerContext stop_context;
|
||||
const auto stop_status = service_->cancelNavigation(
|
||||
&stop_context, &stop_request, &stop_response);
|
||||
|
||||
EXPECT_EQ(
|
||||
navigation_status.error_code(),
|
||||
grpc::StatusCode::UNAVAILABLE);
|
||||
EXPECT_FALSE(navigation_response.header().success());
|
||||
EXPECT_EQ(agv_->navigate_pose_calls_, 0);
|
||||
EXPECT_EQ(
|
||||
velocity_status.error_code(),
|
||||
grpc::StatusCode::UNAVAILABLE);
|
||||
EXPECT_FALSE(velocity_response.header().success());
|
||||
EXPECT_EQ(agv_->set_velocity_calls_, 0);
|
||||
|
||||
EXPECT_TRUE(state_status.ok()) << state_status.error_message();
|
||||
EXPECT_TRUE(state_response.header().success());
|
||||
EXPECT_TRUE(stop_status.ok()) << stop_status.error_message();
|
||||
EXPECT_TRUE(stop_response.success())
|
||||
<< stop_response.error_message();
|
||||
EXPECT_EQ(agv_->cancel_navigation_calls_, 2);
|
||||
|
||||
EXPECT_TRUE(admission.finishStopAll(ticket, true));
|
||||
const auto resumed_status = service_->navigateToPose(
|
||||
&navigation_context, &navigation_request, &navigation_response);
|
||||
EXPECT_TRUE(resumed_status.ok()) << resumed_status.error_message();
|
||||
EXPECT_TRUE(navigation_response.header().success());
|
||||
EXPECT_EQ(agv_->navigate_pose_calls_, 1);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, QueriesBypassAndSafetyStopsPreemptActionLease)
|
||||
{
|
||||
auto& authority = control::ControlAuthorityManager::instance();
|
||||
const auto action_lease = authority.tryAcquire(
|
||||
"test-agv",
|
||||
"action-sequence:test-action",
|
||||
std::chrono::hours(1));
|
||||
ASSERT_TRUE(action_lease.acquired) << action_lease.detail;
|
||||
|
||||
api::AgvRuntimeStateCommand_Request state_request;
|
||||
state_request.mutable_header()->set_device_id("test-agv");
|
||||
api::AgvRuntimeStateCommand_Feedback state_response;
|
||||
grpc::ServerContext state_context;
|
||||
const auto state_status = service_->getRuntimeState(
|
||||
&state_context,
|
||||
&state_request,
|
||||
&state_response);
|
||||
EXPECT_TRUE(state_status.ok()) << state_status.error_message();
|
||||
EXPECT_TRUE(state_response.header().success());
|
||||
EXPECT_TRUE(authority.validate(action_lease.token));
|
||||
|
||||
api::CommandHeader_Request stop_request;
|
||||
stop_request.set_device_id("test-agv");
|
||||
|
||||
api::CommandHeader_Feedback emergency_response;
|
||||
grpc::ServerContext emergency_context;
|
||||
auto emergency = std::async(
|
||||
std::launch::async,
|
||||
[this, &emergency_context, &stop_request, &emergency_response]() {
|
||||
return service_->emergencyStop(
|
||||
&emergency_context,
|
||||
&stop_request,
|
||||
&emergency_response);
|
||||
});
|
||||
const auto emergency_deadline =
|
||||
std::chrono::steady_clock::now() + std::chrono::seconds(1);
|
||||
while (authority.validate(action_lease.token) &&
|
||||
std::chrono::steady_clock::now() < emergency_deadline) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
EXPECT_FALSE(authority.validate(action_lease.token));
|
||||
authority.release(action_lease.token);
|
||||
const auto emergency_status = emergency.get();
|
||||
EXPECT_TRUE(emergency_status.ok()) << emergency_status.error_message();
|
||||
EXPECT_TRUE(agv_->emergency_stop_barrier_observed_);
|
||||
|
||||
const auto released_lease_after_emergency = authority.tryAcquire(
|
||||
"test-agv",
|
||||
"action-sequence:after-emergency-release",
|
||||
std::chrono::hours(1));
|
||||
ASSERT_TRUE(released_lease_after_emergency.acquired)
|
||||
<< released_lease_after_emergency.detail;
|
||||
|
||||
api::CommandHeader_Feedback cancel_response;
|
||||
grpc::ServerContext cancel_context;
|
||||
auto cancel = std::async(
|
||||
std::launch::async,
|
||||
[this, &cancel_context, &stop_request, &cancel_response]() {
|
||||
return service_->cancelNavigation(
|
||||
&cancel_context,
|
||||
&stop_request,
|
||||
&cancel_response);
|
||||
});
|
||||
const auto cancel_deadline =
|
||||
std::chrono::steady_clock::now() + std::chrono::seconds(1);
|
||||
while (authority.validate(released_lease_after_emergency.token) &&
|
||||
std::chrono::steady_clock::now() < cancel_deadline) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
EXPECT_FALSE(authority.validate(
|
||||
released_lease_after_emergency.token));
|
||||
authority.release(released_lease_after_emergency.token);
|
||||
const auto cancel_status = cancel.get();
|
||||
EXPECT_TRUE(cancel_status.ok()) << cancel_status.error_message();
|
||||
EXPECT_TRUE(agv_->cancel_navigation_barrier_observed_);
|
||||
|
||||
const auto released_lease_after_cancel = authority.tryAcquire(
|
||||
"test-agv",
|
||||
"action-sequence:after-cancel-release",
|
||||
std::chrono::hours(1));
|
||||
ASSERT_TRUE(released_lease_after_cancel.acquired)
|
||||
<< released_lease_after_cancel.detail;
|
||||
|
||||
api::CommandHeader_Feedback velocity_response;
|
||||
grpc::ServerContext velocity_context;
|
||||
auto velocity = std::async(
|
||||
std::launch::async,
|
||||
[this, &velocity_context, &stop_request, &velocity_response]() {
|
||||
return service_->stopVelocityControl(
|
||||
&velocity_context,
|
||||
&stop_request,
|
||||
&velocity_response);
|
||||
});
|
||||
const auto velocity_deadline =
|
||||
std::chrono::steady_clock::now() + std::chrono::seconds(1);
|
||||
while (authority.validate(released_lease_after_cancel.token) &&
|
||||
std::chrono::steady_clock::now() < velocity_deadline) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
EXPECT_FALSE(authority.validate(
|
||||
released_lease_after_cancel.token));
|
||||
authority.release(released_lease_after_cancel.token);
|
||||
const auto velocity_status = velocity.get();
|
||||
EXPECT_TRUE(velocity_status.ok()) << velocity_status.error_message();
|
||||
EXPECT_TRUE(agv_->stop_velocity_barrier_observed_);
|
||||
|
||||
const auto lease_after_stops = authority.tryAcquire(
|
||||
"test-agv",
|
||||
"action-sequence:after-stops",
|
||||
std::chrono::hours(1));
|
||||
ASSERT_TRUE(lease_after_stops.acquired)
|
||||
<< lease_after_stops.detail;
|
||||
|
||||
EXPECT_EQ(agv_->emergency_stop_calls_, 2);
|
||||
EXPECT_EQ(agv_->cancel_navigation_calls_, 2);
|
||||
EXPECT_EQ(agv_->stop_velocity_calls_, 2);
|
||||
EXPECT_EQ(agv_->confirm_stopped_calls_, 3);
|
||||
EXPECT_TRUE(agv_->confirm_stopped_barrier_observed_);
|
||||
|
||||
authority.release(lease_after_stops.token);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest,
|
||||
SafetyStopQuarantinesControlWhenStoppedStateIsUnconfirmed)
|
||||
{
|
||||
agv_->confirm_stopped_result_ = device::AgvResult::failure(
|
||||
device::AgvErrorCode::Timeout,
|
||||
"two zero-velocity samples were not observed");
|
||||
|
||||
api::CommandHeader_Request request;
|
||||
request.set_device_id("test-agv");
|
||||
api::CommandHeader_Feedback response;
|
||||
grpc::ServerContext context;
|
||||
const auto status = service_->cancelNavigation(
|
||||
&context, &request, &response);
|
||||
|
||||
EXPECT_EQ(status.error_code(), grpc::StatusCode::DEADLINE_EXCEEDED);
|
||||
EXPECT_FALSE(response.success());
|
||||
EXPECT_NE(
|
||||
response.error_message().find("confirmed stopped state"),
|
||||
std::string::npos);
|
||||
EXPECT_TRUE(agv_->cancel_navigation_barrier_observed_);
|
||||
EXPECT_TRUE(agv_->confirm_stopped_barrier_observed_);
|
||||
|
||||
const auto lease =
|
||||
control::ControlAuthorityManager::instance().tryAcquire(
|
||||
"test-agv",
|
||||
"normal-control-after-unconfirmed-stop",
|
||||
std::chrono::hours(1));
|
||||
EXPECT_FALSE(lease.acquired);
|
||||
|
||||
auto& authority = control::ControlAuthorityManager::instance();
|
||||
const auto recovery = authority.preemptAcquire(
|
||||
"test-agv", "confirmed-stop-recovery", std::chrono::hours(1));
|
||||
ASSERT_TRUE(recovery.acquired) << recovery.detail;
|
||||
ASSERT_TRUE(authority.waitForPreemptedRelease(
|
||||
recovery.token, std::chrono::milliseconds::zero()));
|
||||
ASSERT_TRUE(authority.recoverRetiredSafetyHolders(recovery.token));
|
||||
authority.release(recovery.token);
|
||||
const auto recovered = authority.tryAcquire(
|
||||
"test-agv", "normal-control-after-recovery", std::chrono::hours(1));
|
||||
EXPECT_TRUE(recovered.acquired) << recovered.detail;
|
||||
authority.release(recovered.token);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, StopMappingFailureReleasesOrdinaryControlLease)
|
||||
{
|
||||
api::CommandHeader_Request request;
|
||||
request.set_device_id("test-agv");
|
||||
api::CommandHeader_Feedback response;
|
||||
grpc::ServerContext context;
|
||||
|
||||
const auto status = service_->stopMapping(
|
||||
&context, &request, &response);
|
||||
|
||||
EXPECT_EQ(status.error_code(), grpc::StatusCode::INTERNAL);
|
||||
EXPECT_FALSE(response.success());
|
||||
auto& authority = control::ControlAuthorityManager::instance();
|
||||
const auto lease = authority.tryAcquire(
|
||||
"test-agv", "normal-control-after-mapping-failure",
|
||||
std::chrono::hours(1));
|
||||
EXPECT_TRUE(lease.acquired) << lease.detail;
|
||||
authority.release(lease.token);
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, NavigateToStationForwardsPgvAdapterParams)
|
||||
{
|
||||
api::AgvNavigateToStationCommand_Request request;
|
||||
request.mutable_header()->set_device_id("test-agv");
|
||||
request.set_station_id("AP1");
|
||||
auto* values = request.mutable_adapter_params()->mutable_values();
|
||||
(*values)["use_pgv"] = "true";
|
||||
(*values)["pgv_adjust_dist"] = "0.3";
|
||||
(*values)["pgv_adjust_cx"] = "-0.3";
|
||||
(*values)["pgv_adjust_cy"] = "0";
|
||||
api::AgvNavigateToStationCommand_Feedback response;
|
||||
grpc::ServerContext context;
|
||||
|
||||
const auto status = service_->navigateToStation(
|
||||
&context,
|
||||
&request,
|
||||
&response);
|
||||
|
||||
ASSERT_TRUE(status.ok()) << status.error_message();
|
||||
EXPECT_TRUE(response.header().success());
|
||||
EXPECT_EQ(agv_->station_id_, "AP1");
|
||||
EXPECT_EQ(
|
||||
agv_->station_adapter_params_.getString("use_pgv").value_or(""),
|
||||
"true");
|
||||
EXPECT_EQ(
|
||||
agv_->station_adapter_params_.getString("pgv_adjust_dist").value_or(""),
|
||||
"0.3");
|
||||
EXPECT_EQ(
|
||||
agv_->station_adapter_params_.getString("pgv_adjust_cx").value_or(""),
|
||||
"-0.3");
|
||||
EXPECT_EQ(
|
||||
agv_->station_adapter_params_.getString("pgv_adjust_cy").value_or(""),
|
||||
"0");
|
||||
}
|
||||
|
||||
TEST_F(GrpcAgvServiceTest, NavigationErrorsMapToGrpcCodesAndPreserveDetails)
|
||||
{
|
||||
struct ErrorCase {
|
||||
device::AgvErrorCode device_code;
|
||||
grpc::StatusCode grpc_code;
|
||||
};
|
||||
const ErrorCase cases[] = {
|
||||
{device::AgvErrorCode::InvalidArgument,
|
||||
grpc::StatusCode::INVALID_ARGUMENT},
|
||||
{device::AgvErrorCode::TaskCanceled,
|
||||
grpc::StatusCode::CANCELLED},
|
||||
{device::AgvErrorCode::Timeout,
|
||||
grpc::StatusCode::DEADLINE_EXCEEDED},
|
||||
};
|
||||
|
||||
for (const auto& test_case : cases) {
|
||||
const std::string detail =
|
||||
"SEER Robokit navigation detail for code="
|
||||
+ std::to_string(static_cast<int>(test_case.device_code));
|
||||
agv_->pose_result_ = device::AgvResult::failure(
|
||||
test_case.device_code,
|
||||
detail);
|
||||
api::AgvNavigateToPoseCommand_Request request;
|
||||
request.mutable_header()->set_device_id("test-agv");
|
||||
api::AgvNavigateToPoseCommand_Feedback response;
|
||||
grpc::ServerContext context;
|
||||
|
||||
const auto status = service_->navigateToPose(
|
||||
&context,
|
||||
&request,
|
||||
&response);
|
||||
|
||||
EXPECT_EQ(status.error_code(), test_case.grpc_code);
|
||||
EXPECT_EQ(status.error_message(), detail);
|
||||
EXPECT_FALSE(response.header().success());
|
||||
EXPECT_EQ(response.header().error_message(), detail);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(AbstractAgvCompatibilityTest, FollowPathOptionsDelegateToLegacyOverride)
|
||||
{
|
||||
LegacyFollowPathAgv legacy;
|
||||
device::AbstractAGV* abstract = &legacy;
|
||||
const std::vector<device::AgvPathSegment> path = {
|
||||
{"station-1", "station-2"},
|
||||
};
|
||||
device::AgvMotionOptions options;
|
||||
|
||||
const auto result = abstract->followPath(path, options);
|
||||
|
||||
ASSERT_TRUE(result.ok()) << result.message;
|
||||
ASSERT_EQ(legacy.path_.size(), 1U);
|
||||
EXPECT_EQ(legacy.path_[0].source_station, "station-1");
|
||||
EXPECT_EQ(legacy.path_[0].target_station, "station-2");
|
||||
}
|
||||
|
||||
TEST(AbstractAgvCompatibilityTest, SynchronousActionSupportDefaultsToFalse)
|
||||
{
|
||||
LegacyFollowPathAgv legacy;
|
||||
|
||||
EXPECT_FALSE(legacy.supportsSynchronousAction(
|
||||
device::AgvActionKind::NavigateToPose));
|
||||
EXPECT_FALSE(legacy.supportsSynchronousAction(
|
||||
device::AgvActionKind::NavigateToStation));
|
||||
EXPECT_FALSE(legacy.supportsSynchronousAction(
|
||||
device::AgvActionKind::FollowPath));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,920 +0,0 @@
|
||||
#include "service/grpc/server/include/grpc_arm_teleop_service.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <cstdio>
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <set>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <grpcpp/grpcpp.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "manager/safety_manager/include/device_safety_endpoint.h"
|
||||
#include "manager/safety_manager/include/safety_manager.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
std::atomic<std::uint64_t> g_socket_sequence{0};
|
||||
|
||||
arm_teleop::RobotManifest makeManifest()
|
||||
{
|
||||
arm_teleop::RobotManifest manifest;
|
||||
manifest.set_robot_id("fake_humanoid_arm");
|
||||
manifest.set_model_sha256(std::string(64, 'a'));
|
||||
manifest.set_calibration_sha256(std::string(64, 'b'));
|
||||
manifest.add_joint_names("shoulder_joint");
|
||||
manifest.add_joint_names("elbow_joint");
|
||||
manifest.set_position_unit("rad");
|
||||
manifest.set_velocity_unit("rad/s");
|
||||
manifest.set_effort_unit("N*m");
|
||||
manifest.set_base_frame("base_link");
|
||||
manifest.set_tool_frame("tool_link");
|
||||
return manifest;
|
||||
}
|
||||
|
||||
arm_teleop::ClientFrame makeOpenFrame(
|
||||
const arm_teleop::RobotManifest& manifest,
|
||||
const std::uint32_t watchdog_ms = 100,
|
||||
const std::uint32_t lease_ms = 2000,
|
||||
const bool request_force_feedback = false)
|
||||
{
|
||||
arm_teleop::ClientFrame frame;
|
||||
auto* open = frame.mutable_open();
|
||||
open->set_protocol_major(1);
|
||||
open->set_protocol_minor(0);
|
||||
open->set_client_instance_id("test-client");
|
||||
*open->mutable_expected_robot() = manifest;
|
||||
open->set_requested_command_rate_hz(200);
|
||||
open->set_requested_state_rate_hz(100);
|
||||
open->set_watchdog_timeout_ms(watchdog_ms);
|
||||
open->set_requested_lease_ms(lease_ms);
|
||||
open->set_request_force_feedback(request_force_feedback);
|
||||
return frame;
|
||||
}
|
||||
|
||||
arm_teleop::ClientFrame makeSetpoint(
|
||||
const std::uint64_t sequence,
|
||||
const std::uint32_t valid_for_us = 50000)
|
||||
{
|
||||
arm_teleop::ClientFrame frame;
|
||||
auto* setpoint = frame.mutable_setpoint();
|
||||
setpoint->set_sequence(sequence);
|
||||
setpoint->add_position_rad(0.1 * static_cast<double>(sequence));
|
||||
setpoint->add_position_rad(0.2 * static_cast<double>(sequence));
|
||||
setpoint->add_velocity_rad_s(0.01);
|
||||
setpoint->add_velocity_rad_s(0.02);
|
||||
setpoint->set_valid_for_us(valid_for_us);
|
||||
return frame;
|
||||
}
|
||||
|
||||
arm_teleop::ClientFrame makeHeartbeat(const std::uint64_t sequence)
|
||||
{
|
||||
arm_teleop::ClientFrame frame;
|
||||
frame.mutable_heartbeat()->set_sequence(sequence);
|
||||
return frame;
|
||||
}
|
||||
|
||||
arm_teleop::ClientFrame makeStop(
|
||||
const arm_teleop::StopReason reason =
|
||||
arm_teleop::STOP_REASON_OPERATOR_REQUEST)
|
||||
{
|
||||
arm_teleop::ClientFrame frame;
|
||||
frame.mutable_stop()->set_reason(reason);
|
||||
frame.mutable_stop()->set_detail("test stop");
|
||||
return frame;
|
||||
}
|
||||
|
||||
class FakeArmTeleopBackend final : public ArmTeleopBackend {
|
||||
public:
|
||||
explicit FakeArmTeleopBackend(
|
||||
arm_teleop::RobotManifest manifest = makeManifest())
|
||||
: manifest_(std::move(manifest))
|
||||
{
|
||||
}
|
||||
|
||||
bool available() const noexcept override { return true; }
|
||||
|
||||
arm_teleop::RobotManifest manifest() const override
|
||||
{
|
||||
recordThread();
|
||||
return manifest_;
|
||||
}
|
||||
|
||||
bool supportsForceFeedback() const noexcept override { return true; }
|
||||
|
||||
ArmTeleopBackendResult open(
|
||||
const arm_teleop::OpenSession&) override
|
||||
{
|
||||
recordThread();
|
||||
std::lock_guard lock(mutex_);
|
||||
++open_calls_;
|
||||
return open_result_;
|
||||
}
|
||||
|
||||
ArmTeleopBackendResult applySetpoint(
|
||||
const arm_teleop::JointSetpoint& setpoint,
|
||||
const std::chrono::steady_clock::time_point deadline) override
|
||||
{
|
||||
if (std::chrono::steady_clock::now() >= deadline) {
|
||||
return ArmTeleopBackendResult::failure(
|
||||
grpc::StatusCode::DEADLINE_EXCEEDED,
|
||||
"fake backend received an expired setpoint");
|
||||
}
|
||||
recordThread();
|
||||
std::unique_lock lock(mutex_);
|
||||
apply_entered_ = true;
|
||||
apply_entered_sequence_ = setpoint.sequence();
|
||||
cv_.notify_all();
|
||||
cv_.wait(lock, [&]() { return !block_apply_; });
|
||||
applied_sequences_.push_back(setpoint.sequence());
|
||||
return apply_result_;
|
||||
}
|
||||
|
||||
ArmTeleopBackendResult stop(
|
||||
const arm_teleop::StopReason reason,
|
||||
const std::string&) override
|
||||
{
|
||||
recordThread();
|
||||
std::lock_guard lock(mutex_);
|
||||
stop_reasons_.push_back(reason);
|
||||
return stop_result_;
|
||||
}
|
||||
|
||||
ArmTeleopBackendSnapshot snapshot() const override
|
||||
{
|
||||
recordThread();
|
||||
std::lock_guard lock(mutex_);
|
||||
ArmTeleopBackendSnapshot snapshot;
|
||||
auto* state = &snapshot.joint_state;
|
||||
state->set_sample_sequence(++sample_sequence_);
|
||||
state->add_position_rad(0.1);
|
||||
state->add_position_rad(0.2);
|
||||
state->add_velocity_rad_s(0.01);
|
||||
state->add_velocity_rad_s(0.02);
|
||||
state->add_effort_nm(1.0);
|
||||
state->add_effort_nm(2.0);
|
||||
state->set_position_valid(true);
|
||||
state->set_velocity_valid(true);
|
||||
state->set_effort_valid(true);
|
||||
state->set_effort_source(
|
||||
arm_teleop::EFFORT_SOURCE_JOINT_SENSOR);
|
||||
snapshot.safety.set_connected(true);
|
||||
snapshot.safety.set_powered_on(true);
|
||||
return snapshot;
|
||||
}
|
||||
|
||||
void blockApply()
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_apply_ = true;
|
||||
apply_entered_ = false;
|
||||
apply_entered_sequence_ = 0;
|
||||
}
|
||||
|
||||
void releaseApply()
|
||||
{
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_apply_ = false;
|
||||
}
|
||||
cv_.notify_all();
|
||||
}
|
||||
|
||||
bool waitForApply(
|
||||
const std::uint64_t sequence,
|
||||
const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return cv_.wait_for(lock, timeout, [&]() {
|
||||
return apply_entered_ &&
|
||||
apply_entered_sequence_ == sequence;
|
||||
});
|
||||
}
|
||||
|
||||
int openCalls() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return open_calls_;
|
||||
}
|
||||
|
||||
std::vector<std::uint64_t> appliedSequences() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return applied_sequences_;
|
||||
}
|
||||
|
||||
std::vector<arm_teleop::StopReason> stopReasons() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return stop_reasons_;
|
||||
}
|
||||
|
||||
std::size_t backendThreadCount() const
|
||||
{
|
||||
std::lock_guard lock(thread_mutex_);
|
||||
return backend_threads_.size();
|
||||
}
|
||||
|
||||
private:
|
||||
void recordThread() const
|
||||
{
|
||||
std::lock_guard lock(thread_mutex_);
|
||||
backend_threads_.insert(std::this_thread::get_id());
|
||||
}
|
||||
|
||||
arm_teleop::RobotManifest manifest_;
|
||||
mutable std::mutex mutex_;
|
||||
mutable std::condition_variable cv_;
|
||||
bool block_apply_{false};
|
||||
bool apply_entered_{false};
|
||||
std::uint64_t apply_entered_sequence_{0};
|
||||
int open_calls_{0};
|
||||
std::vector<std::uint64_t> applied_sequences_;
|
||||
std::vector<arm_teleop::StopReason> stop_reasons_;
|
||||
mutable std::uint64_t sample_sequence_{0};
|
||||
ArmTeleopBackendResult open_result_{
|
||||
ArmTeleopBackendResult::ok()};
|
||||
ArmTeleopBackendResult apply_result_{
|
||||
ArmTeleopBackendResult::ok()};
|
||||
ArmTeleopBackendResult stop_result_{
|
||||
ArmTeleopBackendResult::ok()};
|
||||
|
||||
mutable std::mutex thread_mutex_;
|
||||
mutable std::set<std::thread::id> backend_threads_;
|
||||
};
|
||||
|
||||
class FakeTeleopSafetyEndpoint final
|
||||
: public safety::DeviceSafetyEndpoint {
|
||||
public:
|
||||
FakeTeleopSafetyEndpoint()
|
||||
{
|
||||
descriptor_.device_id = makeManifest().robot_id();
|
||||
descriptor_.kind = device::DeviceKind::Arm;
|
||||
descriptor_.default_policy =
|
||||
safety::SafetyPolicyFamily::Control;
|
||||
descriptor_.maximum_snapshot_age = 1s;
|
||||
descriptor_.supports_active_refresh = true;
|
||||
}
|
||||
|
||||
safety::DeviceSafetyDescriptor descriptor() const override
|
||||
{
|
||||
return descriptor_;
|
||||
}
|
||||
|
||||
void bindPublisher(
|
||||
safety::SafetySnapshotPublisher publisher) override
|
||||
{
|
||||
publisher_ = std::move(publisher);
|
||||
}
|
||||
|
||||
void requestSafetyRefresh() noexcept override
|
||||
{
|
||||
if (!publisher_) {
|
||||
return;
|
||||
}
|
||||
safety::DeviceSafetySnapshot snapshot;
|
||||
snapshot.device_id = descriptor_.device_id;
|
||||
snapshot.condition = safety::SafetyCondition::Nominal;
|
||||
snapshot.device_generation = generation_;
|
||||
snapshot.sample_sequence = ++sequence_;
|
||||
snapshot.observed_at = safety::SafetyClock::now();
|
||||
snapshot.connected = safety::TriState::True;
|
||||
snapshot.operational_ready = safety::TriState::True;
|
||||
snapshot.quiescent = safety::TriState::True;
|
||||
snapshot.motion_active = safety::TriState::False;
|
||||
snapshot.actuator_enabled = safety::TriState::True;
|
||||
snapshot.emergency_stop_active = safety::TriState::False;
|
||||
snapshot.protective_stop_active = safety::TriState::False;
|
||||
snapshot.fault_active = safety::TriState::False;
|
||||
(void)publisher_(std::move(snapshot));
|
||||
}
|
||||
|
||||
void onDeviceGenerationChanged(
|
||||
const std::uint64_t generation) noexcept override
|
||||
{
|
||||
generation_ = generation;
|
||||
requestSafetyRefresh();
|
||||
}
|
||||
|
||||
safety::HardwareCheckResult validateBeforeDispatch(
|
||||
const safety::AdmissionPermit&) override
|
||||
{
|
||||
++hardware_checks_;
|
||||
return {true, safety::SafetyReason::None, {}};
|
||||
}
|
||||
|
||||
safety::RecoveryCheckResult reconcileAdmissionState(
|
||||
const safety::RecoveryContext&) override
|
||||
{
|
||||
return {true, safety::SafetyReason::None, {}};
|
||||
}
|
||||
|
||||
int hardwareChecks() const noexcept
|
||||
{
|
||||
return hardware_checks_.load();
|
||||
}
|
||||
|
||||
private:
|
||||
safety::DeviceSafetyDescriptor descriptor_;
|
||||
safety::SafetySnapshotPublisher publisher_;
|
||||
std::uint64_t generation_{1};
|
||||
std::uint64_t sequence_{0};
|
||||
std::atomic<int> hardware_checks_{0};
|
||||
};
|
||||
|
||||
class TeleopServerHarness final {
|
||||
public:
|
||||
explicit TeleopServerHarness(
|
||||
std::shared_ptr<ArmTeleopBackend> backend,
|
||||
safety::SafetyManager* safety_manager = nullptr)
|
||||
: service_(
|
||||
std::move(backend), nullptr, nullptr,
|
||||
safety_manager)
|
||||
{
|
||||
socket_path_ =
|
||||
"/tmp/cmvr_arm_teleop_service_test_" +
|
||||
std::to_string(static_cast<long long>(::getpid())) + "_" +
|
||||
std::to_string(
|
||||
g_socket_sequence.fetch_add(
|
||||
1, std::memory_order_relaxed)) +
|
||||
".sock";
|
||||
std::remove(socket_path_.c_str());
|
||||
const std::string address = "unix:" + socket_path_;
|
||||
|
||||
grpc::ServerBuilder builder;
|
||||
builder.AddListeningPort(
|
||||
address, grpc::InsecureServerCredentials());
|
||||
builder.RegisterService(&service_);
|
||||
server_ = builder.BuildAndStart();
|
||||
if (!server_) {
|
||||
throw std::runtime_error(
|
||||
"failed to start in-process arm teleoperation server");
|
||||
}
|
||||
channel_ = grpc::CreateChannel(
|
||||
address, grpc::InsecureChannelCredentials());
|
||||
if (!channel_->WaitForConnected(
|
||||
std::chrono::system_clock::now() + 2s)) {
|
||||
throw std::runtime_error(
|
||||
"failed to connect arm teleoperation test channel");
|
||||
}
|
||||
stub_ = arm_teleop::ArmTeleopService::NewStub(channel_);
|
||||
}
|
||||
|
||||
~TeleopServerHarness()
|
||||
{
|
||||
if (server_) {
|
||||
server_->Shutdown();
|
||||
server_->Wait();
|
||||
}
|
||||
if (!socket_path_.empty()) {
|
||||
std::remove(socket_path_.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
arm_teleop::ArmTeleopService::Stub& stub() { return *stub_; }
|
||||
|
||||
private:
|
||||
ArmTeleopServiceImpl service_;
|
||||
std::unique_ptr<grpc::Server> server_;
|
||||
std::shared_ptr<grpc::Channel> channel_;
|
||||
std::unique_ptr<arm_teleop::ArmTeleopService::Stub> stub_;
|
||||
std::string socket_path_;
|
||||
};
|
||||
|
||||
template <typename Stream>
|
||||
void expectOpeningFrames(Stream& stream)
|
||||
{
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(stream.Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_OPENED);
|
||||
EXPECT_FALSE(response.status().session_id().empty());
|
||||
ASSERT_TRUE(stream.Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_READY);
|
||||
EXPECT_TRUE(response.safety().connected());
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest, ProductionDisabledBackendRejectsOpen)
|
||||
{
|
||||
TeleopServerHarness harness(makeDisabledArmTeleopBackend());
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 2s);
|
||||
auto stream = harness.stub().Teleoperate(&context);
|
||||
|
||||
ASSERT_TRUE(stream->Write(makeOpenFrame(makeManifest())));
|
||||
ASSERT_TRUE(stream->WritesDone());
|
||||
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_REJECTED);
|
||||
EXPECT_TRUE(response.safety().fault());
|
||||
const grpc::Status status = stream->Finish();
|
||||
EXPECT_EQ(
|
||||
status.error_code(),
|
||||
grpc::StatusCode::FAILED_PRECONDITION);
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest, RequiresOpenAsFirstFrame)
|
||||
{
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend);
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 2s);
|
||||
auto stream = harness.stub().Teleoperate(&context);
|
||||
|
||||
ASSERT_TRUE(stream->Write(makeSetpoint(1)));
|
||||
ASSERT_TRUE(stream->WritesDone());
|
||||
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_REJECTED);
|
||||
const grpc::Status status = stream->Finish();
|
||||
EXPECT_EQ(
|
||||
status.error_code(),
|
||||
grpc::StatusCode::INVALID_ARGUMENT);
|
||||
EXPECT_EQ(backend->openCalls(), 0);
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest, RejectsManifestMismatchBeforeBackendOpen)
|
||||
{
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend);
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 2s);
|
||||
auto stream = harness.stub().Teleoperate(&context);
|
||||
|
||||
auto mismatched = makeManifest();
|
||||
mismatched.set_calibration_sha256(std::string(64, 'c'));
|
||||
ASSERT_TRUE(stream->Write(makeOpenFrame(mismatched)));
|
||||
ASSERT_TRUE(stream->WritesDone());
|
||||
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_REJECTED);
|
||||
const grpc::Status status = stream->Finish();
|
||||
EXPECT_EQ(
|
||||
status.error_code(),
|
||||
grpc::StatusCode::FAILED_PRECONDITION);
|
||||
EXPECT_EQ(backend->openCalls(), 0);
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest, RejectsNonIncreasingSequenceAndStops)
|
||||
{
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend);
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 2s);
|
||||
auto stream = harness.stub().Teleoperate(&context);
|
||||
|
||||
ASSERT_TRUE(stream->Write(makeOpenFrame(makeManifest())));
|
||||
expectOpeningFrames(*stream);
|
||||
ASSERT_TRUE(stream->Write(makeSetpoint(1)));
|
||||
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_ACTIVE);
|
||||
EXPECT_EQ(response.status().applied_sequence(), 1U);
|
||||
|
||||
ASSERT_TRUE(stream->Write(makeHeartbeat(1)));
|
||||
ASSERT_TRUE(stream->WritesDone());
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_REJECTED);
|
||||
EXPECT_EQ(
|
||||
response.status().stop_reason(),
|
||||
arm_teleop::STOP_REASON_PROTOCOL_ERROR);
|
||||
|
||||
const grpc::Status status = stream->Finish();
|
||||
EXPECT_EQ(
|
||||
status.error_code(),
|
||||
grpc::StatusCode::INVALID_ARGUMENT);
|
||||
ASSERT_FALSE(backend->stopReasons().empty());
|
||||
EXPECT_EQ(
|
||||
backend->stopReasons().back(),
|
||||
arm_teleop::STOP_REASON_PROTOCOL_ERROR);
|
||||
EXPECT_EQ(backend->backendThreadCount(), 1U);
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest, ProtocolErrorCancelsReaderWithoutClientHalfClose)
|
||||
{
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend);
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 2s);
|
||||
auto stream = harness.stub().Teleoperate(&context);
|
||||
|
||||
ASSERT_TRUE(stream->Write(makeOpenFrame(makeManifest())));
|
||||
expectOpeningFrames(*stream);
|
||||
ASSERT_TRUE(stream->Write(makeHeartbeat(1)));
|
||||
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_READY);
|
||||
|
||||
// Deliberately keep the client write half open after the duplicate
|
||||
// sequence. The server must cancel its reader and return promptly.
|
||||
ASSERT_TRUE(stream->Write(makeHeartbeat(1)));
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_REJECTED);
|
||||
EXPECT_EQ(
|
||||
response.status().stop_reason(),
|
||||
arm_teleop::STOP_REASON_PROTOCOL_ERROR);
|
||||
const auto status = stream->Finish();
|
||||
// TryCancel is required to interrupt the server reader's blocking Read
|
||||
// when the peer deliberately keeps its write half open. Depending on
|
||||
// gRPC completion ordering, the client may therefore observe CANCELLED
|
||||
// after it has already received the explicit protocol-error frame.
|
||||
EXPECT_TRUE(
|
||||
status.error_code() == grpc::StatusCode::INVALID_ARGUMENT ||
|
||||
status.error_code() == grpc::StatusCode::CANCELLED)
|
||||
<< status.error_message();
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest, WatchdogExpiresWithoutValidClientActivity)
|
||||
{
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend);
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 2s);
|
||||
auto stream = harness.stub().Teleoperate(&context);
|
||||
|
||||
ASSERT_TRUE(stream->Write(
|
||||
makeOpenFrame(makeManifest(), 20, 2000)));
|
||||
expectOpeningFrames(*stream);
|
||||
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_WATCHDOG_EXPIRED);
|
||||
EXPECT_EQ(
|
||||
response.status().stop_reason(),
|
||||
arm_teleop::STOP_REASON_WATCHDOG);
|
||||
|
||||
const grpc::Status status = stream->Finish();
|
||||
EXPECT_TRUE(
|
||||
status.error_code() == grpc::StatusCode::DEADLINE_EXCEEDED ||
|
||||
status.error_code() == grpc::StatusCode::CANCELLED)
|
||||
<< status.error_message();
|
||||
ASSERT_FALSE(backend->stopReasons().empty());
|
||||
EXPECT_EQ(
|
||||
backend->stopReasons().back(),
|
||||
arm_teleop::STOP_REASON_WATCHDOG);
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest, ValidHeartbeatsRenewControlLease)
|
||||
{
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend);
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 3s);
|
||||
auto stream = harness.stub().Teleoperate(&context);
|
||||
|
||||
ASSERT_TRUE(stream->Write(
|
||||
makeOpenFrame(makeManifest(), 100, 200)));
|
||||
expectOpeningFrames(*stream);
|
||||
|
||||
arm_teleop::ServerFrame response;
|
||||
for (std::uint64_t sequence = 1; sequence <= 7; ++sequence) {
|
||||
std::this_thread::sleep_for(40ms);
|
||||
ASSERT_TRUE(stream->Write(makeHeartbeat(sequence)));
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_READY);
|
||||
EXPECT_EQ(
|
||||
response.status().received_sequence(),
|
||||
sequence);
|
||||
EXPECT_GT(response.status().lease_remaining_ms(), 0U);
|
||||
}
|
||||
|
||||
ASSERT_TRUE(stream->Write(makeStop()));
|
||||
ASSERT_TRUE(stream->WritesDone());
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_STOPPED);
|
||||
EXPECT_TRUE(stream->Finish().ok());
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest, RejectsSecondControllerWhileLeaseIsActive)
|
||||
{
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend);
|
||||
|
||||
grpc::ClientContext first_context;
|
||||
first_context.set_deadline(
|
||||
std::chrono::system_clock::now() + 3s);
|
||||
auto first_stream =
|
||||
harness.stub().Teleoperate(&first_context);
|
||||
ASSERT_TRUE(first_stream->Write(
|
||||
makeOpenFrame(makeManifest(), 500, 2000)));
|
||||
expectOpeningFrames(*first_stream);
|
||||
|
||||
grpc::ClientContext second_context;
|
||||
second_context.set_deadline(
|
||||
std::chrono::system_clock::now() + 2s);
|
||||
auto second_stream =
|
||||
harness.stub().Teleoperate(&second_context);
|
||||
ASSERT_TRUE(second_stream->Write(
|
||||
makeOpenFrame(makeManifest(), 500, 2000)));
|
||||
ASSERT_TRUE(second_stream->WritesDone());
|
||||
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(second_stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_REJECTED);
|
||||
const grpc::Status second_status =
|
||||
second_stream->Finish();
|
||||
EXPECT_EQ(
|
||||
second_status.error_code(),
|
||||
grpc::StatusCode::RESOURCE_EXHAUSTED);
|
||||
|
||||
ASSERT_TRUE(first_stream->Write(makeStop()));
|
||||
ASSERT_TRUE(first_stream->WritesDone());
|
||||
ASSERT_TRUE(first_stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_STOPPED);
|
||||
EXPECT_TRUE(first_stream->Finish().ok());
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest, LatestOnlySlotDropsIntermediateSetpoints)
|
||||
{
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend);
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 3s);
|
||||
auto stream = harness.stub().Teleoperate(&context);
|
||||
|
||||
ASSERT_TRUE(stream->Write(
|
||||
makeOpenFrame(makeManifest(), 500, 2000)));
|
||||
expectOpeningFrames(*stream);
|
||||
|
||||
backend->blockApply();
|
||||
ASSERT_TRUE(stream->Write(makeSetpoint(1, 400000)));
|
||||
ASSERT_TRUE(backend->waitForApply(1, 1s));
|
||||
ASSERT_TRUE(stream->Write(makeSetpoint(2, 400000)));
|
||||
ASSERT_TRUE(stream->Write(makeSetpoint(3, 400000)));
|
||||
ASSERT_TRUE(stream->Write(makeSetpoint(4, 400000)));
|
||||
std::this_thread::sleep_for(30ms);
|
||||
backend->releaseApply();
|
||||
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(response.status().applied_sequence(), 1U);
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(response.status().applied_sequence(), 4U);
|
||||
EXPECT_GE(response.status().dropped_setpoints(), 2U);
|
||||
|
||||
ASSERT_TRUE(stream->Write(makeStop()));
|
||||
ASSERT_TRUE(stream->WritesDone());
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_STOPPED);
|
||||
EXPECT_TRUE(stream->Finish().ok());
|
||||
|
||||
const auto applied = backend->appliedSequences();
|
||||
ASSERT_EQ(applied.size(), 2U);
|
||||
EXPECT_EQ(applied[0], 1U);
|
||||
EXPECT_EQ(applied[1], 4U);
|
||||
EXPECT_EQ(backend->backendThreadCount(), 1U);
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest, ExpiredSetpointIsNeverDispatched)
|
||||
{
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend);
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 3s);
|
||||
auto stream = harness.stub().Teleoperate(&context);
|
||||
|
||||
ASSERT_TRUE(stream->Write(
|
||||
makeOpenFrame(makeManifest(), 500, 2000)));
|
||||
expectOpeningFrames(*stream);
|
||||
|
||||
backend->blockApply();
|
||||
ASSERT_TRUE(stream->Write(makeSetpoint(1, 400000)));
|
||||
ASSERT_TRUE(backend->waitForApply(1, 1s));
|
||||
ASSERT_TRUE(stream->Write(makeSetpoint(2, 1000)));
|
||||
std::this_thread::sleep_for(30ms);
|
||||
backend->releaseApply();
|
||||
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(response.status().applied_sequence(), 1U);
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_HOLDING);
|
||||
EXPECT_EQ(response.status().received_sequence(), 2U);
|
||||
EXPECT_EQ(response.status().applied_sequence(), 1U);
|
||||
EXPECT_EQ(response.status().rejected_setpoints(), 1U);
|
||||
|
||||
ASSERT_TRUE(stream->Write(makeStop()));
|
||||
ASSERT_TRUE(stream->WritesDone());
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_STOPPED);
|
||||
EXPECT_TRUE(stream->Finish().ok());
|
||||
|
||||
const auto applied = backend->appliedSequences();
|
||||
ASSERT_EQ(applied.size(), 1U);
|
||||
EXPECT_EQ(applied.front(), 1U);
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest,
|
||||
StopAllFencesDispatchRejectsAdmissionAndAllowsReuse)
|
||||
{
|
||||
auto& authority = control::ControlAuthorityManager::instance();
|
||||
auto& admission = globalStopAllAdmissionGate();
|
||||
authority.clear();
|
||||
admission.clearForTesting();
|
||||
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend);
|
||||
grpc::ClientContext active_context;
|
||||
active_context.set_deadline(
|
||||
std::chrono::system_clock::now() + 3s);
|
||||
auto active_stream = harness.stub().Teleoperate(&active_context);
|
||||
|
||||
ASSERT_TRUE(active_stream->Write(
|
||||
makeOpenFrame(makeManifest(), 500, 2000)));
|
||||
expectOpeningFrames(*active_stream);
|
||||
|
||||
backend->blockApply();
|
||||
ASSERT_TRUE(active_stream->Write(makeSetpoint(1, 400000)));
|
||||
ASSERT_TRUE(backend->waitForApply(1, 1s));
|
||||
|
||||
const auto stop_all_ticket = admission.beginStopAll();
|
||||
ASSERT_TRUE(stop_all_ticket.valid());
|
||||
|
||||
grpc::ClientContext blocked_context;
|
||||
blocked_context.set_deadline(
|
||||
std::chrono::system_clock::now() + 2s);
|
||||
auto blocked_stream = harness.stub().Teleoperate(&blocked_context);
|
||||
ASSERT_TRUE(blocked_stream->Write(makeOpenFrame(makeManifest())));
|
||||
ASSERT_TRUE(blocked_stream->WritesDone());
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(blocked_stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_REJECTED);
|
||||
const auto blocked_status = blocked_stream->Finish();
|
||||
EXPECT_EQ(
|
||||
blocked_status.error_code(), grpc::StatusCode::UNAVAILABLE);
|
||||
EXPECT_EQ(backend->openCalls(), 1);
|
||||
|
||||
const auto safety_lease = authority.preemptAcquire(
|
||||
makeManifest().robot_id(), "stop-all-test",
|
||||
std::chrono::hours(1));
|
||||
ASSERT_TRUE(safety_lease.acquired) << safety_lease.detail;
|
||||
const auto safety_token = safety_lease.token;
|
||||
auto dispatch_fence = std::async(
|
||||
std::launch::async,
|
||||
[&authority, safety_token] {
|
||||
return authority.waitForPreemptedRelease(safety_token, 1s);
|
||||
});
|
||||
|
||||
EXPECT_EQ(
|
||||
dispatch_fence.wait_for(50ms), std::future_status::timeout);
|
||||
backend->releaseApply();
|
||||
ASSERT_EQ(
|
||||
dispatch_fence.wait_for(1s), std::future_status::ready);
|
||||
EXPECT_TRUE(dispatch_fence.get());
|
||||
|
||||
ASSERT_TRUE(active_stream->Read(&response));
|
||||
EXPECT_EQ(response.status().applied_sequence(), 1U);
|
||||
ASSERT_TRUE(active_stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_LEASE_LOST);
|
||||
EXPECT_EQ(
|
||||
response.status().stop_reason(),
|
||||
arm_teleop::STOP_REASON_LEASE_REVOKED);
|
||||
const auto active_status = active_stream->Finish();
|
||||
EXPECT_TRUE(
|
||||
active_status.error_code() == grpc::StatusCode::ABORTED ||
|
||||
active_status.error_code() == grpc::StatusCode::CANCELLED)
|
||||
<< active_status.error_message();
|
||||
|
||||
const auto applied = backend->appliedSequences();
|
||||
ASSERT_EQ(applied.size(), 1U);
|
||||
EXPECT_EQ(applied.front(), 1U);
|
||||
const auto stopped = backend->stopReasons();
|
||||
ASSERT_FALSE(stopped.empty());
|
||||
EXPECT_EQ(
|
||||
stopped.back(), arm_teleop::STOP_REASON_LEASE_REVOKED);
|
||||
|
||||
authority.release(safety_token);
|
||||
ASSERT_TRUE(admission.finishStopAll(stop_all_ticket, true));
|
||||
|
||||
grpc::ClientContext resumed_context;
|
||||
resumed_context.set_deadline(
|
||||
std::chrono::system_clock::now() + 2s);
|
||||
auto resumed_stream = harness.stub().Teleoperate(&resumed_context);
|
||||
ASSERT_TRUE(resumed_stream->Write(makeOpenFrame(makeManifest())));
|
||||
expectOpeningFrames(*resumed_stream);
|
||||
ASSERT_TRUE(resumed_stream->Write(makeStop()));
|
||||
ASSERT_TRUE(resumed_stream->WritesDone());
|
||||
ASSERT_TRUE(resumed_stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_STOPPED);
|
||||
EXPECT_TRUE(resumed_stream->Finish().ok());
|
||||
EXPECT_EQ(backend->openCalls(), 2);
|
||||
|
||||
authority.clear();
|
||||
admission.clearForTesting();
|
||||
}
|
||||
|
||||
TEST(ArmTeleopServiceTest,
|
||||
CoordinatorInvalidationStopsExistingSessionBeforeAnotherSetpoint)
|
||||
{
|
||||
safety::SafetyManagerConfig config;
|
||||
config.enforcement_mode = safety::EnforcementMode::EnforceAll;
|
||||
safety::SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeTeleopSafetyEndpoint>();
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{endpoint->descriptor(), endpoint, {}}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
makeManifest().robot_id(),
|
||||
device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
auto backend = std::make_shared<FakeArmTeleopBackend>();
|
||||
TeleopServerHarness harness(backend, &coordinator);
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 2s);
|
||||
auto stream = harness.stub().Teleoperate(&context);
|
||||
|
||||
ASSERT_TRUE(stream->Write(makeOpenFrame(makeManifest(), 500, 1500)));
|
||||
expectOpeningFrames(*stream);
|
||||
EXPECT_EQ(endpoint->hardwareChecks(), 1);
|
||||
|
||||
ASSERT_TRUE(stream->Write(makeSetpoint(1)));
|
||||
arm_teleop::ServerFrame response;
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(response.status().phase(), arm_teleop::SESSION_PHASE_ACTIVE);
|
||||
EXPECT_EQ(response.status().applied_sequence(), 1U);
|
||||
EXPECT_EQ(endpoint->hardwareChecks(), 2);
|
||||
|
||||
coordinator.quarantineDevice(
|
||||
makeManifest().robot_id(),
|
||||
safety::SafetyReason::OutcomeUnknown,
|
||||
"test-quarantine");
|
||||
|
||||
ASSERT_TRUE(stream->Read(&response));
|
||||
EXPECT_EQ(
|
||||
response.status().phase(),
|
||||
arm_teleop::SESSION_PHASE_LEASE_LOST);
|
||||
EXPECT_EQ(
|
||||
response.status().stop_reason(),
|
||||
arm_teleop::STOP_REASON_EMERGENCY_STOP);
|
||||
const auto status = stream->Finish();
|
||||
EXPECT_TRUE(
|
||||
status.error_code() == grpc::StatusCode::FAILED_PRECONDITION ||
|
||||
status.error_code() == grpc::StatusCode::CANCELLED)
|
||||
<< status.error_message();
|
||||
EXPECT_EQ(backend->appliedSequences(),
|
||||
(std::vector<std::uint64_t>{1U}));
|
||||
ASSERT_FALSE(backend->stopReasons().empty());
|
||||
EXPECT_EQ(
|
||||
backend->stopReasons().back(),
|
||||
arm_teleop::STOP_REASON_EMERGENCY_STOP);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,454 +0,0 @@
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <memory>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "cmvr/api/arm_command.pb.h"
|
||||
#include "manager/safety_manager/include/device_safety_endpoint.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
class FakeEndpoint final : public safety::DeviceSafetyEndpoint {
|
||||
public:
|
||||
explicit FakeEndpoint(std::string device_id)
|
||||
{
|
||||
descriptor_.device_id = std::move(device_id);
|
||||
descriptor_.kind = device::DeviceKind::Arm;
|
||||
descriptor_.default_policy = safety::SafetyPolicyFamily::Control;
|
||||
descriptor_.maximum_snapshot_age = std::chrono::seconds(1);
|
||||
descriptor_.supports_active_refresh = true;
|
||||
}
|
||||
|
||||
safety::DeviceSafetyDescriptor descriptor() const override
|
||||
{
|
||||
return descriptor_;
|
||||
}
|
||||
|
||||
void bindPublisher(safety::SafetySnapshotPublisher publisher) override
|
||||
{
|
||||
publisher_ = std::move(publisher);
|
||||
}
|
||||
|
||||
void requestSafetyRefresh() noexcept override
|
||||
{
|
||||
if (!publisher_) {
|
||||
return;
|
||||
}
|
||||
safety::DeviceSafetySnapshot snapshot;
|
||||
snapshot.device_id = descriptor_.device_id;
|
||||
snapshot.condition = safety::SafetyCondition::Nominal;
|
||||
snapshot.device_generation = 1;
|
||||
snapshot.sample_sequence = ++sequence_;
|
||||
snapshot.observed_at = safety::SafetyClock::now();
|
||||
snapshot.connected = safety::TriState::True;
|
||||
snapshot.operational_ready = safety::TriState::True;
|
||||
snapshot.quiescent = safety::TriState::True;
|
||||
snapshot.motion_active = safety::TriState::False;
|
||||
snapshot.actuator_enabled = safety::TriState::True;
|
||||
snapshot.emergency_stop_active = safety::TriState::False;
|
||||
snapshot.protective_stop_active = safety::TriState::False;
|
||||
snapshot.fault_active = safety::TriState::False;
|
||||
(void)publisher_(std::move(snapshot));
|
||||
}
|
||||
|
||||
safety::HardwareCheckResult validateBeforeDispatch(
|
||||
const safety::AdmissionPermit&) override
|
||||
{
|
||||
++hardware_checks;
|
||||
return final_check;
|
||||
}
|
||||
|
||||
safety::RecoveryCheckResult reconcileAdmissionState(
|
||||
const safety::RecoveryContext&) override
|
||||
{
|
||||
return {true, safety::SafetyReason::None, {}};
|
||||
}
|
||||
|
||||
safety::DeviceSafetyDescriptor descriptor_;
|
||||
safety::SafetySnapshotPublisher publisher_;
|
||||
safety::HardwareCheckResult final_check{
|
||||
true, safety::SafetyReason::None, {}};
|
||||
std::atomic<std::uint64_t> sequence_{0};
|
||||
std::atomic<int> hardware_checks{0};
|
||||
};
|
||||
|
||||
api::MoveJ_Request moveRequest(
|
||||
const safety::SafetyManager& coordinator,
|
||||
const std::string& command_id,
|
||||
const double target = 0.25)
|
||||
{
|
||||
api::MoveJ_Request request;
|
||||
request.mutable_header()->set_device_id("arm");
|
||||
request.mutable_header()->set_command_id(command_id);
|
||||
request.mutable_header()->set_expected_service_instance_id(
|
||||
coordinator.serviceInstanceId());
|
||||
request.mutable_header()->set_valid_for_ms(1000);
|
||||
request.mutable_target()->add_position(target);
|
||||
return request;
|
||||
}
|
||||
|
||||
grpc::Status executeMove(
|
||||
safety::SafetyManager& coordinator,
|
||||
const api::MoveJ_Request& request,
|
||||
api::MoveJ_Response& response,
|
||||
int& dispatches,
|
||||
const bool throw_after_dispatch = false)
|
||||
{
|
||||
grpc::ServerContext context;
|
||||
return executeRegisteredGrpcCommand(
|
||||
makeDefaultGrpcSecurityGateway(),
|
||||
&context,
|
||||
coordinator,
|
||||
"/cmvr.api.ArmService/moveJ",
|
||||
&request,
|
||||
&response,
|
||||
[&](GrpcCommandTransaction& transaction) {
|
||||
if (!transaction.beginDispatch()) {
|
||||
return transaction.dispatchStatus();
|
||||
}
|
||||
++dispatches;
|
||||
if (throw_after_dispatch) {
|
||||
throw std::runtime_error("simulated lost driver acknowledgement");
|
||||
}
|
||||
response.mutable_header()->set_success(true);
|
||||
return grpc::Status::OK;
|
||||
});
|
||||
}
|
||||
|
||||
TEST(GrpcCommandTransactionTest,
|
||||
DeterministicHashIgnoresRetryIdentityButIncludesPayload)
|
||||
{
|
||||
safety::SafetyManager coordinator;
|
||||
auto first = moveRequest(coordinator, "command-1", 0.25);
|
||||
auto retry = first;
|
||||
retry.mutable_header()->set_command_id("command-2");
|
||||
retry.mutable_header()->set_valid_for_ms(2000);
|
||||
retry.mutable_header()->mutable_timestamp()->set_seconds(1234);
|
||||
auto changed = retry;
|
||||
changed.mutable_target()->set_position(0, 0.5);
|
||||
|
||||
const auto first_hash = deterministicGrpcPayloadHash(
|
||||
"/cmvr.api.ArmService/moveJ", first);
|
||||
EXPECT_FALSE(first_hash.empty());
|
||||
EXPECT_EQ(
|
||||
first_hash,
|
||||
deterministicGrpcPayloadHash(
|
||||
"/cmvr.api.ArmService/moveJ", retry));
|
||||
EXPECT_NE(
|
||||
first_hash,
|
||||
deterministicGrpcPayloadHash(
|
||||
"/cmvr.api.ArmService/moveJ", changed));
|
||||
EXPECT_NE(
|
||||
first_hash,
|
||||
deterministicGrpcPayloadHash(
|
||||
"/cmvr.api.ArmService/moveL", first));
|
||||
}
|
||||
|
||||
TEST(GrpcCommandTransactionTest, SameIdReturnsCachedResponseWithoutRedispatch)
|
||||
{
|
||||
safety::SafetyManager coordinator;
|
||||
auto endpoint = std::make_shared<FakeEndpoint>("arm");
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{endpoint->descriptor(), endpoint, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
const auto request = moveRequest(coordinator, "command-cache");
|
||||
api::MoveJ_Response first_response;
|
||||
int dispatches = 0;
|
||||
ASSERT_TRUE(executeMove(
|
||||
coordinator, request, first_response, dispatches).ok());
|
||||
ASSERT_TRUE(first_response.header().success());
|
||||
EXPECT_EQ(dispatches, 1);
|
||||
|
||||
auto retry = request;
|
||||
retry.mutable_header()->set_valid_for_ms(2500);
|
||||
retry.mutable_header()->mutable_timestamp()->set_seconds(42);
|
||||
api::MoveJ_Response cached_response;
|
||||
ASSERT_TRUE(executeMove(
|
||||
coordinator, retry, cached_response, dispatches).ok());
|
||||
EXPECT_EQ(dispatches, 1);
|
||||
EXPECT_TRUE(cached_response.header().success());
|
||||
EXPECT_EQ(
|
||||
cached_response.header().execution_state(),
|
||||
api::COMMAND_EXECUTION_STATE_COMPLETED);
|
||||
EXPECT_EQ(cached_response.header().command_id(), "command-cache");
|
||||
|
||||
auto conflict = request;
|
||||
conflict.mutable_target()->set_position(0, 0.75);
|
||||
api::MoveJ_Response conflict_response;
|
||||
const auto conflict_status = executeMove(
|
||||
coordinator, conflict, conflict_response, dispatches);
|
||||
EXPECT_EQ(conflict_status.error_code(), grpc::StatusCode::ALREADY_EXISTS);
|
||||
EXPECT_EQ(dispatches, 1);
|
||||
EXPECT_EQ(
|
||||
conflict_response.header().reason_code(),
|
||||
api::COMMAND_REASON_CODE_COMMAND_ID_CONFLICT);
|
||||
}
|
||||
|
||||
TEST(GrpcCommandTransactionTest,
|
||||
EnforcedCommandRequiresIdentityAndRunsFinalHardwareCheck)
|
||||
{
|
||||
safety::SafetyManagerConfig config;
|
||||
config.enforcement_mode = safety::EnforcementMode::EnforceAll;
|
||||
safety::SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>("arm");
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{endpoint->descriptor(), endpoint, {}}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm",
|
||||
device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
auto missing_identity = moveRequest(coordinator, "");
|
||||
api::MoveJ_Response rejected;
|
||||
int dispatches = 0;
|
||||
const auto rejected_status = executeMove(
|
||||
coordinator, missing_identity, rejected, dispatches);
|
||||
EXPECT_EQ(
|
||||
rejected_status.error_code(), grpc::StatusCode::INVALID_ARGUMENT);
|
||||
EXPECT_EQ(dispatches, 0);
|
||||
EXPECT_EQ(
|
||||
rejected.header().reason_code(),
|
||||
api::COMMAND_REASON_CODE_COMMAND_ID_REQUIRED);
|
||||
|
||||
auto accepted = moveRequest(coordinator, "command-enforced");
|
||||
api::MoveJ_Response accepted_response;
|
||||
ASSERT_TRUE(executeMove(
|
||||
coordinator, accepted, accepted_response, dispatches).ok());
|
||||
EXPECT_EQ(dispatches, 1);
|
||||
EXPECT_EQ(endpoint->hardware_checks.load(), 1);
|
||||
EXPECT_EQ(
|
||||
accepted_response.header().device_generation(), 1U);
|
||||
}
|
||||
|
||||
TEST(GrpcCommandTransactionTest,
|
||||
ExceptionAfterDispatchIsQuarantinedAndNeverRedispatched)
|
||||
{
|
||||
safety::SafetyManagerConfig config;
|
||||
config.enforcement_mode = safety::EnforcementMode::EnforceAll;
|
||||
safety::SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>("arm");
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{endpoint->descriptor(), endpoint, {}}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm",
|
||||
device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
const auto request = moveRequest(coordinator, "command-unknown");
|
||||
api::MoveJ_Response response;
|
||||
int dispatches = 0;
|
||||
ASSERT_TRUE(executeMove(
|
||||
coordinator, request, response, dispatches, true).ok());
|
||||
EXPECT_EQ(dispatches, 1);
|
||||
EXPECT_EQ(
|
||||
response.header().reason_code(),
|
||||
api::COMMAND_REASON_CODE_OUTCOME_UNKNOWN);
|
||||
ASSERT_EQ(coordinator.snapshot().devices.size(), 1U);
|
||||
EXPECT_EQ(
|
||||
coordinator.snapshot().devices.front().admission_state,
|
||||
safety::DeviceAdmissionState::Quarantined);
|
||||
|
||||
api::MoveJ_Response retry_response;
|
||||
ASSERT_TRUE(executeMove(
|
||||
coordinator, request, retry_response, dispatches).ok());
|
||||
EXPECT_EQ(dispatches, 1);
|
||||
EXPECT_EQ(
|
||||
retry_response.header().execution_state(),
|
||||
api::COMMAND_EXECUTION_STATE_OUTCOME_UNKNOWN);
|
||||
}
|
||||
|
||||
TEST(GrpcCommandTransactionTest,
|
||||
ScopedDispatchChecksHardwareForEverySubmission)
|
||||
{
|
||||
safety::SafetyManagerConfig config;
|
||||
config.enforcement_mode = safety::EnforcementMode::EnforceAll;
|
||||
safety::SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>("arm");
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{endpoint->descriptor(), endpoint, {}}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm",
|
||||
device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
const auto request = moveRequest(coordinator, "command-scoped");
|
||||
api::MoveJ_Response response;
|
||||
grpc::ServerContext context;
|
||||
int dispatches = 0;
|
||||
const auto status = executeRegisteredGrpcCommand(
|
||||
makeDefaultGrpcSecurityGateway(),
|
||||
&context,
|
||||
coordinator,
|
||||
"/cmvr.api.ArmService/moveJ",
|
||||
&request,
|
||||
&response,
|
||||
[&](GrpcCommandTransaction& transaction) {
|
||||
for (int index = 0; index < 2; ++index) {
|
||||
auto dispatch = transaction.beginScopedDispatch();
|
||||
if (!dispatch.acquired()) {
|
||||
return transaction.dispatchStatus();
|
||||
}
|
||||
++dispatches;
|
||||
}
|
||||
response.mutable_header()->set_success(true);
|
||||
return grpc::Status::OK;
|
||||
});
|
||||
|
||||
EXPECT_TRUE(status.ok());
|
||||
EXPECT_TRUE(response.header().success());
|
||||
EXPECT_EQ(dispatches, 2);
|
||||
EXPECT_EQ(endpoint->hardware_checks.load(), 2);
|
||||
}
|
||||
|
||||
TEST(GrpcCommandTransactionTest,
|
||||
RevokedActuationPermitCannotSuppressInternalSafetyStop)
|
||||
{
|
||||
safety::SafetyManagerConfig config;
|
||||
config.enforcement_mode = safety::EnforcementMode::EnforceAll;
|
||||
safety::SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>("arm");
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{endpoint->descriptor(), endpoint, {}}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm",
|
||||
device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
const auto request = moveRequest(coordinator, "command-revoked");
|
||||
api::MoveJ_Response response;
|
||||
grpc::ServerContext context;
|
||||
int actuations = 0;
|
||||
int safety_stops = 0;
|
||||
const auto status = executeRegisteredGrpcCommand(
|
||||
makeDefaultGrpcSecurityGateway(),
|
||||
&context,
|
||||
coordinator,
|
||||
"/cmvr.api.ArmService/moveJ",
|
||||
&request,
|
||||
&response,
|
||||
[&](GrpcCommandTransaction& transaction) {
|
||||
{
|
||||
auto dispatch = transaction.beginScopedDispatch();
|
||||
if (!dispatch.acquired()) {
|
||||
return transaction.dispatchStatus();
|
||||
}
|
||||
++actuations;
|
||||
}
|
||||
|
||||
const auto stop_all = coordinator.stopAll("revoke-scoped-permit");
|
||||
EXPECT_TRUE(stop_all.success);
|
||||
EXPECT_FALSE(transaction.revalidate());
|
||||
const auto revoked_status = transaction.dispatchStatus();
|
||||
EXPECT_FALSE(transaction.beginScopedDispatch().acquired());
|
||||
|
||||
auto stop_dispatch = transaction.beginSafetyStopDispatch();
|
||||
if (stop_dispatch.acquired()) {
|
||||
++safety_stops;
|
||||
}
|
||||
response.mutable_header()->set_success(false);
|
||||
return revoked_status;
|
||||
});
|
||||
|
||||
// Ledger-backed commands report their terminal outcome in Feedback.
|
||||
EXPECT_TRUE(status.ok());
|
||||
EXPECT_FALSE(response.header().success());
|
||||
EXPECT_EQ(
|
||||
response.header().reason_code(),
|
||||
api::COMMAND_REASON_CODE_SAFETY_LATCHED);
|
||||
EXPECT_EQ(actuations, 1);
|
||||
EXPECT_EQ(safety_stops, 1);
|
||||
EXPECT_EQ(endpoint->hardware_checks.load(), 2);
|
||||
}
|
||||
|
||||
TEST(GrpcCommandTransactionTest,
|
||||
ServerDerivedStopRemainsDispatchableWhenActuationIsQuarantined)
|
||||
{
|
||||
safety::SafetyManagerConfig config;
|
||||
config.enforcement_mode = safety::EnforcementMode::EnforceAll;
|
||||
safety::SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>("arm");
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{endpoint->descriptor(), endpoint, {}}));
|
||||
coordinator.updateDeviceRuntimeState(
|
||||
"arm",
|
||||
device::ManagedDeviceState::Running,
|
||||
{device::DeviceHealthState::Healthy, {}});
|
||||
coordinator.markStartupComplete();
|
||||
coordinator.quarantineDevice(
|
||||
"arm", safety::SafetyReason::OutcomeUnknown,
|
||||
"uncertain-ptz-start");
|
||||
|
||||
const auto registered = defaultGrpcMethodPolicyRegistry().find(
|
||||
"/cmvr.api.CameraService/ControlPtz");
|
||||
ASSERT_TRUE(registered.has_value());
|
||||
|
||||
auto start_request = moveRequest(coordinator, "ptz-start");
|
||||
api::MoveJ_Response start_response;
|
||||
grpc::ServerContext start_context;
|
||||
int start_dispatches = 0;
|
||||
const auto start_status = executeServerDerivedGrpcCommand(
|
||||
makeDefaultGrpcSecurityGateway(),
|
||||
&start_context,
|
||||
coordinator,
|
||||
"/cmvr.api.CameraService/ControlPtz",
|
||||
*registered,
|
||||
&start_request,
|
||||
&start_response,
|
||||
[&](GrpcCommandTransaction& transaction) {
|
||||
if (!transaction.beginDispatch()) {
|
||||
return transaction.dispatchStatus();
|
||||
}
|
||||
++start_dispatches;
|
||||
start_response.mutable_header()->set_success(true);
|
||||
return grpc::Status::OK;
|
||||
});
|
||||
EXPECT_TRUE(start_status.ok());
|
||||
EXPECT_EQ(start_dispatches, 0);
|
||||
EXPECT_FALSE(start_response.header().success());
|
||||
EXPECT_EQ(
|
||||
start_response.header().reason_code(),
|
||||
api::COMMAND_REASON_CODE_SAFETY_LATCHED);
|
||||
|
||||
auto stop_request = moveRequest(coordinator, "ptz-stop");
|
||||
api::MoveJ_Response stop_response;
|
||||
grpc::ServerContext stop_context;
|
||||
auto stop_policy = *registered;
|
||||
stop_policy.access = GrpcAccessClass::Stop;
|
||||
stop_policy.command_intent = safety::CommandIntent::Stop;
|
||||
stop_policy.safety_lane = true;
|
||||
int stop_dispatches = 0;
|
||||
const auto stop_status = executeServerDerivedGrpcCommand(
|
||||
makeDefaultGrpcSecurityGateway(),
|
||||
&stop_context,
|
||||
coordinator,
|
||||
"/cmvr.api.CameraService/ControlPtz",
|
||||
std::move(stop_policy),
|
||||
&stop_request,
|
||||
&stop_response,
|
||||
[&](GrpcCommandTransaction& transaction) {
|
||||
if (!transaction.beginDispatch()) {
|
||||
return transaction.dispatchStatus();
|
||||
}
|
||||
++stop_dispatches;
|
||||
stop_response.mutable_header()->set_success(true);
|
||||
return grpc::Status::OK;
|
||||
});
|
||||
EXPECT_TRUE(stop_status.ok());
|
||||
EXPECT_TRUE(stop_response.header().success());
|
||||
EXPECT_EQ(stop_dispatches, 1);
|
||||
EXPECT_EQ(endpoint->hardware_checks.load(), 1);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,351 +0,0 @@
|
||||
#include "service/grpc/server/include/grpc_dexhand_service.h"
|
||||
|
||||
#include <array>
|
||||
#include <atomic>
|
||||
#include <cstdio>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include <grpcpp/grpcpp.h>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "cmvr/config/device_manager_config/device_manager_config.pb.h"
|
||||
#include "manager/control_authority_manager/include/control_authority_manager.h"
|
||||
#include "manager/device_manager/include/device_manager.h"
|
||||
#include "service/grpc/server/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
class FakeDexHand final : public device::AbstractDexHand {
|
||||
public:
|
||||
FakeDexHand() {
|
||||
id_ = "test-dexhand";
|
||||
sensor_points_[0] = TactilePoint::fromFz(42);
|
||||
}
|
||||
|
||||
std::string typeName() const override { return "FakeDexHand"; }
|
||||
Status state() const override { return Status::STREAMING; }
|
||||
std::string lastError() const override { return {}; }
|
||||
|
||||
bool stopOperationalActivity() override {
|
||||
++stop_operational_calls;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool resumeOperationalActivity() override {
|
||||
++resume_operational_calls;
|
||||
return true;
|
||||
}
|
||||
|
||||
void setAngles(const std::vector<int>&) override {
|
||||
++set_angle_calls;
|
||||
std::unique_lock lock(command_mutex_);
|
||||
command_entered_ = true;
|
||||
command_cv_.notify_all();
|
||||
command_cv_.wait(lock, [this] { return !block_angle_command_; });
|
||||
}
|
||||
|
||||
void setPositions(const std::vector<int>&) override {
|
||||
++set_position_calls;
|
||||
}
|
||||
|
||||
void setVelocities(const std::vector<int>&) override {
|
||||
++set_speed_calls;
|
||||
}
|
||||
|
||||
void setForce(const std::vector<int>&) override {
|
||||
++set_force_calls;
|
||||
}
|
||||
|
||||
void setPresetAct(int) override {
|
||||
++set_preset_calls;
|
||||
}
|
||||
|
||||
void setTactilePollingRegions(
|
||||
const std::vector<TactileRegionKey>&) override {
|
||||
++configure_sensor_calls;
|
||||
}
|
||||
|
||||
std::vector<TactileRegionData> getSensorData() override {
|
||||
++sensor_read_calls;
|
||||
return {sensorRegion()};
|
||||
}
|
||||
|
||||
TactileRegionData getSensorData(
|
||||
FingerType finger, TactileRegion region) override {
|
||||
return finger == FingerType::INDEX && region == TactileRegion::TIP
|
||||
? sensorRegion()
|
||||
: TactileRegionData{};
|
||||
}
|
||||
|
||||
ResultantForce getResultantForce(
|
||||
FingerType finger, TactileRegion region) override {
|
||||
return finger == FingerType::INDEX && region == TactileRegion::TIP
|
||||
? sensor_points_[0]
|
||||
: ResultantForce{};
|
||||
}
|
||||
|
||||
void blockAngleCommand() {
|
||||
std::lock_guard lock(command_mutex_);
|
||||
block_angle_command_ = true;
|
||||
command_entered_ = false;
|
||||
}
|
||||
|
||||
bool waitForAngleCommand(const std::chrono::milliseconds timeout) {
|
||||
std::unique_lock lock(command_mutex_);
|
||||
return command_cv_.wait_for(
|
||||
lock, timeout, [this] { return command_entered_; });
|
||||
}
|
||||
|
||||
void releaseAngleCommand() {
|
||||
{
|
||||
std::lock_guard lock(command_mutex_);
|
||||
block_angle_command_ = false;
|
||||
}
|
||||
command_cv_.notify_all();
|
||||
}
|
||||
|
||||
std::atomic<int> set_position_calls{0};
|
||||
std::atomic<int> set_angle_calls{0};
|
||||
std::atomic<int> set_force_calls{0};
|
||||
std::atomic<int> set_speed_calls{0};
|
||||
std::atomic<int> set_preset_calls{0};
|
||||
std::atomic<int> configure_sensor_calls{0};
|
||||
std::atomic<int> sensor_read_calls{0};
|
||||
std::atomic<int> stop_operational_calls{0};
|
||||
std::atomic<int> resume_operational_calls{0};
|
||||
|
||||
private:
|
||||
TactileRegionData sensorRegion() {
|
||||
return TactileRegionData(
|
||||
FingerType::INDEX,
|
||||
TactileRegion::TIP,
|
||||
TactileMatrixView{sensor_points_.data(), 1, 1},
|
||||
"fake-tactile");
|
||||
}
|
||||
|
||||
std::array<TactilePoint, 1> sensor_points_{};
|
||||
std::mutex command_mutex_;
|
||||
std::condition_variable command_cv_;
|
||||
bool block_angle_command_{false};
|
||||
bool command_entered_{false};
|
||||
};
|
||||
|
||||
class GrpcDexHandServiceTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
device::DeviceManager::destroyInstance();
|
||||
control::ControlAuthorityManager::instance().clear();
|
||||
globalStopAllAdmissionGate().clearForTesting();
|
||||
config::DeviceManagerConfig config;
|
||||
auto& manager = device::DeviceManager::getInstance(config);
|
||||
hand_ = std::make_shared<FakeDexHand>();
|
||||
manager.registerDevice(hand_);
|
||||
service_ = std::make_unique<gRPCDexHandServiceImpl>();
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
hand_->releaseAngleCommand();
|
||||
if (server_) {
|
||||
server_->Shutdown();
|
||||
server_->Wait();
|
||||
}
|
||||
stub_.reset();
|
||||
service_.reset();
|
||||
hand_.reset();
|
||||
if (!socket_path_.empty()) {
|
||||
std::remove(socket_path_.c_str());
|
||||
}
|
||||
device::DeviceManager::destroyInstance();
|
||||
control::ControlAuthorityManager::instance().clear();
|
||||
globalStopAllAdmissionGate().clearForTesting();
|
||||
}
|
||||
|
||||
bool startGrpcServer() {
|
||||
socket_path_ =
|
||||
"/tmp/cmvr_dexhand_service_test_" +
|
||||
std::to_string(static_cast<long long>(::getpid())) + ".sock";
|
||||
std::remove(socket_path_.c_str());
|
||||
const std::string address = "unix:" + socket_path_;
|
||||
grpc::ServerBuilder builder;
|
||||
builder.AddListeningPort(
|
||||
address,
|
||||
grpc::InsecureServerCredentials());
|
||||
builder.RegisterService(service_.get());
|
||||
server_ = builder.BuildAndStart();
|
||||
if (!server_) {
|
||||
return false;
|
||||
}
|
||||
stub_ = api::DexHandService::NewStub(grpc::CreateChannel(
|
||||
address,
|
||||
grpc::InsecureChannelCredentials()));
|
||||
return stub_ != nullptr;
|
||||
}
|
||||
|
||||
static api::GetSensorDataStreamCommand_Request sensorStreamRequest() {
|
||||
api::GetSensorDataStreamCommand_Request request;
|
||||
request.mutable_header()->set_device_id("test-dexhand");
|
||||
return request;
|
||||
}
|
||||
|
||||
std::shared_ptr<FakeDexHand> hand_;
|
||||
std::unique_ptr<gRPCDexHandServiceImpl> service_;
|
||||
std::unique_ptr<grpc::Server> server_;
|
||||
std::unique_ptr<api::DexHandService::Stub> stub_;
|
||||
std::string socket_path_;
|
||||
};
|
||||
|
||||
TEST_F(GrpcDexHandServiceTest, StopAllGateRejectsEveryControlCommand) {
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
|
||||
grpc::ServerContext position_context;
|
||||
api::SetDexHandPositionsCommand_Request position_request;
|
||||
api::SetDexHandPositionsCommand_Feedback position_response;
|
||||
position_request.mutable_header()->set_device_id("test-dexhand");
|
||||
EXPECT_TRUE(service_->SetDexHandPos(
|
||||
&position_context, &position_request, &position_response).ok());
|
||||
EXPECT_FALSE(position_response.header().success());
|
||||
|
||||
grpc::ServerContext angle_context;
|
||||
api::SetDexHandAnglesCommand_Request angle_request;
|
||||
api::SetDexHandAnglesCommand_Feedback angle_response;
|
||||
angle_request.mutable_header()->set_device_id("test-dexhand");
|
||||
EXPECT_TRUE(service_->SetDexHandAngle(
|
||||
&angle_context, &angle_request, &angle_response).ok());
|
||||
EXPECT_FALSE(angle_response.header().success());
|
||||
|
||||
grpc::ServerContext force_context;
|
||||
api::SetDexHandForceCommand_Request force_request;
|
||||
api::SetDexHandForceCommand_Feedback force_response;
|
||||
force_request.mutable_header()->set_device_id("test-dexhand");
|
||||
EXPECT_TRUE(service_->SetDexHandForce(
|
||||
&force_context, &force_request, &force_response).ok());
|
||||
EXPECT_FALSE(force_response.header().success());
|
||||
|
||||
grpc::ServerContext speed_context;
|
||||
api::SetDexHandSpeedCommand_Request speed_request;
|
||||
api::SetDexHandSpeedCommand_Feedback speed_response;
|
||||
speed_request.mutable_header()->set_device_id("test-dexhand");
|
||||
EXPECT_TRUE(service_->SetDexHandSpeed(
|
||||
&speed_context, &speed_request, &speed_response).ok());
|
||||
EXPECT_FALSE(speed_response.header().success());
|
||||
|
||||
grpc::ServerContext preset_context;
|
||||
api::SetDexHandPresetActCommand_Request preset_request;
|
||||
api::SetDexHandPresetActCommand_Feedback preset_response;
|
||||
preset_request.mutable_header()->set_device_id("test-dexhand");
|
||||
EXPECT_TRUE(service_->SetDexHandPresetAct(
|
||||
&preset_context, &preset_request, &preset_response).ok());
|
||||
EXPECT_FALSE(preset_response.header().success());
|
||||
|
||||
EXPECT_EQ(hand_->set_position_calls.load(), 0);
|
||||
EXPECT_EQ(hand_->set_angle_calls.load(), 0);
|
||||
EXPECT_EQ(hand_->set_force_calls.load(), 0);
|
||||
EXPECT_EQ(hand_->set_speed_calls.load(), 0);
|
||||
EXPECT_EQ(hand_->set_preset_calls.load(), 0);
|
||||
EXPECT_EQ(hand_->resume_operational_calls.load(), 0);
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
}
|
||||
|
||||
TEST_F(GrpcDexHandServiceTest,
|
||||
SafetyPreemptionCannotPassAnExecutingDeviceDispatch) {
|
||||
hand_->blockAngleCommand();
|
||||
grpc::ServerContext context;
|
||||
api::SetDexHandAnglesCommand_Request request;
|
||||
api::SetDexHandAnglesCommand_Feedback response;
|
||||
request.mutable_header()->set_device_id("test-dexhand");
|
||||
request.add_values()->set_value(0.5F);
|
||||
|
||||
auto rpc = std::async(std::launch::async, [&] {
|
||||
return service_->SetDexHandAngle(&context, &request, &response);
|
||||
});
|
||||
ASSERT_TRUE(hand_->waitForAngleCommand(1s));
|
||||
|
||||
auto& authority = control::ControlAuthorityManager::instance();
|
||||
auto safety_result = authority.preemptAcquire(
|
||||
"test-dexhand",
|
||||
"test-stop-all",
|
||||
std::chrono::duration_cast<
|
||||
control::ControlAuthorityManager::Duration>(1h));
|
||||
ASSERT_TRUE(safety_result.acquired);
|
||||
const auto safety_token = safety_result.token;
|
||||
auto dispatch_fence = std::async(std::launch::async,
|
||||
[&authority, safety_token] {
|
||||
return authority.waitForPreemptedRelease(safety_token, 1s);
|
||||
});
|
||||
EXPECT_EQ(
|
||||
dispatch_fence.wait_for(50ms), std::future_status::timeout);
|
||||
|
||||
hand_->releaseAngleCommand();
|
||||
ASSERT_EQ(rpc.wait_for(1s), std::future_status::ready);
|
||||
EXPECT_TRUE(rpc.get().ok());
|
||||
EXPECT_TRUE(response.header().success());
|
||||
ASSERT_EQ(dispatch_fence.wait_for(1s), std::future_status::ready);
|
||||
EXPECT_TRUE(dispatch_fence.get());
|
||||
authority.release(safety_token);
|
||||
}
|
||||
|
||||
TEST_F(GrpcDexHandServiceTest,
|
||||
StopAllCancelsOldSensorStreamAndARecoveredStreamResumesActivity) {
|
||||
ASSERT_TRUE(startGrpcServer());
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 3s);
|
||||
auto stream = stub_->GetSensorDataStream(&context);
|
||||
ASSERT_TRUE(stream->Write(sensorStreamRequest()));
|
||||
|
||||
api::GetSensorDataStreamCommand_Feedback feedback;
|
||||
ASSERT_TRUE(stream->Read(&feedback));
|
||||
ASSERT_TRUE(feedback.header().success());
|
||||
ASSERT_GE(hand_->sensor_read_calls.load(), 1);
|
||||
|
||||
const auto admission_ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
const auto media_ticket = globalMediaActivityCoordinator().beginStopAll();
|
||||
ASSERT_TRUE(admission_ticket.valid());
|
||||
ASSERT_TRUE(media_ticket.valid());
|
||||
|
||||
stream->WritesDone();
|
||||
while (stream->Read(&feedback)) {
|
||||
}
|
||||
const auto status = stream->Finish();
|
||||
EXPECT_TRUE(
|
||||
status.ok() || status.error_code() == grpc::StatusCode::CANCELLED);
|
||||
EXPECT_TRUE(globalMediaActivityCoordinator().waitForStopped(
|
||||
media_ticket, 1s));
|
||||
const int stopped_stream_reads = hand_->sensor_read_calls.load();
|
||||
std::this_thread::sleep_for(50ms);
|
||||
EXPECT_EQ(hand_->sensor_read_calls.load(), stopped_stream_reads);
|
||||
EXPECT_TRUE(globalMediaActivityCoordinator().finishStopAll(
|
||||
media_ticket, true));
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(
|
||||
admission_ticket, true));
|
||||
|
||||
grpc::ClientContext resumed_context;
|
||||
resumed_context.set_deadline(std::chrono::system_clock::now() + 3s);
|
||||
auto resumed = stub_->GetSensorDataStream(&resumed_context);
|
||||
ASSERT_TRUE(resumed->Write(sensorStreamRequest()));
|
||||
ASSERT_TRUE(resumed->Read(&feedback));
|
||||
EXPECT_TRUE(feedback.header().success());
|
||||
EXPECT_GT(hand_->sensor_read_calls.load(), stopped_stream_reads);
|
||||
EXPECT_GE(hand_->resume_operational_calls.load(), 2);
|
||||
resumed_context.TryCancel();
|
||||
resumed->WritesDone();
|
||||
while (resumed->Read(&feedback)) {
|
||||
}
|
||||
(void)resumed->Finish();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,864 +0,0 @@
|
||||
#include "service/grpc/server/include/grpc_error_logging_interceptor.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <cstdio>
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <iterator>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <grpcpp/grpcpp.h>
|
||||
#include <grpcpp/generic/generic_stub.h>
|
||||
#include <grpcpp/impl/client_unary_call.h>
|
||||
#include <grpcpp/impl/rpc_method.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "cmvr/api/agv_service.grpc.pb.h"
|
||||
#include "cmvr/api/camera_service.grpc.pb.h"
|
||||
#include "cmvr/api/test_service.grpc.pb.h"
|
||||
#include "common/base/logging/logger.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
std::atomic<std::uint64_t> g_socket_sequence{0};
|
||||
|
||||
void setRpcDeadline(grpc::ClientContext& context)
|
||||
{
|
||||
context.set_deadline(
|
||||
std::chrono::system_clock::now() + std::chrono::seconds(3));
|
||||
}
|
||||
|
||||
grpc::ByteBuffer byteBuffer(const std::string& payload)
|
||||
{
|
||||
const grpc::Slice slice(payload);
|
||||
return grpc::ByteBuffer(&slice, 1);
|
||||
}
|
||||
|
||||
std::string byteBufferString(const grpc::ByteBuffer& buffer)
|
||||
{
|
||||
std::vector<grpc::Slice> slices;
|
||||
EXPECT_TRUE(buffer.Dump(&slices).ok());
|
||||
std::string payload;
|
||||
for (const auto& slice : slices) {
|
||||
payload.append(
|
||||
reinterpret_cast<const char*>(slice.begin()), slice.size());
|
||||
}
|
||||
return payload;
|
||||
}
|
||||
|
||||
grpc::Status rawUnaryCall(const std::shared_ptr<grpc::Channel>& channel,
|
||||
const std::string& method,
|
||||
const std::string& request_payload,
|
||||
grpc::ByteBuffer& response)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
const auto request = byteBuffer(request_payload);
|
||||
const grpc::internal::RpcMethod rpc_method(
|
||||
method.c_str(), grpc::internal::RpcMethod::NORMAL_RPC);
|
||||
return grpc::internal::BlockingUnaryCall(
|
||||
channel.get(), rpc_method, &context, request, &response);
|
||||
}
|
||||
|
||||
class ErrorLoggingTestService final : public api::TestService::Service {
|
||||
public:
|
||||
grpc::Status Call(grpc::ServerContext* context,
|
||||
const api::TestReqeust* request,
|
||||
api::TestResponse* response) override
|
||||
{
|
||||
if (request->data() == "grpc-error") {
|
||||
return grpc::Status(
|
||||
grpc::StatusCode::INTERNAL, "transport sentinel");
|
||||
}
|
||||
if (request->data() == "cancelled") {
|
||||
return grpc::Status(
|
||||
grpc::StatusCode::CANCELLED, "client closed stream");
|
||||
}
|
||||
if (request->data() == "server-cancel") {
|
||||
context->TryCancel();
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
if (request->data() == "client-cancel") {
|
||||
{
|
||||
std::lock_guard lock(cancel_mutex_);
|
||||
cancel_started_ = true;
|
||||
}
|
||||
cancel_started_condition_.notify_all();
|
||||
const auto timeout =
|
||||
std::chrono::steady_clock::now() + std::chrono::seconds(3);
|
||||
while (!context->IsCancelled() &&
|
||||
std::chrono::steady_clock::now() < timeout) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
response->set_data("ok");
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
|
||||
bool waitForCancelableCall()
|
||||
{
|
||||
std::unique_lock lock(cancel_mutex_);
|
||||
return cancel_started_condition_.wait_for(
|
||||
lock, std::chrono::seconds(3),
|
||||
[this] { return cancel_started_; });
|
||||
}
|
||||
|
||||
private:
|
||||
std::mutex cancel_mutex_;
|
||||
std::condition_variable cancel_started_condition_;
|
||||
bool cancel_started_{false};
|
||||
};
|
||||
|
||||
class ErrorLoggingAgvService final : public api::AgvService::Service {
|
||||
public:
|
||||
grpc::Status emergencyStop(
|
||||
grpc::ServerContext*,
|
||||
const api::CommandHeader_Request* request,
|
||||
api::CommandHeader_Feedback* response) override
|
||||
{
|
||||
if (request->device_id() == "missing") {
|
||||
response->set_success(false);
|
||||
response->set_error_message("missing sentinel");
|
||||
return grpc::Status(
|
||||
grpc::StatusCode::NOT_FOUND, "missing sentinel");
|
||||
}
|
||||
response->set_success(false);
|
||||
response->set_error_message("direct sentinel");
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
|
||||
grpc::Status streamMap(
|
||||
grpc::ServerContext*,
|
||||
const api::AgvMapStreamCommand_Request* request,
|
||||
grpc::ServerWriter<api::AgvMapStreamCommand_Feedback>* writer) override
|
||||
{
|
||||
const auto write_failure = [writer](const std::string& detail) {
|
||||
api::AgvMapStreamCommand_Feedback response;
|
||||
response.mutable_header()->set_success(false);
|
||||
response.mutable_header()->set_error_message(detail);
|
||||
return writer->Write(response);
|
||||
};
|
||||
|
||||
if (request->resume_token() == "multiple") {
|
||||
write_failure("first stream sentinel");
|
||||
write_failure("second stream sentinel");
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
if (request->resume_token() == "hold") {
|
||||
write_failure("immediate stream sentinel");
|
||||
std::unique_lock lock(stream_mutex_);
|
||||
stream_released_.wait_for(
|
||||
lock, std::chrono::seconds(3),
|
||||
[this] { return release_stream_; });
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
if (request->resume_token() == "different") {
|
||||
write_failure("application stream sentinel");
|
||||
return grpc::Status(
|
||||
grpc::StatusCode::INTERNAL, "status stream sentinel");
|
||||
}
|
||||
if (request->resume_token() == "long-different") {
|
||||
const std::string common_prefix(1100, 'x');
|
||||
write_failure(common_prefix + " application");
|
||||
return grpc::Status(
|
||||
grpc::StatusCode::INTERNAL,
|
||||
common_prefix + " status");
|
||||
}
|
||||
|
||||
write_failure("stream sentinel");
|
||||
return grpc::Status(
|
||||
grpc::StatusCode::INTERNAL, "stream sentinel");
|
||||
}
|
||||
|
||||
void releaseHeldStream()
|
||||
{
|
||||
{
|
||||
std::lock_guard lock(stream_mutex_);
|
||||
release_stream_ = true;
|
||||
}
|
||||
stream_released_.notify_all();
|
||||
}
|
||||
|
||||
private:
|
||||
std::mutex stream_mutex_;
|
||||
std::condition_variable stream_released_;
|
||||
bool release_stream_{false};
|
||||
};
|
||||
|
||||
class ErrorLoggingCameraService final : public api::CameraService::Service {
|
||||
public:
|
||||
grpc::Status StartCamera(
|
||||
grpc::ServerContext*,
|
||||
const api::StartCameraCommand_Request*,
|
||||
api::StartCameraCommand_Feedback* response) override
|
||||
{
|
||||
response->mutable_header()->set_success(false);
|
||||
response->mutable_header()->set_error_message("nested sentinel");
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
|
||||
grpc::Status GetRGBImage(
|
||||
grpc::ServerContext*,
|
||||
const api::GetRGBImageCommand_Request*,
|
||||
api::GetRGBImageCommand_Feedback* response) override
|
||||
{
|
||||
response->mutable_header()->set_success(true);
|
||||
response->mutable_color_frame()->set_data(
|
||||
std::string(2 * 1024 * 1024, 'x'));
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
};
|
||||
|
||||
class RawCameraService final
|
||||
: public api::CameraService::WithRawCallbackMethod_StartCamera<
|
||||
api::CameraService::Service> {
|
||||
public:
|
||||
explicit RawCameraService(std::string response)
|
||||
: response_(std::move(response))
|
||||
{
|
||||
}
|
||||
|
||||
grpc::ServerUnaryReactor* StartCamera(
|
||||
grpc::CallbackServerContext* context,
|
||||
const grpc::ByteBuffer*,
|
||||
grpc::ByteBuffer* response) override
|
||||
{
|
||||
*response = byteBuffer(response_);
|
||||
auto* reactor = context->DefaultReactor();
|
||||
reactor->Finish(grpc::Status::OK);
|
||||
return reactor;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string response_;
|
||||
};
|
||||
|
||||
struct RawCallResult {
|
||||
grpc::Status status;
|
||||
std::vector<GrpcFailureRecord> records;
|
||||
std::string response;
|
||||
};
|
||||
|
||||
class ScopedServer final {
|
||||
public:
|
||||
ScopedServer(std::unique_ptr<grpc::Server> server,
|
||||
std::string socket_path = {})
|
||||
: server_(std::move(server)), socket_path_(std::move(socket_path))
|
||||
{
|
||||
}
|
||||
|
||||
~ScopedServer()
|
||||
{
|
||||
if (server_) {
|
||||
server_->Shutdown();
|
||||
server_->Wait();
|
||||
}
|
||||
if (!socket_path_.empty()) {
|
||||
std::remove(socket_path_.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
grpc::Server* get() const { return server_.get(); }
|
||||
|
||||
private:
|
||||
std::unique_ptr<grpc::Server> server_;
|
||||
std::string socket_path_;
|
||||
};
|
||||
|
||||
class ScopedSocket final {
|
||||
public:
|
||||
explicit ScopedSocket(std::string path) : path_(std::move(path))
|
||||
{
|
||||
std::remove(path_.c_str());
|
||||
}
|
||||
|
||||
~ScopedSocket() { std::remove(path_.c_str()); }
|
||||
|
||||
private:
|
||||
std::string path_;
|
||||
};
|
||||
|
||||
RawCallResult callRawStartCamera(const std::string& response_payload)
|
||||
{
|
||||
std::mutex records_mutex;
|
||||
std::vector<GrpcFailureRecord> records;
|
||||
RawCameraService service(response_payload);
|
||||
grpc::ServerBuilder builder;
|
||||
const std::string address =
|
||||
"unix:/tmp/cmvr_grpc_error_logging_raw_" +
|
||||
std::to_string(static_cast<long long>(::getpid())) + "_" +
|
||||
std::to_string(g_socket_sequence.fetch_add(1U)) + ".sock";
|
||||
const std::string socket_path = address.substr(5);
|
||||
ScopedSocket socket(socket_path);
|
||||
builder.AddListeningPort(address, grpc::InsecureServerCredentials());
|
||||
builder.RegisterService(&service);
|
||||
std::vector<std::unique_ptr<
|
||||
grpc::experimental::ServerInterceptorFactoryInterface>> factories;
|
||||
factories.emplace_back(makeGrpcErrorLoggingInterceptorFactory(
|
||||
[&records, &records_mutex](const GrpcFailureRecord& record) {
|
||||
std::lock_guard lock(records_mutex);
|
||||
records.push_back(record);
|
||||
}));
|
||||
builder.experimental().SetInterceptorCreators(std::move(factories));
|
||||
ScopedServer server(builder.BuildAndStart());
|
||||
EXPECT_NE(server.get(), nullptr);
|
||||
if (server.get() == nullptr) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const auto channel = grpc::CreateChannel(
|
||||
address, grpc::InsecureChannelCredentials());
|
||||
api::StartCameraCommand_Request request;
|
||||
grpc::ByteBuffer response;
|
||||
const auto status = rawUnaryCall(
|
||||
channel, "/cmvr.api.CameraService/StartCamera",
|
||||
request.SerializeAsString(), response);
|
||||
std::lock_guard lock(records_mutex);
|
||||
return {status, records, byteBufferString(response)};
|
||||
}
|
||||
|
||||
class GrpcErrorLoggingInterceptorTest : public testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
grpc::ServerBuilder builder;
|
||||
socket_path_ =
|
||||
"/tmp/cmvr_grpc_error_logging_interceptor_test_" +
|
||||
std::to_string(static_cast<long long>(::getpid())) + "_" +
|
||||
std::to_string(g_socket_sequence.fetch_add(1U)) + ".sock";
|
||||
std::remove(socket_path_.c_str());
|
||||
const std::string address = "unix:" + socket_path_;
|
||||
builder.AddListeningPort(
|
||||
address, grpc::InsecureServerCredentials());
|
||||
builder.RegisterService(&test_service_);
|
||||
builder.RegisterService(&agv_service_);
|
||||
builder.RegisterService(&camera_service_);
|
||||
|
||||
std::vector<std::unique_ptr<
|
||||
grpc::experimental::ServerInterceptorFactoryInterface>> factories;
|
||||
factories.emplace_back(makeGrpcErrorLoggingInterceptorFactory(
|
||||
[this](const GrpcFailureRecord& record) {
|
||||
{
|
||||
std::lock_guard lock(records_mutex_);
|
||||
records_.push_back(record);
|
||||
}
|
||||
records_changed_.notify_all();
|
||||
}));
|
||||
builder.experimental().SetInterceptorCreators(std::move(factories));
|
||||
server_ = builder.BuildAndStart();
|
||||
ASSERT_NE(server_, nullptr);
|
||||
|
||||
const auto channel = grpc::CreateChannel(
|
||||
address,
|
||||
grpc::InsecureChannelCredentials());
|
||||
test_stub_ = api::TestService::NewStub(channel);
|
||||
agv_stub_ = api::AgvService::NewStub(channel);
|
||||
camera_stub_ = api::CameraService::NewStub(channel);
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
if (server_) {
|
||||
server_->Shutdown();
|
||||
server_->Wait();
|
||||
}
|
||||
test_stub_.reset();
|
||||
agv_stub_.reset();
|
||||
camera_stub_.reset();
|
||||
if (!socket_path_.empty()) {
|
||||
std::remove(socket_path_.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<GrpcFailureRecord> records()
|
||||
{
|
||||
std::lock_guard lock(records_mutex_);
|
||||
return records_;
|
||||
}
|
||||
|
||||
std::vector<GrpcFailureRecord> waitForRecords(
|
||||
const std::size_t count,
|
||||
const std::chrono::milliseconds timeout = std::chrono::seconds(3))
|
||||
{
|
||||
std::unique_lock lock(records_mutex_);
|
||||
records_changed_.wait_for(
|
||||
lock, timeout, [this, count] { return records_.size() >= count; });
|
||||
return records_;
|
||||
}
|
||||
|
||||
ErrorLoggingTestService test_service_;
|
||||
ErrorLoggingAgvService agv_service_;
|
||||
ErrorLoggingCameraService camera_service_;
|
||||
std::unique_ptr<grpc::Server> server_;
|
||||
std::unique_ptr<api::TestService::Stub> test_stub_;
|
||||
std::unique_ptr<api::AgvService::Stub> agv_stub_;
|
||||
std::unique_ptr<api::CameraService::Stub> camera_stub_;
|
||||
std::string socket_path_;
|
||||
std::mutex records_mutex_;
|
||||
std::condition_variable records_changed_;
|
||||
std::vector<GrpcFailureRecord> records_;
|
||||
};
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest, RecordsNonOkGrpcStatus)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::TestReqeust request;
|
||||
api::TestResponse response;
|
||||
request.set_data("grpc-error");
|
||||
|
||||
const grpc::Status status = test_stub_->Call(&context, request, &response);
|
||||
ASSERT_EQ(status.error_code(), grpc::StatusCode::INTERNAL);
|
||||
|
||||
const auto captured = waitForRecords(1U);
|
||||
ASSERT_EQ(captured.size(), 1U);
|
||||
EXPECT_EQ(captured.front().kind, GrpcFailureKind::GRPC_STATUS);
|
||||
EXPECT_EQ(captured.front().method, "/cmvr.api.TestService/Call");
|
||||
EXPECT_EQ(captured.front().status_code, grpc::StatusCode::INTERNAL);
|
||||
EXPECT_EQ(captured.front().severity, GrpcFailureSeverity::ERROR);
|
||||
EXPECT_EQ(captured.front().detail, "transport sentinel");
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest, RecordsDirectFeedbackFailure)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::CommandHeader_Request request;
|
||||
api::CommandHeader_Feedback response;
|
||||
|
||||
ASSERT_TRUE(agv_stub_->emergencyStop(&context, request, &response).ok());
|
||||
ASSERT_FALSE(response.success());
|
||||
|
||||
const auto captured = waitForRecords(1U);
|
||||
ASSERT_EQ(captured.size(), 1U);
|
||||
EXPECT_EQ(captured.front().kind, GrpcFailureKind::APPLICATION);
|
||||
EXPECT_EQ(captured.front().method, "/cmvr.api.AgvService/emergencyStop");
|
||||
EXPECT_EQ(captured.front().status_code, grpc::StatusCode::OK);
|
||||
EXPECT_EQ(captured.front().severity, GrpcFailureSeverity::ERROR);
|
||||
EXPECT_EQ(captured.front().detail, "direct sentinel");
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest, RecordsCancellationAsWarning)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::TestReqeust request;
|
||||
api::TestResponse response;
|
||||
request.set_data("cancelled");
|
||||
|
||||
const grpc::Status status = test_stub_->Call(&context, request, &response);
|
||||
ASSERT_EQ(status.error_code(), grpc::StatusCode::CANCELLED);
|
||||
|
||||
const auto captured = waitForRecords(1U);
|
||||
ASSERT_EQ(captured.size(), 1U);
|
||||
EXPECT_EQ(captured.front().kind, GrpcFailureKind::GRPC_STATUS);
|
||||
EXPECT_EQ(captured.front().severity, GrpcFailureSeverity::WARNING);
|
||||
EXPECT_EQ(captured.front().detail, "client closed stream");
|
||||
}
|
||||
|
||||
TEST(GrpcErrorLoggingInterceptorFileTest, WarningStatusIsFlushedToFile)
|
||||
{
|
||||
std::array<char, 80> directory_pattern{};
|
||||
const std::string pattern = "/tmp/cmvr-grpc-log-test-XXXXXX";
|
||||
std::copy(pattern.begin(), pattern.end(), directory_pattern.begin());
|
||||
const char* created = ::mkdtemp(directory_pattern.data());
|
||||
ASSERT_NE(created, nullptr);
|
||||
const std::filesystem::path directory(created);
|
||||
|
||||
struct Cleanup {
|
||||
~Cleanup()
|
||||
{
|
||||
logging::shutdownLogging();
|
||||
if (!socket_path.empty()) {
|
||||
std::remove(socket_path.c_str());
|
||||
}
|
||||
std::error_code error;
|
||||
std::filesystem::remove_all(directory, error);
|
||||
}
|
||||
|
||||
std::filesystem::path directory;
|
||||
std::string socket_path;
|
||||
} cleanup{directory, {}};
|
||||
|
||||
config::LoggerConfig config;
|
||||
config.set_minimum_level(config::LOG_LEVEL_WARNING);
|
||||
config.set_directory(directory.string());
|
||||
config.set_flush_interval_seconds(3600);
|
||||
auto* warning_route = config.add_routes();
|
||||
warning_route->set_level(config::LOG_LEVEL_WARNING);
|
||||
warning_route->set_file(true);
|
||||
ASSERT_TRUE(logging::initLogging(config, "grpc_log_test", directory));
|
||||
|
||||
ErrorLoggingTestService service;
|
||||
grpc::ServerBuilder builder;
|
||||
const std::string socket_path =
|
||||
"/tmp/cmvr_grpc_error_logging_file_test_" +
|
||||
std::to_string(static_cast<long long>(::getpid())) + "_" +
|
||||
std::to_string(g_socket_sequence.fetch_add(1U)) + ".sock";
|
||||
cleanup.socket_path = socket_path;
|
||||
ScopedSocket socket(socket_path);
|
||||
const std::string address = "unix:" + socket_path;
|
||||
builder.AddListeningPort(address, grpc::InsecureServerCredentials());
|
||||
builder.RegisterService(&service);
|
||||
std::vector<std::unique_ptr<
|
||||
grpc::experimental::ServerInterceptorFactoryInterface>> factories;
|
||||
factories.emplace_back(makeGrpcErrorLoggingInterceptorFactory());
|
||||
builder.experimental().SetInterceptorCreators(std::move(factories));
|
||||
ScopedServer server(builder.BuildAndStart());
|
||||
ASSERT_NE(server.get(), nullptr);
|
||||
|
||||
const auto channel = grpc::CreateChannel(
|
||||
address, grpc::InsecureChannelCredentials());
|
||||
auto stub = api::TestService::NewStub(channel);
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::TestReqeust request;
|
||||
api::TestResponse response;
|
||||
request.set_data("cancelled");
|
||||
const grpc::Status status = stub->Call(&context, request, &response);
|
||||
ASSERT_EQ(status.error_code(), grpc::StatusCode::CANCELLED);
|
||||
|
||||
std::ifstream input(directory / "grpc_log_test.log");
|
||||
const std::string contents{
|
||||
std::istreambuf_iterator<char>(input),
|
||||
std::istreambuf_iterator<char>()};
|
||||
EXPECT_NE(contents.find("/cmvr.api.TestService/Call"), std::string::npos);
|
||||
EXPECT_NE(contents.find("code=1(CANCELLED)"), std::string::npos);
|
||||
EXPECT_NE(contents.find("client closed stream"), std::string::npos);
|
||||
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest, RecordsServerCancellationReturnedAsOk)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::TestReqeust request;
|
||||
api::TestResponse response;
|
||||
request.set_data("server-cancel");
|
||||
|
||||
const grpc::Status status = test_stub_->Call(&context, request, &response);
|
||||
ASSERT_EQ(status.error_code(), grpc::StatusCode::CANCELLED);
|
||||
|
||||
// TryCancel is best effort: the final status may be intercepted before
|
||||
// the cancellation hook. Either way, the interceptor must not recurse or
|
||||
// emit duplicate records.
|
||||
const auto captured = waitForRecords(1U, std::chrono::milliseconds(50));
|
||||
ASSERT_LE(captured.size(), 1U);
|
||||
if (!captured.empty()) {
|
||||
EXPECT_EQ(captured.front().kind, GrpcFailureKind::GRPC_STATUS);
|
||||
EXPECT_EQ(captured.front().status_code, grpc::StatusCode::CANCELLED);
|
||||
EXPECT_EQ(captured.front().severity, GrpcFailureSeverity::WARNING);
|
||||
EXPECT_EQ(
|
||||
captured.front().detail,
|
||||
"RPC cancellation was requested by the edge server before completion");
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest, RecordsClientCancellation)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::TestReqeust request;
|
||||
api::TestResponse response;
|
||||
request.set_data("client-cancel");
|
||||
|
||||
grpc::Status status;
|
||||
std::thread call([&] {
|
||||
status = test_stub_->Call(&context, request, &response);
|
||||
});
|
||||
const bool call_started = test_service_.waitForCancelableCall();
|
||||
context.TryCancel();
|
||||
call.join();
|
||||
|
||||
ASSERT_TRUE(call_started);
|
||||
ASSERT_EQ(status.error_code(), grpc::StatusCode::CANCELLED);
|
||||
const auto captured = waitForRecords(1U);
|
||||
ASSERT_EQ(captured.size(), 1U);
|
||||
EXPECT_EQ(captured.front().kind, GrpcFailureKind::GRPC_STATUS);
|
||||
EXPECT_EQ(captured.front().status_code, grpc::StatusCode::CANCELLED);
|
||||
EXPECT_EQ(captured.front().severity, GrpcFailureSeverity::WARNING);
|
||||
EXPECT_EQ(
|
||||
captured.front().detail,
|
||||
"RPC was cancelled by the client or transport before completion");
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest,
|
||||
RecordsStatusWhenNonOkSuppressesUnaryResponse)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::CommandHeader_Request request;
|
||||
api::CommandHeader_Feedback response;
|
||||
request.set_device_id("missing");
|
||||
|
||||
const grpc::Status status =
|
||||
agv_stub_->emergencyStop(&context, request, &response);
|
||||
ASSERT_EQ(status.error_code(), grpc::StatusCode::NOT_FOUND);
|
||||
|
||||
const auto captured = waitForRecords(1U);
|
||||
ASSERT_EQ(captured.size(), 1U);
|
||||
EXPECT_EQ(captured.front().kind, GrpcFailureKind::GRPC_STATUS);
|
||||
EXPECT_EQ(captured.front().status_code, grpc::StatusCode::NOT_FOUND);
|
||||
EXPECT_EQ(captured.front().severity, GrpcFailureSeverity::WARNING);
|
||||
EXPECT_EQ(captured.front().detail, "missing sentinel");
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest, RecordsNestedFeedbackFailure)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::StartCameraCommand_Request request;
|
||||
api::StartCameraCommand_Feedback response;
|
||||
|
||||
ASSERT_TRUE(camera_stub_->StartCamera(&context, request, &response).ok());
|
||||
ASSERT_FALSE(response.header().success());
|
||||
|
||||
const auto captured = waitForRecords(1U);
|
||||
ASSERT_EQ(captured.size(), 1U);
|
||||
EXPECT_EQ(captured.front().kind, GrpcFailureKind::APPLICATION);
|
||||
EXPECT_EQ(captured.front().method, "/cmvr.api.CameraService/StartCamera");
|
||||
EXPECT_EQ(captured.front().detail, "nested sentinel");
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest,
|
||||
RecordsStreamingResponseAndFinalNonOkStatus)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::AgvMapStreamCommand_Request request;
|
||||
auto reader = agv_stub_->streamMap(&context, request);
|
||||
api::AgvMapStreamCommand_Feedback response;
|
||||
|
||||
ASSERT_TRUE(reader->Read(&response));
|
||||
ASSERT_FALSE(response.header().success());
|
||||
const grpc::Status status = reader->Finish();
|
||||
ASSERT_EQ(status.error_code(), grpc::StatusCode::INTERNAL);
|
||||
|
||||
const auto captured = waitForRecords(2U);
|
||||
ASSERT_EQ(captured.size(), 2U);
|
||||
EXPECT_EQ(captured[0].kind, GrpcFailureKind::APPLICATION);
|
||||
EXPECT_EQ(captured[0].method, "/cmvr.api.AgvService/streamMap");
|
||||
EXPECT_EQ(captured[0].status_code, grpc::StatusCode::OK);
|
||||
EXPECT_EQ(captured[0].severity, GrpcFailureSeverity::ERROR);
|
||||
EXPECT_EQ(captured[0].detail, "stream sentinel");
|
||||
EXPECT_EQ(captured[1].kind, GrpcFailureKind::GRPC_STATUS);
|
||||
EXPECT_EQ(captured[1].status_code, grpc::StatusCode::INTERNAL);
|
||||
EXPECT_EQ(captured[1].severity, GrpcFailureSeverity::ERROR);
|
||||
EXPECT_EQ(captured[1].detail, "stream sentinel");
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest,
|
||||
RecordsStreamingFailureBeforeTheStreamFinishes)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::AgvMapStreamCommand_Request request;
|
||||
request.set_resume_token("hold");
|
||||
auto reader = agv_stub_->streamMap(&context, request);
|
||||
api::AgvMapStreamCommand_Feedback response;
|
||||
|
||||
const bool read = reader->Read(&response);
|
||||
const auto captured_before_finish = waitForRecords(1U);
|
||||
agv_service_.releaseHeldStream();
|
||||
const grpc::Status status = reader->Finish();
|
||||
|
||||
ASSERT_TRUE(read);
|
||||
ASSERT_TRUE(status.ok());
|
||||
ASSERT_EQ(captured_before_finish.size(), 1U);
|
||||
EXPECT_EQ(
|
||||
captured_before_finish.front().detail,
|
||||
"immediate stream sentinel");
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest,
|
||||
RecordsEveryStreamingFailureResponse)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::AgvMapStreamCommand_Request request;
|
||||
request.set_resume_token("multiple");
|
||||
auto reader = agv_stub_->streamMap(&context, request);
|
||||
api::AgvMapStreamCommand_Feedback response;
|
||||
|
||||
ASSERT_TRUE(reader->Read(&response));
|
||||
ASSERT_TRUE(reader->Read(&response));
|
||||
ASSERT_TRUE(reader->Finish().ok());
|
||||
|
||||
const auto captured = waitForRecords(2U);
|
||||
ASSERT_EQ(captured.size(), 2U);
|
||||
EXPECT_EQ(captured[0].detail, "first stream sentinel");
|
||||
EXPECT_EQ(captured[1].detail, "second stream sentinel");
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest,
|
||||
PreservesDifferentResponseAndStatusErrors)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::AgvMapStreamCommand_Request request;
|
||||
request.set_resume_token("different");
|
||||
auto reader = agv_stub_->streamMap(&context, request);
|
||||
api::AgvMapStreamCommand_Feedback response;
|
||||
|
||||
ASSERT_TRUE(reader->Read(&response));
|
||||
const grpc::Status status = reader->Finish();
|
||||
ASSERT_EQ(status.error_code(), grpc::StatusCode::INTERNAL);
|
||||
|
||||
const auto captured = waitForRecords(2U);
|
||||
ASSERT_EQ(captured.size(), 2U);
|
||||
EXPECT_EQ(captured[0].kind, GrpcFailureKind::APPLICATION);
|
||||
EXPECT_EQ(captured[0].detail, "application stream sentinel");
|
||||
EXPECT_EQ(captured[1].kind, GrpcFailureKind::GRPC_STATUS);
|
||||
EXPECT_EQ(captured[1].status_code, grpc::StatusCode::INTERNAL);
|
||||
EXPECT_EQ(captured[1].detail, "status stream sentinel");
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest,
|
||||
DoesNotDeduplicateLongErrorsByTruncatedPrefix)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::AgvMapStreamCommand_Request request;
|
||||
request.set_resume_token("long-different");
|
||||
auto reader = agv_stub_->streamMap(&context, request);
|
||||
api::AgvMapStreamCommand_Feedback response;
|
||||
|
||||
ASSERT_TRUE(reader->Read(&response));
|
||||
const grpc::Status status = reader->Finish();
|
||||
ASSERT_EQ(status.error_code(), grpc::StatusCode::INTERNAL);
|
||||
|
||||
const auto captured = waitForRecords(2U);
|
||||
ASSERT_EQ(captured.size(), 2U);
|
||||
EXPECT_EQ(captured[0].kind, GrpcFailureKind::APPLICATION);
|
||||
EXPECT_EQ(captured[1].kind, GrpcFailureKind::GRPC_STATUS);
|
||||
}
|
||||
|
||||
TEST(GrpcErrorLoggingInterceptorWireTest, RequiresHeaderAsFirstField)
|
||||
{
|
||||
api::CommandHeader_Feedback header;
|
||||
header.set_success(false);
|
||||
header.set_error_message("out-of-order sentinel");
|
||||
std::string payload;
|
||||
payload.push_back(static_cast<char>(0x12));
|
||||
payload.push_back(static_cast<char>(0x01));
|
||||
payload.push_back('x');
|
||||
payload.push_back(static_cast<char>(0x0a));
|
||||
payload.push_back(static_cast<char>(header.ByteSizeLong()));
|
||||
payload.append(header.SerializeAsString());
|
||||
|
||||
const auto result = callRawStartCamera(payload);
|
||||
|
||||
ASSERT_TRUE(result.status.ok());
|
||||
ASSERT_EQ(result.response, payload);
|
||||
ASSERT_EQ(result.records.size(), 1U);
|
||||
EXPECT_EQ(
|
||||
result.records.front().kind,
|
||||
GrpcFailureKind::MALFORMED_RESPONSE);
|
||||
}
|
||||
|
||||
TEST(GrpcErrorLoggingInterceptorWireTest, DoesNotScanPayloadAfterHeader)
|
||||
{
|
||||
api::CommandHeader_Feedback header;
|
||||
header.set_success(false);
|
||||
header.set_error_message("leading header sentinel");
|
||||
std::string payload;
|
||||
payload.push_back(static_cast<char>(0x0a));
|
||||
payload.push_back(static_cast<char>(header.ByteSizeLong()));
|
||||
payload.append(header.SerializeAsString());
|
||||
payload.push_back(static_cast<char>(0x12));
|
||||
payload.push_back(static_cast<char>(0xff));
|
||||
payload.append(2U * 1024U * 1024U, 'x');
|
||||
|
||||
const auto result = callRawStartCamera(payload);
|
||||
|
||||
ASSERT_TRUE(result.status.ok());
|
||||
ASSERT_EQ(result.records.size(), 1U);
|
||||
EXPECT_EQ(result.records.front().kind, GrpcFailureKind::APPLICATION);
|
||||
EXPECT_EQ(result.records.front().detail, "leading header sentinel");
|
||||
}
|
||||
|
||||
TEST(GrpcErrorLoggingInterceptorWireTest, TreatsExplicitEmptyHeaderAsFailure)
|
||||
{
|
||||
const std::string payload{
|
||||
static_cast<char>(0x0a), static_cast<char>(0x00)};
|
||||
|
||||
const auto result = callRawStartCamera(payload);
|
||||
|
||||
ASSERT_TRUE(result.status.ok());
|
||||
ASSERT_EQ(result.records.size(), 1U);
|
||||
EXPECT_EQ(result.records.front().kind, GrpcFailureKind::APPLICATION);
|
||||
EXPECT_EQ(
|
||||
result.records.front().detail,
|
||||
"operation failed without an error message");
|
||||
}
|
||||
|
||||
TEST(GrpcErrorLoggingInterceptorWireTest, RejectsInvalidHeaderWireType)
|
||||
{
|
||||
const std::string payload{
|
||||
static_cast<char>(0x08), static_cast<char>(0x01)};
|
||||
|
||||
const auto result = callRawStartCamera(payload);
|
||||
|
||||
ASSERT_TRUE(result.status.ok());
|
||||
ASSERT_EQ(result.records.size(), 1U);
|
||||
EXPECT_EQ(
|
||||
result.records.front().kind,
|
||||
GrpcFailureKind::MALFORMED_RESPONSE);
|
||||
}
|
||||
|
||||
TEST(GrpcErrorLoggingInterceptorWireTest, RejectsInvalidUtf8ErrorMessage)
|
||||
{
|
||||
const std::string payload{
|
||||
static_cast<char>(0x0a), static_cast<char>(0x04),
|
||||
static_cast<char>(0x12), static_cast<char>(0x02),
|
||||
static_cast<char>(0xc3), static_cast<char>(0x28)};
|
||||
|
||||
const auto result = callRawStartCamera(payload);
|
||||
|
||||
ASSERT_TRUE(result.status.ok());
|
||||
ASSERT_EQ(result.records.size(), 1U);
|
||||
EXPECT_EQ(
|
||||
result.records.front().kind,
|
||||
GrpcFailureKind::MALFORMED_RESPONSE);
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest, DoesNotRecordSuccessfulLargeResponse)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::GetRGBImageCommand_Request request;
|
||||
api::GetRGBImageCommand_Feedback response;
|
||||
|
||||
ASSERT_TRUE(camera_stub_->GetRGBImage(&context, request, &response).ok());
|
||||
ASSERT_TRUE(response.header().success());
|
||||
ASSERT_EQ(response.color_frame().data().size(), 2U * 1024U * 1024U);
|
||||
EXPECT_TRUE(records().empty());
|
||||
}
|
||||
|
||||
TEST_F(GrpcErrorLoggingInterceptorTest, IgnoresSuccessfulResponseWithoutHeader)
|
||||
{
|
||||
grpc::ClientContext context;
|
||||
setRpcDeadline(context);
|
||||
api::TestReqeust request;
|
||||
api::TestResponse response;
|
||||
request.set_data("ok");
|
||||
|
||||
ASSERT_TRUE(test_stub_->Call(&context, request, &response).ok());
|
||||
EXPECT_EQ(response.data(), "ok");
|
||||
EXPECT_TRUE(records().empty());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,391 +0,0 @@
|
||||
#include "service/grpc/server/include/grpc_head_service.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
|
||||
#include <grpcpp/grpcpp.h>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "cmvr/config/device_manager_config/device_manager_config.pb.h"
|
||||
#include "manager/device_manager/include/device_manager.h"
|
||||
#include "service/grpc/server/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
class FakeBiohead final : public device::AbstractBiohead {
|
||||
public:
|
||||
FakeBiohead() { id_ = "test-head"; }
|
||||
|
||||
std::string typeName() const override { return "FakeBiohead"; }
|
||||
bool stop() override
|
||||
{
|
||||
++lifecycle_stop_calls;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool setExpressionPoseIfCurrent(
|
||||
const OperationalToken token,
|
||||
device::FacialExpressionState&,
|
||||
double,
|
||||
double) override
|
||||
{
|
||||
return recordIfCurrent(token, set_expression_calls);
|
||||
}
|
||||
|
||||
bool streamFacialPoseIfCurrent(
|
||||
const OperationalToken token,
|
||||
device::FacialExpressionState&,
|
||||
double,
|
||||
double) override
|
||||
{
|
||||
return recordIfCurrent(token, stream_expression_calls);
|
||||
}
|
||||
|
||||
bool speakStartIfCurrent(const OperationalToken token) override
|
||||
{
|
||||
return recordIfCurrent(token, speak_start_calls);
|
||||
}
|
||||
|
||||
bool expressionHappyIfCurrent(const OperationalToken token) override
|
||||
{
|
||||
return recordIfCurrent(token, happy_calls);
|
||||
}
|
||||
|
||||
bool expressionSurprisedIfCurrent(const OperationalToken token) override
|
||||
{
|
||||
return recordIfCurrent(token, surprise_calls);
|
||||
}
|
||||
|
||||
bool expressionTiredIfCurrent(const OperationalToken token) override
|
||||
{
|
||||
return recordIfCurrent(token, tired_calls);
|
||||
}
|
||||
|
||||
bool expressionAngryIfCurrent(const OperationalToken token) override
|
||||
{
|
||||
return recordIfCurrent(token, angry_calls);
|
||||
}
|
||||
|
||||
bool expressionSadnessIfCurrent(const OperationalToken token) override
|
||||
{
|
||||
return recordIfCurrent(token, sadness_calls);
|
||||
}
|
||||
|
||||
bool expressionYawnIfCurrent(const OperationalToken token) override
|
||||
{
|
||||
return recordIfCurrent(token, yawn_calls);
|
||||
}
|
||||
|
||||
void speakstop() override { ++speak_stop_calls; }
|
||||
|
||||
bool stopOperationalActivity() override
|
||||
{
|
||||
invalidateOperationalActivities_();
|
||||
++operational_stop_calls;
|
||||
++speak_stop_calls;
|
||||
return stop_confirmed.load(std::memory_order_acquire);
|
||||
}
|
||||
|
||||
bool recordIfCurrent(
|
||||
const OperationalToken token,
|
||||
std::atomic<int>& calls)
|
||||
{
|
||||
return runIfOperationalActivityCurrent_(token, [&] { ++calls; });
|
||||
}
|
||||
|
||||
std::atomic<int> set_expression_calls{0};
|
||||
std::atomic<int> stream_expression_calls{0};
|
||||
std::atomic<int> speak_start_calls{0};
|
||||
std::atomic<int> speak_stop_calls{0};
|
||||
std::atomic<int> happy_calls{0};
|
||||
std::atomic<int> surprise_calls{0};
|
||||
std::atomic<int> tired_calls{0};
|
||||
std::atomic<int> angry_calls{0};
|
||||
std::atomic<int> sadness_calls{0};
|
||||
std::atomic<int> yawn_calls{0};
|
||||
std::atomic<int> operational_stop_calls{0};
|
||||
std::atomic<int> lifecycle_stop_calls{0};
|
||||
std::atomic<bool> stop_confirmed{true};
|
||||
};
|
||||
|
||||
class GrpcHeadServiceTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
device::DeviceManager::destroyInstance();
|
||||
globalStopAllAdmissionGate().clearForTesting();
|
||||
config::DeviceManagerConfig config;
|
||||
auto& manager = device::DeviceManager::getInstance(config);
|
||||
head_ = std::make_shared<FakeBiohead>();
|
||||
manager.registerDevice(head_);
|
||||
service_ = std::make_unique<gRPCMBioHeadServiceImpl>();
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
if (server_) {
|
||||
server_->Shutdown();
|
||||
server_->Wait();
|
||||
}
|
||||
stub_.reset();
|
||||
service_.reset();
|
||||
head_.reset();
|
||||
device::DeviceManager::destroyInstance();
|
||||
globalStopAllAdmissionGate().clearForTesting();
|
||||
}
|
||||
|
||||
bool startGrpcServer()
|
||||
{
|
||||
int selected_port = 0;
|
||||
grpc::ServerBuilder builder;
|
||||
builder.AddListeningPort(
|
||||
"127.0.0.1:0",
|
||||
grpc::InsecureServerCredentials(),
|
||||
&selected_port);
|
||||
builder.RegisterService(service_.get());
|
||||
server_ = builder.BuildAndStart();
|
||||
if (!server_ || selected_port <= 0) {
|
||||
return false;
|
||||
}
|
||||
const std::string address =
|
||||
"127.0.0.1:" + std::to_string(selected_port);
|
||||
stub_ = api::BioHeadService::NewStub(grpc::CreateChannel(
|
||||
address, grpc::InsecureChannelCredentials()));
|
||||
return stub_ != nullptr;
|
||||
}
|
||||
|
||||
static api::StreamFacialExpression_Request streamRequest()
|
||||
{
|
||||
api::StreamFacialExpression_Request request;
|
||||
request.mutable_header()->set_device_id("test-head");
|
||||
request.mutable_expr()->mutable_jaw()->set_x(0.5F);
|
||||
return request;
|
||||
}
|
||||
|
||||
std::shared_ptr<FakeBiohead> head_;
|
||||
std::unique_ptr<gRPCMBioHeadServiceImpl> service_;
|
||||
std::unique_ptr<grpc::Server> server_;
|
||||
std::unique_ptr<api::BioHeadService::Stub> stub_;
|
||||
};
|
||||
|
||||
TEST_F(GrpcHeadServiceTest,
|
||||
OperationalStopInvalidatesOldTokenWithoutStoppingLifecycle)
|
||||
{
|
||||
const auto old_token = head_->beginOperationalActivity();
|
||||
ASSERT_TRUE(head_->recordIfCurrent(old_token, head_->happy_calls));
|
||||
|
||||
EXPECT_TRUE(head_->stopOperationalActivity());
|
||||
EXPECT_FALSE(head_->recordIfCurrent(old_token, head_->happy_calls));
|
||||
EXPECT_EQ(head_->happy_calls.load(), 1);
|
||||
EXPECT_EQ(head_->operational_stop_calls.load(), 1);
|
||||
EXPECT_EQ(head_->lifecycle_stop_calls.load(), 0);
|
||||
|
||||
const auto current_token = head_->beginOperationalActivity();
|
||||
EXPECT_NE(current_token, old_token);
|
||||
EXPECT_TRUE(head_->recordIfCurrent(current_token, head_->happy_calls));
|
||||
EXPECT_EQ(head_->happy_calls.load(), 2);
|
||||
}
|
||||
|
||||
TEST_F(GrpcHeadServiceTest,
|
||||
StopAllGateRejectsMotionButAllowsOperationalStopRpcs)
|
||||
{
|
||||
const auto ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
|
||||
api::Happy_Request happy_request;
|
||||
happy_request.mutable_header()->set_device_id("test-head");
|
||||
api::Happy_Feedback happy_response;
|
||||
grpc::ServerContext happy_context;
|
||||
EXPECT_TRUE(service_->Happy(
|
||||
&happy_context, &happy_request, &happy_response).ok());
|
||||
EXPECT_FALSE(happy_response.header().success());
|
||||
EXPECT_EQ(head_->happy_calls.load(), 0);
|
||||
|
||||
api::Surprise_Request surprise_request;
|
||||
surprise_request.mutable_header()->set_device_id("test-head");
|
||||
api::Surprise_Feedback surprise_response;
|
||||
grpc::ServerContext surprise_context;
|
||||
EXPECT_TRUE(service_->Surprise(
|
||||
&surprise_context, &surprise_request, &surprise_response).ok());
|
||||
EXPECT_FALSE(surprise_response.header().success());
|
||||
EXPECT_EQ(head_->surprise_calls.load(), 0);
|
||||
|
||||
api::ExpressionTired_Request tired_request;
|
||||
tired_request.mutable_header()->set_device_id("test-head");
|
||||
api::ExpressionTired_Feedback tired_response;
|
||||
grpc::ServerContext tired_context;
|
||||
EXPECT_TRUE(service_->ExpressionTired(
|
||||
&tired_context, &tired_request, &tired_response).ok());
|
||||
EXPECT_FALSE(tired_response.header().success());
|
||||
EXPECT_EQ(head_->tired_calls.load(), 0);
|
||||
|
||||
api::ExpressionAngry_Request angry_request;
|
||||
angry_request.mutable_header()->set_device_id("test-head");
|
||||
api::ExpressionAngry_Feedback angry_response;
|
||||
grpc::ServerContext angry_context;
|
||||
EXPECT_TRUE(service_->ExpressionAngry(
|
||||
&angry_context, &angry_request, &angry_response).ok());
|
||||
EXPECT_FALSE(angry_response.header().success());
|
||||
EXPECT_EQ(head_->angry_calls.load(), 0);
|
||||
|
||||
api::ExpressionSadness_Request sadness_request;
|
||||
sadness_request.mutable_header()->set_device_id("test-head");
|
||||
api::ExpressionSadness_Feedback sadness_response;
|
||||
grpc::ServerContext sadness_context;
|
||||
EXPECT_TRUE(service_->ExpressionSadness(
|
||||
&sadness_context, &sadness_request, &sadness_response).ok());
|
||||
EXPECT_FALSE(sadness_response.header().success());
|
||||
EXPECT_EQ(head_->sadness_calls.load(), 0);
|
||||
|
||||
api::ExpressionYawn_Request yawn_request;
|
||||
yawn_request.mutable_header()->set_device_id("test-head");
|
||||
api::ExpressionYawn_Feedback yawn_response;
|
||||
grpc::ServerContext yawn_context;
|
||||
EXPECT_TRUE(service_->ExpressionYawn(
|
||||
&yawn_context, &yawn_request, &yawn_response).ok());
|
||||
EXPECT_FALSE(yawn_response.header().success());
|
||||
EXPECT_EQ(head_->yawn_calls.load(), 0);
|
||||
|
||||
api::SetFacialExpression_Request expression_request;
|
||||
expression_request.mutable_header()->set_device_id("test-head");
|
||||
api::SetFacialExpression_Feedback expression_response;
|
||||
grpc::ServerContext expression_context;
|
||||
EXPECT_TRUE(service_->SetExpression(
|
||||
&expression_context,
|
||||
&expression_request,
|
||||
&expression_response).ok());
|
||||
EXPECT_FALSE(expression_response.header().success());
|
||||
EXPECT_EQ(head_->set_expression_calls.load(), 0);
|
||||
|
||||
api::SpeakStart_Request speak_request;
|
||||
speak_request.mutable_header()->set_device_id("test-head");
|
||||
api::SpeakStart_Feedback speak_response;
|
||||
grpc::ServerContext speak_context;
|
||||
EXPECT_TRUE(service_->SpeakStart(
|
||||
&speak_context, &speak_request, &speak_response).ok());
|
||||
EXPECT_FALSE(speak_response.header().success());
|
||||
EXPECT_EQ(head_->speak_start_calls.load(), 0);
|
||||
|
||||
api::SpeakStop_Request speak_stop_request;
|
||||
speak_stop_request.mutable_header()->set_device_id("test-head");
|
||||
api::SpeakStop_Feedback speak_stop_response;
|
||||
grpc::ServerContext speak_stop_context;
|
||||
EXPECT_TRUE(service_->SpeakStop(
|
||||
&speak_stop_context,
|
||||
&speak_stop_request,
|
||||
&speak_stop_response).ok());
|
||||
EXPECT_TRUE(speak_stop_response.header().success());
|
||||
|
||||
api::EmergencyStop_Request stop_request;
|
||||
stop_request.mutable_header()->set_device_id("test-head");
|
||||
api::EmergencyStop_Feedback stop_response;
|
||||
grpc::ServerContext stop_context;
|
||||
EXPECT_TRUE(service_->EmergencyStop(
|
||||
&stop_context, &stop_request, &stop_response).ok());
|
||||
EXPECT_TRUE(stop_response.header().success());
|
||||
EXPECT_EQ(head_->operational_stop_calls.load(), 1);
|
||||
EXPECT_EQ(head_->lifecycle_stop_calls.load(), 0);
|
||||
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(ticket, true));
|
||||
}
|
||||
|
||||
TEST_F(GrpcHeadServiceTest,
|
||||
StreamIsCancelledByStopAllAndNewStreamWorksAfterRecovery)
|
||||
{
|
||||
ASSERT_TRUE(startGrpcServer());
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 2s);
|
||||
auto stream = stub_->StreamExpression(&context);
|
||||
|
||||
ASSERT_TRUE(stream->Write(streamRequest()));
|
||||
api::StreamFacialExpression_Feedback feedback;
|
||||
ASSERT_TRUE(stream->Read(&feedback));
|
||||
ASSERT_TRUE(feedback.header().success());
|
||||
ASSERT_EQ(head_->stream_expression_calls.load(), 1);
|
||||
|
||||
const auto admission_ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
const auto media_ticket = globalMediaActivityCoordinator().beginStopAll();
|
||||
ASSERT_TRUE(admission_ticket.valid());
|
||||
ASSERT_TRUE(media_ticket.valid());
|
||||
|
||||
(void)stream->Write(streamRequest());
|
||||
stream->WritesDone();
|
||||
while (stream->Read(&feedback)) {
|
||||
}
|
||||
const auto status = stream->Finish();
|
||||
EXPECT_TRUE(
|
||||
status.ok() || status.error_code() == grpc::StatusCode::CANCELLED);
|
||||
EXPECT_TRUE(globalMediaActivityCoordinator().waitForStopped(
|
||||
media_ticket, 1s));
|
||||
EXPECT_EQ(head_->stream_expression_calls.load(), 1);
|
||||
EXPECT_TRUE(globalMediaActivityCoordinator().finishStopAll(
|
||||
media_ticket, true));
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(
|
||||
admission_ticket, true));
|
||||
|
||||
grpc::ClientContext resumed_context;
|
||||
resumed_context.set_deadline(std::chrono::system_clock::now() + 2s);
|
||||
auto resumed = stub_->StreamExpression(&resumed_context);
|
||||
ASSERT_TRUE(resumed->Write(streamRequest()));
|
||||
ASSERT_TRUE(resumed->Read(&feedback));
|
||||
EXPECT_TRUE(feedback.header().success());
|
||||
EXPECT_EQ(head_->stream_expression_calls.load(), 2);
|
||||
resumed_context.TryCancel();
|
||||
resumed->WritesDone();
|
||||
while (resumed->Read(&feedback)) {
|
||||
}
|
||||
(void)resumed->Finish();
|
||||
}
|
||||
|
||||
TEST_F(GrpcHeadServiceTest,
|
||||
StopAllCancelsStreamBeforeItsFirstFrameCanClearStopState)
|
||||
{
|
||||
ASSERT_TRUE(startGrpcServer());
|
||||
grpc::ClientContext context;
|
||||
context.set_deadline(std::chrono::system_clock::now() + 2s);
|
||||
auto stream = stub_->StreamExpression(&context);
|
||||
|
||||
std::this_thread::sleep_for(20ms);
|
||||
const auto admission_ticket = globalStopAllAdmissionGate().beginStopAll();
|
||||
const auto media_ticket = globalMediaActivityCoordinator().beginStopAll();
|
||||
ASSERT_TRUE(admission_ticket.valid());
|
||||
ASSERT_TRUE(media_ticket.valid());
|
||||
|
||||
(void)stream->Write(streamRequest());
|
||||
stream->WritesDone();
|
||||
api::StreamFacialExpression_Feedback feedback;
|
||||
while (stream->Read(&feedback)) {
|
||||
}
|
||||
(void)stream->Finish();
|
||||
EXPECT_TRUE(globalMediaActivityCoordinator().waitForStopped(
|
||||
media_ticket, 1s));
|
||||
EXPECT_EQ(head_->stream_expression_calls.load(), 0);
|
||||
EXPECT_TRUE(globalMediaActivityCoordinator().finishStopAll(
|
||||
media_ticket, true));
|
||||
EXPECT_TRUE(globalStopAllAdmissionGate().finishStopAll(
|
||||
admission_ticket, true));
|
||||
}
|
||||
|
||||
TEST_F(GrpcHeadServiceTest, UnconfirmedOperationalStopIsReported)
|
||||
{
|
||||
head_->stop_confirmed = false;
|
||||
api::EmergencyStop_Request request;
|
||||
request.mutable_header()->set_device_id("test-head");
|
||||
api::EmergencyStop_Feedback response;
|
||||
grpc::ServerContext context;
|
||||
|
||||
EXPECT_TRUE(service_->EmergencyStop(&context, &request, &response).ok());
|
||||
EXPECT_FALSE(response.header().success());
|
||||
EXPECT_EQ(head_->operational_stop_calls.load(), 1);
|
||||
EXPECT_EQ(head_->lifecycle_stop_calls.load(), 0);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,525 +0,0 @@
|
||||
#include "service/grpc/server/include/grpc_robot_arm_teleop_backend.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <cstddef>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
class FakeRobotArm final : public device::RobotArm {
|
||||
public:
|
||||
FakeRobotArm()
|
||||
{
|
||||
id_ = "right_arm";
|
||||
model_.name = id_;
|
||||
model_.dof = 2;
|
||||
model_.joint_names = {"joint_1", "joint_2"};
|
||||
model_.joint_limits = {
|
||||
{-1.0, 1.0, 2.0, 5.0, 10.0},
|
||||
{-0.5, 0.5, 3.0, 6.0, 10.0}};
|
||||
|
||||
state_.connected = true;
|
||||
state_.powered_on = true;
|
||||
state_.robot_mode = device::RobotMode::Idle;
|
||||
state_.safety_mode = device::SafetyMode::Normal;
|
||||
state_.actual_joint_state.position = {0.0, 0.0};
|
||||
state_.actual_joint_state.velocity = {0.0, 0.0};
|
||||
state_.actual_joint_state.effort = {1.0, 2.0};
|
||||
state_.actual_joint_state.sequence = 7;
|
||||
state_.actual_joint_state.position_valid = true;
|
||||
state_.actual_joint_state.velocity_valid = true;
|
||||
state_.actual_joint_state.effort_valid = true;
|
||||
}
|
||||
|
||||
std::string typeName() const override { return "FakeRobotArm"; }
|
||||
device::RobotModel getRobotModel() const override { return model_; }
|
||||
std::size_t getDof() const override { return model_.dof; }
|
||||
device::ArmState getRobotState() const override
|
||||
{
|
||||
++get_state_calls;
|
||||
return state_;
|
||||
}
|
||||
device::JointGroupState getJointState() const override
|
||||
{
|
||||
return state_.actual_joint_state;
|
||||
}
|
||||
device::CartesianPose getTcpPose(
|
||||
device::FrameType = device::FrameType::Base) const override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
device::RobotMode getRobotMode() const override
|
||||
{
|
||||
return state_.robot_mode;
|
||||
}
|
||||
device::SafetyMode getSafetyMode() const override
|
||||
{
|
||||
return state_.safety_mode;
|
||||
}
|
||||
device::ControlMode getControlMode() const override
|
||||
{
|
||||
return device::ControlMode::Servo;
|
||||
}
|
||||
bool supportsTeleopGroupServo() const noexcept override
|
||||
{
|
||||
return group_servo_capability;
|
||||
}
|
||||
device::JointEffortSource jointEffortSource() const noexcept override
|
||||
{
|
||||
return effort_source;
|
||||
}
|
||||
|
||||
device::Result torqueOn() override
|
||||
{
|
||||
++torque_on_calls;
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result torqueOff() override { return device::Result::success(); }
|
||||
device::Result calibrateZeroQ(const std::string&) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result emergencyStop() override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result protectiveStop() override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result setSpeedScaling(double) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
double getSpeedScaling() const override { return 1.0; }
|
||||
bool isProtectiveStopped() const override { return false; }
|
||||
bool isEmergencyStopped() const override { return false; }
|
||||
bool isFault() const override { return state_.fault; }
|
||||
|
||||
device::Result moveJ(
|
||||
const device::JointPositionCommand&,
|
||||
const device::MotionOptions&) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result speedJ(
|
||||
const device::JointVelocityCommand&, double, double) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result stopJ(double) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result moveL(
|
||||
const device::CartesianPose&,
|
||||
const device::MotionOptions&,
|
||||
device::FrameType = device::FrameType::Base) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result speedL(
|
||||
const device::CartesianVelocity&,
|
||||
double,
|
||||
double,
|
||||
device::FrameType = device::FrameType::Base) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result stopL(std::optional<double> = std::nullopt) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result stopMotion() override
|
||||
{
|
||||
++stop_motion_calls;
|
||||
return stop_motion_result;
|
||||
}
|
||||
|
||||
device::Result startServoMode(
|
||||
const device::ServoOptions& options) override
|
||||
{
|
||||
++start_servo_calls;
|
||||
last_servo_period = options.period;
|
||||
return start_servo_result;
|
||||
}
|
||||
device::Result servoJ(
|
||||
const device::JointPositionCommand& target) override
|
||||
{
|
||||
++servo_j_calls;
|
||||
last_command = target.position;
|
||||
if (servo_sleep.count() > 0) {
|
||||
std::this_thread::sleep_for(servo_sleep);
|
||||
}
|
||||
return servo_j_result;
|
||||
}
|
||||
device::Result servoL(
|
||||
const device::CartesianPose&,
|
||||
device::FrameType = device::FrameType::Base) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result servoSpeedJ(
|
||||
const device::JointVelocityCommand&) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result servoSpeedL(
|
||||
const device::CartesianVelocity&,
|
||||
device::FrameType = device::FrameType::Base) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result stopServoMode() override
|
||||
{
|
||||
++stop_servo_calls;
|
||||
return stop_servo_result;
|
||||
}
|
||||
|
||||
device::Result connect(const std::string&, int) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result disconnect() override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
bool isConnected() const override { return state_.connected; }
|
||||
device::Result powerOn() override { return torqueOn(); }
|
||||
device::Result powerOff() override { return torqueOff(); }
|
||||
device::Result brakeRelease() override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result shutdown() override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result clearFault() override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result unlockProtectiveStop() override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result loadProgram(const std::string&) override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result playProgram() override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result pauseProgram() override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
device::Result stopProgram() override
|
||||
{
|
||||
return device::Result::success();
|
||||
}
|
||||
std::vector<double> ik(
|
||||
const std::string&,
|
||||
const std::string&,
|
||||
const device::CartesianPose&) override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
std::shared_ptr<cmvr::IKSolver> kinematicsSolver() const override
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
device::CartesianPose fk(
|
||||
const std::string&, const std::string&) override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
device::CartesianPose fk(bool = true) override { return {}; }
|
||||
device::CartesianVelocity getSpeedLCommandTwistBase() const override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
bool busy() const override { return false; }
|
||||
|
||||
bool group_servo_capability{true};
|
||||
device::JointEffortSource effort_source{
|
||||
device::JointEffortSource::Unspecified};
|
||||
mutable int get_state_calls{0};
|
||||
int torque_on_calls{0};
|
||||
int start_servo_calls{0};
|
||||
int servo_j_calls{0};
|
||||
int stop_motion_calls{0};
|
||||
int stop_servo_calls{0};
|
||||
double last_servo_period{0.0};
|
||||
std::vector<double> last_command;
|
||||
std::chrono::microseconds servo_sleep{0};
|
||||
device::Result start_servo_result{device::Result::success()};
|
||||
device::Result servo_j_result{device::Result::success()};
|
||||
device::Result stop_motion_result{device::Result::success()};
|
||||
device::Result stop_servo_result{device::Result::success()};
|
||||
device::RobotModel model_;
|
||||
device::ArmState state_;
|
||||
};
|
||||
|
||||
config::ArmTeleopBackendConfig validConfig()
|
||||
{
|
||||
config::ArmTeleopBackendConfig config;
|
||||
config.set_enable(true);
|
||||
config.set_device_id("right_arm");
|
||||
config.set_model_sha256(std::string(64, 'a'));
|
||||
config.set_calibration_sha256(std::string(64, 'b'));
|
||||
config.set_base_frame("base_link");
|
||||
config.set_tool_frame("tool_link");
|
||||
config.set_servo_period_s(0.01);
|
||||
config.set_max_apply_duration_us(5000);
|
||||
config.set_require_powered(true);
|
||||
config.set_max_initial_position_step_rad(0.2);
|
||||
config.set_max_position_step_rad(0.015);
|
||||
return config;
|
||||
}
|
||||
|
||||
arm_teleop::JointSetpoint setpoint(
|
||||
const double first,
|
||||
const double second,
|
||||
const double first_velocity = 0.0,
|
||||
const double second_velocity = 0.0)
|
||||
{
|
||||
arm_teleop::JointSetpoint value;
|
||||
value.set_sequence(1);
|
||||
value.add_position_rad(first);
|
||||
value.add_position_rad(second);
|
||||
value.add_velocity_rad_s(first_velocity);
|
||||
value.add_velocity_rad_s(second_velocity);
|
||||
value.set_valid_for_us(5000);
|
||||
return value;
|
||||
}
|
||||
|
||||
arm_teleop::OpenSession openRequest()
|
||||
{
|
||||
arm_teleop::OpenSession request;
|
||||
request.set_requested_command_rate_hz(100);
|
||||
return request;
|
||||
}
|
||||
|
||||
std::chrono::steady_clock::time_point liveDeadline()
|
||||
{
|
||||
return std::chrono::steady_clock::now() +
|
||||
std::chrono::seconds(1);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, RejectsArmWithoutExplicitGroupServoCapability)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
arm->group_servo_capability = false;
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, validConfig());
|
||||
|
||||
EXPECT_FALSE(backend->available());
|
||||
EXPECT_NE(
|
||||
backend->unavailableReason().find("capability"),
|
||||
std::string::npos);
|
||||
EXPECT_EQ(arm->start_servo_calls, 0);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, OpenStartsServoButNeverPowersArm)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, validConfig());
|
||||
|
||||
ASSERT_TRUE(backend->available())
|
||||
<< backend->unavailableReason();
|
||||
EXPECT_TRUE(backend->open(openRequest()).success);
|
||||
EXPECT_EQ(arm->start_servo_calls, 1);
|
||||
EXPECT_DOUBLE_EQ(arm->last_servo_period, 0.01);
|
||||
EXPECT_EQ(arm->torque_on_calls, 0);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, AppliesSetpointAndAlwaysRunsBothStopPaths)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, validConfig());
|
||||
ASSERT_TRUE(backend->open(openRequest()).success);
|
||||
|
||||
ASSERT_TRUE(
|
||||
backend->applySetpoint(
|
||||
setpoint(0.1, 0.1), liveDeadline()).success);
|
||||
EXPECT_EQ(arm->servo_j_calls, 1);
|
||||
EXPECT_EQ(arm->last_command, (std::vector<double>{0.1, 0.1}));
|
||||
|
||||
arm->stop_motion_result = device::Result::failure(
|
||||
device::ArmErrorCode::CommandFailed, "motion stop failed");
|
||||
const auto result = backend->stop(
|
||||
arm_teleop::STOP_REASON_OPERATOR_REQUEST, "test");
|
||||
EXPECT_FALSE(result.success);
|
||||
EXPECT_EQ(arm->stop_motion_calls, 1);
|
||||
EXPECT_EQ(arm->stop_servo_calls, 1);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, RejectsInitialAndContinuousPositionSteps)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, validConfig());
|
||||
ASSERT_TRUE(backend->open(openRequest()).success);
|
||||
|
||||
EXPECT_EQ(
|
||||
backend->applySetpoint(
|
||||
setpoint(0.21, 0.0), liveDeadline()).status_code,
|
||||
grpc::StatusCode::OUT_OF_RANGE);
|
||||
ASSERT_TRUE(
|
||||
backend->applySetpoint(
|
||||
setpoint(0.1, 0.1), liveDeadline()).success);
|
||||
EXPECT_EQ(
|
||||
backend->applySetpoint(
|
||||
setpoint(0.12, 0.1), liveDeadline()).status_code,
|
||||
grpc::StatusCode::OUT_OF_RANGE);
|
||||
EXPECT_EQ(arm->servo_j_calls, 1);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, RejectsJointPositionAndVelocityLimits)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, validConfig());
|
||||
ASSERT_TRUE(backend->open(openRequest()).success);
|
||||
|
||||
EXPECT_EQ(
|
||||
backend->applySetpoint(
|
||||
setpoint(1.01, 0.0), liveDeadline()).status_code,
|
||||
grpc::StatusCode::OUT_OF_RANGE);
|
||||
EXPECT_EQ(
|
||||
backend->applySetpoint(
|
||||
setpoint(0.0, 0.0, 2.01, 0.0), liveDeadline())
|
||||
.status_code,
|
||||
grpc::StatusCode::OUT_OF_RANGE);
|
||||
EXPECT_EQ(arm->servo_j_calls, 0);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, DetectsServoApplyTimeout)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
auto config = validConfig();
|
||||
config.set_max_apply_duration_us(500);
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, config);
|
||||
ASSERT_TRUE(backend->open(openRequest()).success);
|
||||
arm->servo_sleep = std::chrono::microseconds(1500);
|
||||
|
||||
const auto result =
|
||||
backend->applySetpoint(
|
||||
setpoint(0.1, 0.1), liveDeadline());
|
||||
EXPECT_FALSE(result.success);
|
||||
EXPECT_EQ(
|
||||
result.status_code,
|
||||
grpc::StatusCode::DEADLINE_EXCEEDED);
|
||||
EXPECT_EQ(arm->servo_j_calls, 1);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, RejectsInsufficientDeadlineBudgetBeforeDispatch)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, validConfig());
|
||||
ASSERT_TRUE(backend->open(openRequest()).success);
|
||||
|
||||
const auto result = backend->applySetpoint(
|
||||
setpoint(0.1, 0.1),
|
||||
std::chrono::steady_clock::now() +
|
||||
std::chrono::microseconds(100));
|
||||
EXPECT_FALSE(result.success);
|
||||
EXPECT_EQ(
|
||||
result.status_code,
|
||||
grpc::StatusCode::DEADLINE_EXCEEDED);
|
||||
EXPECT_EQ(arm->servo_j_calls, 0);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, ExpiredDeadlineNeverDispatchesServoCommand)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, validConfig());
|
||||
ASSERT_TRUE(backend->open(openRequest()).success);
|
||||
|
||||
const auto result = backend->applySetpoint(
|
||||
setpoint(0.1, 0.1),
|
||||
std::chrono::steady_clock::now());
|
||||
EXPECT_FALSE(result.success);
|
||||
EXPECT_EQ(
|
||||
result.status_code,
|
||||
grpc::StatusCode::DEADLINE_EXCEEDED);
|
||||
EXPECT_EQ(arm->servo_j_calls, 0);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, RejectsUnsupportedRateAndEarlyRedispatch)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, validConfig());
|
||||
auto too_fast = openRequest();
|
||||
too_fast.set_requested_command_rate_hz(101);
|
||||
EXPECT_EQ(
|
||||
backend->open(too_fast).status_code,
|
||||
grpc::StatusCode::FAILED_PRECONDITION);
|
||||
EXPECT_EQ(arm->start_servo_calls, 0);
|
||||
|
||||
ASSERT_TRUE(backend->open(openRequest()).success);
|
||||
ASSERT_TRUE(
|
||||
backend->applySetpoint(
|
||||
setpoint(0.1, 0.1), liveDeadline()).success);
|
||||
EXPECT_EQ(
|
||||
backend->applySetpoint(
|
||||
setpoint(0.105, 0.105), liveDeadline()).status_code,
|
||||
grpc::StatusCode::RESOURCE_EXHAUSTED);
|
||||
EXPECT_EQ(arm->servo_j_calls, 1);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, SnapshotUsesCacheAndHidesUnverifiedEffort)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, validConfig());
|
||||
ASSERT_TRUE(backend->open(openRequest()).success);
|
||||
const int calls_after_open = arm->get_state_calls;
|
||||
|
||||
const auto first = backend->snapshot();
|
||||
const auto second = backend->snapshot();
|
||||
EXPECT_EQ(arm->get_state_calls, calls_after_open);
|
||||
EXPECT_TRUE(first.joint_state.position_valid());
|
||||
EXPECT_TRUE(first.joint_state.velocity_valid());
|
||||
EXPECT_FALSE(first.joint_state.effort_valid());
|
||||
EXPECT_EQ(first.joint_state.effort_nm_size(), 0);
|
||||
EXPECT_EQ(
|
||||
second.joint_state.effort_source(),
|
||||
arm_teleop::EFFORT_SOURCE_UNSPECIFIED);
|
||||
}
|
||||
|
||||
TEST(RobotArmTeleopBackendTest, PublishesEffortOnlyWithExplicitSource)
|
||||
{
|
||||
auto arm = std::make_shared<FakeRobotArm>();
|
||||
arm->effort_source = device::JointEffortSource::JointSensor;
|
||||
const auto backend =
|
||||
makeRobotArmTeleopBackend(arm, validConfig());
|
||||
ASSERT_TRUE(backend->open(openRequest()).success);
|
||||
|
||||
const auto snapshot = backend->snapshot();
|
||||
EXPECT_TRUE(backend->supportsForceFeedback());
|
||||
EXPECT_TRUE(snapshot.joint_state.effort_valid());
|
||||
EXPECT_EQ(snapshot.joint_state.effort_nm_size(), 2);
|
||||
EXPECT_EQ(
|
||||
snapshot.joint_state.effort_source(),
|
||||
arm_teleop::EFFORT_SOURCE_JOINT_SENSOR);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,294 +0,0 @@
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <google/protobuf/descriptor.h>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "cmvr/api/agv_service.pb.h"
|
||||
#include "cmvr/api/arm_service.pb.h"
|
||||
#include "cmvr/api/arm_teleop_v1.pb.h"
|
||||
#include "cmvr/api/biohead_service.pb.h"
|
||||
#include "cmvr/api/camera_service.pb.h"
|
||||
#include "cmvr/api/dexhand_service.pb.h"
|
||||
#include "cmvr/api/hlc_service.pb.h"
|
||||
#include "cmvr/api/microphone_service.pb.h"
|
||||
#include "cmvr/api/motor_service.pb.h"
|
||||
#include "cmvr/api/speaker_service.pb.h"
|
||||
#include "cmvr/api/system_service.pb.h"
|
||||
#include "cmvr/api/test_service.pb.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
GrpcMethodPolicy readPolicy()
|
||||
{
|
||||
return {
|
||||
"/cmvr.api.SystemService/GetSystemInfo",
|
||||
GrpcAccessClass::Read,
|
||||
GrpcRole::Observer};
|
||||
}
|
||||
|
||||
GrpcMethodPolicy recoveryPolicy()
|
||||
{
|
||||
return {
|
||||
"/cmvr.api.SystemService/RecoverSafetyState",
|
||||
GrpcAccessClass::Recover,
|
||||
GrpcRole::SafetyAdmin};
|
||||
}
|
||||
|
||||
class SafetyAdminProvider final : public GrpcAuthenticationProvider {
|
||||
public:
|
||||
GrpcAuthenticationResult authenticate(const GrpcCallFacts&) const override
|
||||
{
|
||||
GrpcPrincipal principal;
|
||||
principal.id = "maintenance";
|
||||
principal.method = GrpcAuthenticationMethod::StaticToken;
|
||||
principal.authenticated = true;
|
||||
principal.roles = {GrpcRole::SafetyAdmin};
|
||||
return {std::move(principal), grpc::Status::OK};
|
||||
}
|
||||
};
|
||||
|
||||
TEST(GrpcSecurityConfigTest,
|
||||
LegacyConfigPreservesAnonymousAccessButDisablesRecovery)
|
||||
{
|
||||
config::GRPCServerConfig config;
|
||||
const auto result = resolveGrpcSecurityConfig(config, "0.0.0.0");
|
||||
|
||||
ASSERT_TRUE(result.valid) << result.error;
|
||||
EXPECT_TRUE(result.config.legacy_compatibility);
|
||||
EXPECT_TRUE(result.config.insecure_non_loopback);
|
||||
EXPECT_EQ(
|
||||
result.config.authentication, GrpcAuthenticationMethod::Disabled);
|
||||
EXPECT_EQ(
|
||||
result.config.recovery_exposure, GrpcRecoveryExposure::Disabled);
|
||||
EXPECT_FALSE(result.warnings.empty());
|
||||
}
|
||||
|
||||
TEST(GrpcSecurityConfigTest,
|
||||
ExplicitNonLoopbackInsecureRequiresAcknowledgement)
|
||||
{
|
||||
config::GRPCServerConfig config;
|
||||
auto* security = config.mutable_security();
|
||||
security->set_transport_mode(config::GRPCSecurityConfig::INSECURE);
|
||||
security->set_authentication_mode(config::GRPCSecurityConfig::DISABLED);
|
||||
security->set_recovery_exposure(
|
||||
config::GRPCSecurityConfig::RECOVERY_DISABLED);
|
||||
|
||||
const auto rejected = resolveGrpcSecurityConfig(config, "0.0.0.0");
|
||||
EXPECT_FALSE(rejected.valid);
|
||||
|
||||
security->set_allow_insecure_non_loopback(true);
|
||||
const auto accepted = resolveGrpcSecurityConfig(config, "0.0.0.0");
|
||||
ASSERT_TRUE(accepted.valid) << accepted.error;
|
||||
EXPECT_TRUE(accepted.config.insecure_non_loopback);
|
||||
}
|
||||
|
||||
TEST(GrpcSecurityConfigTest,
|
||||
UnsupportedAuthenticationNeverFallsBackToDisabled)
|
||||
{
|
||||
config::GRPCServerConfig config;
|
||||
auto* security = config.mutable_security();
|
||||
security->set_transport_mode(config::GRPCSecurityConfig::INSECURE);
|
||||
security->set_authentication_mode(
|
||||
config::GRPCSecurityConfig::STATIC_TOKEN);
|
||||
security->set_recovery_exposure(
|
||||
config::GRPCSecurityConfig::RECOVERY_AUTHORIZED);
|
||||
|
||||
const auto result = resolveGrpcSecurityConfig(config, "127.0.0.1");
|
||||
EXPECT_FALSE(result.valid);
|
||||
EXPECT_NE(result.error.find("DISABLED"), std::string::npos);
|
||||
}
|
||||
|
||||
TEST(GrpcSecurityConfigTest, EnabledRecoveryRequiresPersistentAuditFile)
|
||||
{
|
||||
config::GRPCServerConfig config;
|
||||
auto* security = config.mutable_security();
|
||||
security->set_transport_mode(config::GRPCSecurityConfig::INSECURE);
|
||||
security->set_authentication_mode(config::GRPCSecurityConfig::DISABLED);
|
||||
security->set_recovery_exposure(
|
||||
config::GRPCSecurityConfig::RECOVERY_LOCAL_ONLY);
|
||||
|
||||
const auto rejected =
|
||||
resolveGrpcSecurityConfig(config, "127.0.0.1");
|
||||
EXPECT_FALSE(rejected.valid);
|
||||
EXPECT_NE(rejected.error.find("audit_file"), std::string::npos);
|
||||
|
||||
security->set_audit_file("/var/lib/cmvr-es/recovery-audit.jsonl");
|
||||
const auto accepted =
|
||||
resolveGrpcSecurityConfig(config, "127.0.0.1");
|
||||
ASSERT_TRUE(accepted.valid) << accepted.error;
|
||||
EXPECT_EQ(
|
||||
accepted.config.recovery_audit_file,
|
||||
"/var/lib/cmvr-es/recovery-audit.jsonl");
|
||||
}
|
||||
|
||||
TEST(GrpcSecurityGatewayTest, DisabledProviderDoesNotTrustIdentityMetadata)
|
||||
{
|
||||
auto gateway = makeDefaultGrpcSecurityGateway();
|
||||
GrpcCallFacts facts;
|
||||
facts.peer = "ipv4:10.0.0.5:12345";
|
||||
facts.metadata.emplace("principal", "safety-admin");
|
||||
facts.metadata.emplace("role", "SafetyAdmin");
|
||||
|
||||
const auto call = gateway->beginCall(std::move(facts), readPolicy());
|
||||
|
||||
ASSERT_TRUE(call.allowed()) << call.status().error_message();
|
||||
EXPECT_EQ(call.context().principal.id, "anonymous");
|
||||
EXPECT_FALSE(call.context().principal.authenticated);
|
||||
ASSERT_EQ(call.context().principal.roles.size(), 1U);
|
||||
EXPECT_EQ(call.context().principal.roles.front(), GrpcRole::Anonymous);
|
||||
}
|
||||
|
||||
TEST(GrpcSecurityGatewayTest, RecoveryIsDisabledBeforeLedgerAdmission)
|
||||
{
|
||||
auto gateway = makeDefaultGrpcSecurityGateway();
|
||||
const auto call = gateway->beginCall(GrpcCallFacts{}, recoveryPolicy());
|
||||
|
||||
EXPECT_FALSE(call.allowed());
|
||||
EXPECT_EQ(
|
||||
call.status().error_code(), grpc::StatusCode::FAILED_PRECONDITION);
|
||||
EXPECT_EQ(call.status().error_message(), "RECOVERY_RPC_DISABLED");
|
||||
}
|
||||
|
||||
TEST(GrpcSecurityGatewayTest, LocalOnlyRecoveryUsesActualPeerClassification)
|
||||
{
|
||||
GrpcSecurityRuntimeConfig config;
|
||||
config.recovery_exposure = GrpcRecoveryExposure::LocalOnly;
|
||||
auto gateway = makeGrpcSecurityGateway(config);
|
||||
|
||||
GrpcCallFacts remote;
|
||||
remote.peer = "ipv4:192.168.1.20:42000";
|
||||
EXPECT_FALSE(gateway->beginCall(remote, recoveryPolicy()).allowed());
|
||||
|
||||
GrpcCallFacts local;
|
||||
local.peer = "ipv4:127.0.0.1:42000";
|
||||
EXPECT_TRUE(gateway->beginCall(local, recoveryPolicy()).allowed());
|
||||
|
||||
EXPECT_TRUE(isLocalGrpcPeer("ipv6:[::1]"));
|
||||
EXPECT_TRUE(isLocalGrpcPeer("unix:/run/cmvr-es.sock"));
|
||||
EXPECT_FALSE(isLocalGrpcPeer("ipv4:10.0.0.1:50051"));
|
||||
}
|
||||
|
||||
TEST(GrpcSecurityGatewayTest, AuthorizedRecoveryAcceptsSafetyAdminProvider)
|
||||
{
|
||||
GrpcSecurityRuntimeConfig config;
|
||||
config.authentication = GrpcAuthenticationMethod::StaticToken;
|
||||
config.recovery_exposure = GrpcRecoveryExposure::Authorized;
|
||||
auto gateway = std::make_shared<GrpcSecurityGateway>(
|
||||
config,
|
||||
std::make_shared<SafetyAdminProvider>(),
|
||||
std::make_shared<CompatibilityGrpcAuthorizationPolicy>(
|
||||
GrpcRecoveryExposure::Authorized));
|
||||
|
||||
const auto call = gateway->beginCall(GrpcCallFacts{}, recoveryPolicy());
|
||||
ASSERT_TRUE(call.allowed()) << call.status().error_message();
|
||||
EXPECT_EQ(call.context().principal.id, "maintenance");
|
||||
}
|
||||
|
||||
TEST(GrpcSecurityGatewayTest, AuditUsesEffectiveServerPrincipal)
|
||||
{
|
||||
std::vector<GrpcSecurityAuditRecord> records;
|
||||
GrpcSecurityRuntimeConfig config;
|
||||
auto gateway = makeGrpcSecurityGateway(
|
||||
config,
|
||||
[&records](const GrpcSecurityAuditRecord& record) {
|
||||
records.push_back(record);
|
||||
});
|
||||
|
||||
GrpcCallFacts facts;
|
||||
facts.metadata.emplace("x-correlation-id", "request-42");
|
||||
ASSERT_TRUE(gateway->beginCall(std::move(facts), readPolicy()).allowed());
|
||||
|
||||
ASSERT_EQ(records.size(), 1U);
|
||||
EXPECT_EQ(records.front().correlation_id, "request-42");
|
||||
EXPECT_EQ(records.front().principal_id, "anonymous");
|
||||
EXPECT_FALSE(records.front().authenticated);
|
||||
}
|
||||
|
||||
TEST(GrpcMethodPolicyRegistryTest, RejectsDuplicatesAndSortsSnapshot)
|
||||
{
|
||||
GrpcMethodPolicyRegistry registry;
|
||||
EXPECT_TRUE(registry.registerPolicy(recoveryPolicy()));
|
||||
EXPECT_TRUE(registry.registerPolicy(readPolicy()));
|
||||
EXPECT_FALSE(registry.registerPolicy(readPolicy()));
|
||||
|
||||
const auto policies = registry.snapshot();
|
||||
ASSERT_EQ(policies.size(), 2U);
|
||||
EXPECT_LT(policies[0].full_method_name, policies[1].full_method_name);
|
||||
EXPECT_TRUE(registry.find(readPolicy().full_method_name).has_value());
|
||||
EXPECT_FALSE(registry.find("/unknown/method").has_value());
|
||||
}
|
||||
|
||||
TEST(GrpcMethodPolicyRegistryTest,
|
||||
DefaultRegistryCoversEveryCompiledApiMethod)
|
||||
{
|
||||
const auto& registry = defaultGrpcMethodPolicyRegistry();
|
||||
const auto* pool = google::protobuf::DescriptorPool::generated_pool();
|
||||
const std::vector<std::string> services{
|
||||
"cmvr.api.AgvService",
|
||||
"cmvr.api.ArmService",
|
||||
"cmvr.api.armteleop.v1.ArmTeleopService",
|
||||
"cmvr.api.BioHeadService",
|
||||
"cmvr.api.CameraService",
|
||||
"cmvr.api.DexHandService",
|
||||
"cmvr.api.HlcService",
|
||||
"cmvr.api.MicPhoneService",
|
||||
"cmvr.api.MotorService",
|
||||
"cmvr.api.SpeakerService",
|
||||
"cmvr.api.SystemService",
|
||||
"cmvr.api.TestService"};
|
||||
|
||||
std::size_t method_count = 0;
|
||||
for (const auto& service_name : services) {
|
||||
const auto* service = pool->FindServiceByName(service_name);
|
||||
ASSERT_NE(service, nullptr) << service_name;
|
||||
for (int index = 0; index < service->method_count(); ++index) {
|
||||
const auto* method = service->method(index);
|
||||
const std::string full_name =
|
||||
"/" + service_name + "/" +
|
||||
std::string(method->name());
|
||||
const auto policy = registry.find(full_name);
|
||||
ASSERT_TRUE(policy.has_value()) << full_name;
|
||||
EXPECT_EQ(
|
||||
policy->mutating,
|
||||
policy->access != GrpcAccessClass::Read) << full_name;
|
||||
if (policy->mutating) {
|
||||
EXPECT_NE(
|
||||
policy->command_intent,
|
||||
safety::CommandIntent::Observe) << full_name;
|
||||
}
|
||||
++method_count;
|
||||
}
|
||||
}
|
||||
EXPECT_EQ(registry.snapshot().size(), method_count);
|
||||
}
|
||||
|
||||
TEST(GrpcMethodPolicyRegistryTest,
|
||||
TouchIsAControlActuationRatherThanAReadOnlySensorCall)
|
||||
{
|
||||
const auto policy = defaultGrpcMethodPolicyRegistry().find(
|
||||
"/cmvr.api.HlcService/touch");
|
||||
ASSERT_TRUE(policy.has_value());
|
||||
EXPECT_EQ(policy->access, GrpcAccessClass::Mutate);
|
||||
EXPECT_EQ(policy->command_intent, safety::CommandIntent::Actuate);
|
||||
EXPECT_EQ(policy->policy_family, safety::SafetyPolicyFamily::Control);
|
||||
EXPECT_TRUE(policy->mutating);
|
||||
EXPECT_FALSE(policy->safety_lane);
|
||||
}
|
||||
|
||||
TEST(GrpcMethodPolicyRegistryTest, UnregisteredMethodFailsClosed)
|
||||
{
|
||||
const auto call = beginRegisteredGrpcCall(
|
||||
makeDefaultGrpcSecurityGateway(), nullptr,
|
||||
"/cmvr.api.UnknownService/Mutate");
|
||||
EXPECT_FALSE(call.allowed());
|
||||
EXPECT_EQ(call.status().error_code(), grpc::StatusCode::INTERNAL);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,279 +0,0 @@
|
||||
#include "service/grpc/server/include/media_activity_coordinator.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <future>
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include <thread>
|
||||
|
||||
namespace {
|
||||
|
||||
bool check(const bool condition, const char* expression, const int line)
|
||||
{
|
||||
if (condition) {
|
||||
return true;
|
||||
}
|
||||
std::cerr << "CHECK failed at line " << line << ": " << expression << '\n';
|
||||
return false;
|
||||
}
|
||||
|
||||
#define CHECK_TRUE(expression) \
|
||||
do { \
|
||||
if (!check(static_cast<bool>(expression), #expression, __LINE__)) { \
|
||||
return 1; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
{
|
||||
cmvr::service::MediaActivityCoordinator dispatch_coordinator;
|
||||
auto dispatch_session = dispatch_coordinator.beginSession();
|
||||
CHECK_TRUE(dispatch_session);
|
||||
|
||||
std::promise<void> dispatch_entered;
|
||||
auto dispatch_entered_future = dispatch_entered.get_future();
|
||||
std::promise<void> release_dispatch;
|
||||
auto release_dispatch_future = release_dispatch.get_future();
|
||||
auto dispatch_future = std::async(std::launch::async, [&] {
|
||||
return dispatch_session.runIfCurrent([&] {
|
||||
dispatch_entered.set_value();
|
||||
release_dispatch_future.wait();
|
||||
});
|
||||
});
|
||||
dispatch_entered_future.wait();
|
||||
|
||||
const auto dispatch_ticket = dispatch_coordinator.beginStopAll();
|
||||
CHECK_TRUE(dispatch_ticket.valid());
|
||||
CHECK_TRUE(!dispatch_coordinator.waitForStopped(
|
||||
dispatch_ticket, 20ms));
|
||||
|
||||
release_dispatch.set_value();
|
||||
CHECK_TRUE(dispatch_future.get());
|
||||
|
||||
dispatch_session.reset();
|
||||
CHECK_TRUE(dispatch_coordinator.waitForStopped(dispatch_ticket, 100ms));
|
||||
CHECK_TRUE(dispatch_coordinator.finishStopAll(dispatch_ticket, true));
|
||||
}
|
||||
|
||||
{
|
||||
cmvr::service::MediaActivityCoordinator generation_coordinator;
|
||||
auto old_generation_session = generation_coordinator.beginSession();
|
||||
CHECK_TRUE(old_generation_session);
|
||||
|
||||
const auto generation_ticket = generation_coordinator.beginStopAll();
|
||||
CHECK_TRUE(generation_ticket.valid());
|
||||
|
||||
std::atomic<int> dispatched_operations{0};
|
||||
CHECK_TRUE(!old_generation_session.runIfCurrent(
|
||||
[&] { ++dispatched_operations; }));
|
||||
CHECK_TRUE(dispatched_operations.load(std::memory_order_acquire) == 0);
|
||||
|
||||
old_generation_session.reset();
|
||||
CHECK_TRUE(
|
||||
generation_coordinator.waitForStopped(generation_ticket, 100ms));
|
||||
CHECK_TRUE(generation_coordinator.finishStopAll(generation_ticket, true));
|
||||
|
||||
auto current_generation_session = generation_coordinator.beginSession();
|
||||
CHECK_TRUE(current_generation_session);
|
||||
CHECK_TRUE(current_generation_session.runIfCurrent(
|
||||
[&] { ++dispatched_operations; }));
|
||||
CHECK_TRUE(dispatched_operations.load(std::memory_order_acquire) == 1);
|
||||
}
|
||||
|
||||
{
|
||||
cmvr::service::MediaActivityCoordinator deferred_coordinator;
|
||||
std::atomic<int> deferred_cancel_calls{0};
|
||||
auto deferred_session = deferred_coordinator.beginSession(
|
||||
[&] { ++deferred_cancel_calls; });
|
||||
CHECK_TRUE(deferred_session);
|
||||
|
||||
const auto deferred_ticket =
|
||||
deferred_coordinator.beginStopAll(true);
|
||||
CHECK_TRUE(deferred_ticket.valid());
|
||||
CHECK_TRUE(deferred_session.cancelled());
|
||||
CHECK_TRUE(!deferred_session.runIfCurrent([] {}));
|
||||
CHECK_TRUE(
|
||||
deferred_cancel_calls.load(std::memory_order_acquire) == 0);
|
||||
CHECK_TRUE(
|
||||
deferred_coordinator.requestCancellation(deferred_ticket));
|
||||
CHECK_TRUE(
|
||||
deferred_cancel_calls.load(std::memory_order_acquire) == 1);
|
||||
CHECK_TRUE(
|
||||
deferred_coordinator.requestCancellation(deferred_ticket));
|
||||
CHECK_TRUE(
|
||||
deferred_cancel_calls.load(std::memory_order_acquire) == 1);
|
||||
|
||||
deferred_session.reset();
|
||||
CHECK_TRUE(
|
||||
deferred_coordinator.waitForStopped(deferred_ticket, 100ms));
|
||||
CHECK_TRUE(
|
||||
deferred_coordinator.finishStopAll(deferred_ticket, true));
|
||||
CHECK_TRUE(
|
||||
!deferred_coordinator.requestCancellation(deferred_ticket));
|
||||
}
|
||||
|
||||
{
|
||||
cmvr::service::MediaActivityCoordinator parallel_coordinator;
|
||||
std::promise<void> blocked_cancel_entered;
|
||||
auto blocked_cancel_entered_future =
|
||||
blocked_cancel_entered.get_future();
|
||||
std::promise<void> release_blocked_cancel;
|
||||
auto release_blocked_cancel_future =
|
||||
release_blocked_cancel.get_future().share();
|
||||
std::promise<void> peer_cancel_entered;
|
||||
auto peer_cancel_entered_future = peer_cancel_entered.get_future();
|
||||
std::atomic<int> blocked_cancel_calls{0};
|
||||
std::atomic<int> peer_cancel_calls{0};
|
||||
|
||||
auto blocked_session = parallel_coordinator.beginSession([&] {
|
||||
++blocked_cancel_calls;
|
||||
blocked_cancel_entered.set_value();
|
||||
release_blocked_cancel_future.wait();
|
||||
});
|
||||
auto peer_session = parallel_coordinator.beginSession([&] {
|
||||
++peer_cancel_calls;
|
||||
peer_cancel_entered.set_value();
|
||||
});
|
||||
CHECK_TRUE(blocked_session && peer_session);
|
||||
|
||||
const auto ticket = parallel_coordinator.beginStopAll(true);
|
||||
std::vector<cmvr::service::DeferredStopOperation> operations;
|
||||
std::string collect_error;
|
||||
CHECK_TRUE(parallel_coordinator.collectCancellationOperations(
|
||||
ticket, operations, &collect_error));
|
||||
CHECK_TRUE(collect_error.empty());
|
||||
CHECK_TRUE(operations.size() == 2);
|
||||
CHECK_TRUE(operations[0].resource_key != operations[1].resource_key);
|
||||
|
||||
auto first = std::async(std::launch::async, operations[0].operation);
|
||||
auto second = std::async(std::launch::async, operations[1].operation);
|
||||
CHECK_TRUE(blocked_cancel_entered_future.wait_for(100ms) ==
|
||||
std::future_status::ready);
|
||||
CHECK_TRUE(peer_cancel_entered_future.wait_for(100ms) ==
|
||||
std::future_status::ready);
|
||||
release_blocked_cancel.set_value();
|
||||
CHECK_TRUE(first.get().success);
|
||||
CHECK_TRUE(second.get().success);
|
||||
CHECK_TRUE(operations[0].operation().success);
|
||||
CHECK_TRUE(operations[1].operation().success);
|
||||
CHECK_TRUE(blocked_cancel_calls.load() == 1);
|
||||
CHECK_TRUE(peer_cancel_calls.load() == 1);
|
||||
|
||||
blocked_session.reset();
|
||||
peer_session.reset();
|
||||
CHECK_TRUE(parallel_coordinator.waitForStopped(ticket, 100ms));
|
||||
CHECK_TRUE(parallel_coordinator.finishStopAll(ticket, true));
|
||||
CHECK_TRUE(!parallel_coordinator.collectCancellationOperations(
|
||||
ticket, operations, &collect_error));
|
||||
CHECK_TRUE(!collect_error.empty());
|
||||
}
|
||||
|
||||
{
|
||||
cmvr::service::MediaActivityCoordinator exception_coordinator;
|
||||
std::atomic<int> throwing_cancel_calls{0};
|
||||
auto throwing_session = exception_coordinator.beginSession([&] {
|
||||
++throwing_cancel_calls;
|
||||
throw std::runtime_error("cancel failed");
|
||||
});
|
||||
CHECK_TRUE(throwing_session);
|
||||
const auto ticket = exception_coordinator.beginStopAll(true);
|
||||
std::vector<cmvr::service::DeferredStopOperation> operations;
|
||||
CHECK_TRUE(exception_coordinator.collectCancellationOperations(
|
||||
ticket, operations));
|
||||
CHECK_TRUE(operations.size() == 1);
|
||||
const auto result = operations[0].operation();
|
||||
const auto cached_result = operations[0].operation();
|
||||
CHECK_TRUE(!result.success);
|
||||
CHECK_TRUE(result.detail.find("cancel failed") != std::string::npos);
|
||||
CHECK_TRUE(cached_result.detail == result.detail);
|
||||
CHECK_TRUE(throwing_cancel_calls.load() == 1);
|
||||
throwing_session.reset();
|
||||
CHECK_TRUE(exception_coordinator.waitForStopped(ticket, 100ms));
|
||||
CHECK_TRUE(!exception_coordinator.finishStopAll(ticket, false));
|
||||
}
|
||||
|
||||
{
|
||||
cmvr::service::DeferredStopOperation detached_operation;
|
||||
cmvr::service::MediaActivityCoordinator::Session retained_session;
|
||||
std::atomic<int> detached_cancel_calls{0};
|
||||
{
|
||||
cmvr::service::MediaActivityCoordinator ephemeral_coordinator;
|
||||
retained_session = ephemeral_coordinator.beginSession(
|
||||
[&] { ++detached_cancel_calls; });
|
||||
const auto ticket =
|
||||
ephemeral_coordinator.beginStopAll(true);
|
||||
std::vector<cmvr::service::DeferredStopOperation> operations;
|
||||
CHECK_TRUE(
|
||||
ephemeral_coordinator.collectCancellationOperations(
|
||||
ticket, operations));
|
||||
CHECK_TRUE(operations.size() == 1);
|
||||
detached_operation = std::move(operations[0]);
|
||||
}
|
||||
CHECK_TRUE(detached_operation.operation().success);
|
||||
CHECK_TRUE(detached_cancel_calls.load() == 1);
|
||||
retained_session.reset();
|
||||
}
|
||||
|
||||
cmvr::service::MediaActivityCoordinator coordinator;
|
||||
std::atomic<int> cancel_calls{0};
|
||||
|
||||
auto old_session = coordinator.beginSession([&] { ++cancel_calls; });
|
||||
CHECK_TRUE(old_session);
|
||||
CHECK_TRUE(old_session.claimExclusiveResource("speaker:test"));
|
||||
|
||||
auto competing_session = coordinator.beginSession();
|
||||
CHECK_TRUE(competing_session);
|
||||
CHECK_TRUE(!competing_session.claimExclusiveResource("speaker:test"));
|
||||
competing_session.reset();
|
||||
|
||||
const auto ticket = coordinator.beginStopAll();
|
||||
CHECK_TRUE(ticket.valid());
|
||||
CHECK_TRUE(cancel_calls.load(std::memory_order_acquire) == 1);
|
||||
CHECK_TRUE(old_session.cancelled());
|
||||
CHECK_TRUE(!old_session.runIfCurrent([] {}));
|
||||
CHECK_TRUE(!coordinator.beginSession());
|
||||
CHECK_TRUE(!coordinator.waitForStopped(ticket, 5ms));
|
||||
|
||||
old_session.reset();
|
||||
CHECK_TRUE(coordinator.waitForStopped(ticket, 100ms));
|
||||
CHECK_TRUE(coordinator.finishStopAll(ticket, true));
|
||||
|
||||
auto resumed_session = coordinator.beginSession();
|
||||
CHECK_TRUE(resumed_session);
|
||||
CHECK_TRUE(resumed_session.claimExclusiveResource("speaker:test"));
|
||||
|
||||
const auto concurrent_ticket_a = coordinator.beginStopAll();
|
||||
const auto concurrent_ticket_b = coordinator.beginStopAll();
|
||||
resumed_session.reset();
|
||||
CHECK_TRUE(coordinator.waitForStopped(concurrent_ticket_a, 100ms));
|
||||
CHECK_TRUE(coordinator.finishStopAll(concurrent_ticket_a, true));
|
||||
CHECK_TRUE(!coordinator.beginSession());
|
||||
CHECK_TRUE(coordinator.finishStopAll(concurrent_ticket_b, true));
|
||||
CHECK_TRUE(coordinator.beginSession());
|
||||
|
||||
{
|
||||
cmvr::service::MediaActivityCoordinator detailed_coordinator;
|
||||
const auto first = detailed_coordinator.beginStopAll(true);
|
||||
const auto second = detailed_coordinator.beginStopAll(true);
|
||||
const auto first_result =
|
||||
detailed_coordinator.finishStopAllDetailed(first, true);
|
||||
CHECK_TRUE(first_result.ticket_consumed);
|
||||
CHECK_TRUE(first_result.participant_stopped);
|
||||
CHECK_TRUE(!first_result.admission_resumed);
|
||||
const auto second_result =
|
||||
detailed_coordinator.finishStopAllDetailed(second, true);
|
||||
CHECK_TRUE(second_result.ticket_consumed);
|
||||
CHECK_TRUE(second_result.participant_stopped);
|
||||
CHECK_TRUE(second_result.admission_resumed);
|
||||
CHECK_TRUE(detailed_coordinator.beginSession());
|
||||
}
|
||||
|
||||
std::cout << "media_activity_coordinator_test: PASS\n";
|
||||
return 0;
|
||||
}
|
||||
@ -1,283 +0,0 @@
|
||||
#include "service/grpc/server/include/motor_activity_coordinator.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <future>
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include <thread>
|
||||
|
||||
namespace {
|
||||
|
||||
bool check(const bool condition, const char* expression, const int line)
|
||||
{
|
||||
if (condition) {
|
||||
return true;
|
||||
}
|
||||
std::cerr << "CHECK failed at line " << line << ": " << expression << '\n';
|
||||
return false;
|
||||
}
|
||||
|
||||
#define CHECK_TRUE(expression) \
|
||||
do { \
|
||||
if (!check(static_cast<bool>(expression), #expression, __LINE__)) { \
|
||||
return 1; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace std::chrono_literals;
|
||||
using cmvr::service::MotorActivityCoordinator;
|
||||
|
||||
MotorActivityCoordinator coordinator;
|
||||
std::atomic<int> cancel_calls{0};
|
||||
std::atomic<int> quick_stop_calls{0};
|
||||
std::atomic<bool> busy{true};
|
||||
|
||||
auto registration = coordinator.registerControl(
|
||||
[&] { ++cancel_calls; },
|
||||
[&] {
|
||||
++quick_stop_calls;
|
||||
return true;
|
||||
},
|
||||
[&] { return !busy.load(std::memory_order_acquire); },
|
||||
"test motor");
|
||||
CHECK_TRUE(registration);
|
||||
|
||||
const auto ticket = coordinator.beginStopAll();
|
||||
CHECK_TRUE(ticket.valid());
|
||||
CHECK_TRUE(cancel_calls.load(std::memory_order_acquire) == 1);
|
||||
CHECK_TRUE(!coordinator.lockAdmission().accepting());
|
||||
|
||||
std::string initial_error;
|
||||
CHECK_TRUE(coordinator.requestStop(ticket, &initial_error));
|
||||
CHECK_TRUE(initial_error.empty());
|
||||
CHECK_TRUE(quick_stop_calls.load(std::memory_order_acquire) == 1);
|
||||
|
||||
auto stop_future = std::async(std::launch::async, [&] {
|
||||
std::string error;
|
||||
return coordinator.waitForStopped(ticket, 1s, &error);
|
||||
});
|
||||
CHECK_TRUE(stop_future.wait_for(20ms) == std::future_status::timeout);
|
||||
|
||||
busy.store(false, std::memory_order_release);
|
||||
coordinator.notifyStateChanged();
|
||||
CHECK_TRUE(stop_future.get());
|
||||
CHECK_TRUE(coordinator.finishStopAll(ticket, true));
|
||||
CHECK_TRUE(coordinator.lockAdmission().accepting());
|
||||
|
||||
std::atomic<int> quick_stops_in_flight{0};
|
||||
std::atomic<int> maximum_quick_stops{0};
|
||||
auto make_serial_registration = [&](const char* description) {
|
||||
return coordinator.registerControl(
|
||||
[] {},
|
||||
[&] {
|
||||
const int active = ++quick_stops_in_flight;
|
||||
int maximum = maximum_quick_stops.load();
|
||||
while (maximum < active &&
|
||||
!maximum_quick_stops.compare_exchange_weak(
|
||||
maximum, active)) {
|
||||
}
|
||||
std::this_thread::sleep_for(5ms);
|
||||
--quick_stops_in_flight;
|
||||
return true;
|
||||
},
|
||||
[] { return true; },
|
||||
description);
|
||||
};
|
||||
auto serial_a = make_serial_registration("serial motor a");
|
||||
auto serial_b = make_serial_registration("serial motor b");
|
||||
CHECK_TRUE(serial_a && serial_b);
|
||||
|
||||
const auto serial_ticket = coordinator.beginStopAll();
|
||||
CHECK_TRUE(serial_ticket.valid());
|
||||
CHECK_TRUE(coordinator.stopAndWait(serial_ticket, 1s));
|
||||
CHECK_TRUE(maximum_quick_stops.load(std::memory_order_acquire) == 1);
|
||||
CHECK_TRUE(coordinator.finishStopAll(serial_ticket, true));
|
||||
|
||||
{
|
||||
MotorActivityCoordinator parallel_coordinator;
|
||||
std::promise<void> blocked_stop_entered;
|
||||
auto blocked_stop_entered_future =
|
||||
blocked_stop_entered.get_future();
|
||||
std::promise<void> release_blocked_stop;
|
||||
auto release_blocked_stop_future =
|
||||
release_blocked_stop.get_future().share();
|
||||
std::promise<void> peer_stop_entered;
|
||||
auto peer_stop_entered_future = peer_stop_entered.get_future();
|
||||
std::atomic<int> blocked_cancel_calls{0};
|
||||
std::atomic<int> blocked_stop_calls{0};
|
||||
std::atomic<int> peer_cancel_calls{0};
|
||||
std::atomic<int> peer_stop_calls{0};
|
||||
|
||||
auto blocked = parallel_coordinator.registerControl(
|
||||
[&] { ++blocked_cancel_calls; },
|
||||
[&] {
|
||||
if (blocked_cancel_calls.load() != 1) {
|
||||
return false;
|
||||
}
|
||||
++blocked_stop_calls;
|
||||
blocked_stop_entered.set_value();
|
||||
release_blocked_stop_future.wait();
|
||||
return true;
|
||||
},
|
||||
[] { return true; },
|
||||
"blocked motor");
|
||||
auto peer = parallel_coordinator.registerControl(
|
||||
[&] { ++peer_cancel_calls; },
|
||||
[&] {
|
||||
if (peer_cancel_calls.load() != 1) {
|
||||
return false;
|
||||
}
|
||||
++peer_stop_calls;
|
||||
peer_stop_entered.set_value();
|
||||
return true;
|
||||
},
|
||||
[] { return true; },
|
||||
"peer motor");
|
||||
CHECK_TRUE(blocked && peer);
|
||||
|
||||
const auto parallel_ticket =
|
||||
parallel_coordinator.beginStopAll(true);
|
||||
CHECK_TRUE(parallel_ticket.valid());
|
||||
CHECK_TRUE(blocked_cancel_calls.load() == 0);
|
||||
CHECK_TRUE(peer_cancel_calls.load() == 0);
|
||||
std::vector<cmvr::service::DeferredStopOperation> operations;
|
||||
std::string collect_error;
|
||||
CHECK_TRUE(parallel_coordinator.collectStopOperations(
|
||||
parallel_ticket, operations, &collect_error));
|
||||
CHECK_TRUE(collect_error.empty());
|
||||
CHECK_TRUE(operations.size() == 2);
|
||||
CHECK_TRUE(operations[0].resource_key != operations[1].resource_key);
|
||||
|
||||
auto first = std::async(std::launch::async, operations[0].operation);
|
||||
auto second = std::async(std::launch::async, operations[1].operation);
|
||||
CHECK_TRUE(blocked_stop_entered_future.wait_for(100ms) ==
|
||||
std::future_status::ready);
|
||||
CHECK_TRUE(peer_stop_entered_future.wait_for(100ms) ==
|
||||
std::future_status::ready);
|
||||
release_blocked_stop.set_value();
|
||||
CHECK_TRUE(first.get().success);
|
||||
CHECK_TRUE(second.get().success);
|
||||
CHECK_TRUE(operations[0].operation().success);
|
||||
CHECK_TRUE(operations[1].operation().success);
|
||||
CHECK_TRUE(blocked_cancel_calls.load() == 1);
|
||||
CHECK_TRUE(blocked_stop_calls.load() == 1);
|
||||
CHECK_TRUE(peer_cancel_calls.load() == 1);
|
||||
CHECK_TRUE(peer_stop_calls.load() == 1);
|
||||
CHECK_TRUE(parallel_coordinator.finishStopAll(
|
||||
parallel_ticket, true));
|
||||
}
|
||||
|
||||
{
|
||||
MotorActivityCoordinator exception_coordinator;
|
||||
std::atomic<int> cancel_calls_for_exception{0};
|
||||
std::atomic<int> stop_calls_after_exception{0};
|
||||
auto throwing = exception_coordinator.registerControl(
|
||||
[&] {
|
||||
++cancel_calls_for_exception;
|
||||
throw std::runtime_error("cancel failed");
|
||||
},
|
||||
[&] {
|
||||
++stop_calls_after_exception;
|
||||
throw std::runtime_error("quick-stop failed");
|
||||
return false;
|
||||
},
|
||||
[] { return true; },
|
||||
"throwing motor");
|
||||
CHECK_TRUE(throwing);
|
||||
const auto exception_ticket =
|
||||
exception_coordinator.beginStopAll(true);
|
||||
std::vector<cmvr::service::DeferredStopOperation> operations;
|
||||
CHECK_TRUE(exception_coordinator.collectStopOperations(
|
||||
exception_ticket, operations));
|
||||
CHECK_TRUE(operations.size() == 1);
|
||||
const auto first_result = operations[0].operation();
|
||||
const auto cached_result = operations[0].operation();
|
||||
CHECK_TRUE(!first_result.success);
|
||||
CHECK_TRUE(first_result.detail.find("cancel failed") !=
|
||||
std::string::npos);
|
||||
CHECK_TRUE(first_result.detail.find("quick-stop failed") !=
|
||||
std::string::npos);
|
||||
CHECK_TRUE(cached_result.detail == first_result.detail);
|
||||
CHECK_TRUE(cancel_calls_for_exception.load() == 1);
|
||||
CHECK_TRUE(stop_calls_after_exception.load() == 1);
|
||||
CHECK_TRUE(!exception_coordinator.finishStopAll(
|
||||
exception_ticket, false));
|
||||
}
|
||||
|
||||
{
|
||||
cmvr::service::DeferredStopOperation detached_operation;
|
||||
MotorActivityCoordinator::Registration retained_registration;
|
||||
std::atomic<int> detached_cancel_calls{0};
|
||||
std::atomic<int> detached_stop_calls{0};
|
||||
{
|
||||
MotorActivityCoordinator ephemeral_coordinator;
|
||||
retained_registration = ephemeral_coordinator.registerControl(
|
||||
[&] { ++detached_cancel_calls; },
|
||||
[&] {
|
||||
++detached_stop_calls;
|
||||
return true;
|
||||
},
|
||||
[] { return true; },
|
||||
"detached motor");
|
||||
const auto ticket =
|
||||
ephemeral_coordinator.beginStopAll(true);
|
||||
std::vector<cmvr::service::DeferredStopOperation> operations;
|
||||
CHECK_TRUE(ephemeral_coordinator.collectStopOperations(
|
||||
ticket, operations));
|
||||
CHECK_TRUE(operations.size() == 1);
|
||||
detached_operation = std::move(operations[0]);
|
||||
}
|
||||
CHECK_TRUE(detached_operation.operation().success);
|
||||
CHECK_TRUE(detached_cancel_calls.load() == 1);
|
||||
CHECK_TRUE(detached_stop_calls.load() == 1);
|
||||
retained_registration.reset();
|
||||
}
|
||||
|
||||
std::atomic<bool> stop_succeeds{false};
|
||||
auto failing = coordinator.registerControl(
|
||||
[] {},
|
||||
[&] { return stop_succeeds.load(std::memory_order_acquire); },
|
||||
[] { return true; },
|
||||
"failing motor");
|
||||
CHECK_TRUE(failing);
|
||||
|
||||
const auto failed_ticket = coordinator.beginStopAll();
|
||||
CHECK_TRUE(failed_ticket.valid());
|
||||
std::string error;
|
||||
CHECK_TRUE(!coordinator.stopAndWait(failed_ticket, 100ms, &error));
|
||||
CHECK_TRUE(!error.empty());
|
||||
CHECK_TRUE(!coordinator.finishStopAll(failed_ticket, false));
|
||||
CHECK_TRUE(!coordinator.lockAdmission().accepting());
|
||||
|
||||
stop_succeeds.store(true, std::memory_order_release);
|
||||
const auto recovery_ticket = coordinator.beginStopAll();
|
||||
CHECK_TRUE(recovery_ticket.valid());
|
||||
CHECK_TRUE(coordinator.stopAndWait(recovery_ticket, 1s, &error));
|
||||
CHECK_TRUE(coordinator.finishStopAll(recovery_ticket, true));
|
||||
CHECK_TRUE(coordinator.lockAdmission().accepting());
|
||||
|
||||
{
|
||||
MotorActivityCoordinator detailed_coordinator;
|
||||
const auto first = detailed_coordinator.beginStopAll(true);
|
||||
const auto second = detailed_coordinator.beginStopAll(true);
|
||||
const auto first_result =
|
||||
detailed_coordinator.finishStopAllDetailed(first, true);
|
||||
CHECK_TRUE(first_result.ticket_consumed);
|
||||
CHECK_TRUE(first_result.participant_stopped);
|
||||
CHECK_TRUE(!first_result.admission_resumed);
|
||||
const auto second_result =
|
||||
detailed_coordinator.finishStopAllDetailed(second, true);
|
||||
CHECK_TRUE(second_result.ticket_consumed);
|
||||
CHECK_TRUE(second_result.participant_stopped);
|
||||
CHECK_TRUE(second_result.admission_resumed);
|
||||
CHECK_TRUE(detailed_coordinator.lockAdmission().accepting());
|
||||
}
|
||||
|
||||
std::cout << "motor_activity_coordinator_test: PASS\n";
|
||||
return 0;
|
||||
}
|
||||
@ -1,104 +0,0 @@
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
TEST(StopAllAdmissionGateTest, SuccessfulRoundReopensAdmission)
|
||||
{
|
||||
StopAllAdmissionGate gate;
|
||||
{
|
||||
const auto before = gate.lockAdmission();
|
||||
EXPECT_TRUE(before.accepting());
|
||||
}
|
||||
|
||||
const auto ticket = gate.beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
{
|
||||
const auto blocked = gate.lockAdmission();
|
||||
EXPECT_FALSE(blocked.accepting());
|
||||
EXPECT_EQ(blocked.generation(), ticket.generation);
|
||||
}
|
||||
EXPECT_TRUE(gate.finishStopAll(ticket, true));
|
||||
EXPECT_TRUE(gate.lockAdmission().accepting());
|
||||
}
|
||||
|
||||
TEST(StopAllAdmissionGateTest, FailedRoundStaysClosedAndCanBeRecovered)
|
||||
{
|
||||
StopAllAdmissionGate gate;
|
||||
const auto failed_ticket = gate.beginStopAll();
|
||||
ASSERT_TRUE(failed_ticket.valid());
|
||||
EXPECT_FALSE(gate.finishStopAll(failed_ticket, false));
|
||||
EXPECT_FALSE(gate.lockAdmission().accepting());
|
||||
|
||||
const auto recovery_ticket = gate.beginStopAll();
|
||||
ASSERT_TRUE(recovery_ticket.valid());
|
||||
EXPECT_TRUE(gate.finishStopAll(recovery_ticket, true));
|
||||
EXPECT_TRUE(gate.lockAdmission().accepting());
|
||||
}
|
||||
|
||||
TEST(StopAllAdmissionGateTest, EveryConcurrentParticipantMustSucceed)
|
||||
{
|
||||
StopAllAdmissionGate gate;
|
||||
const auto first = gate.beginStopAll();
|
||||
const auto second = gate.beginStopAll();
|
||||
ASSERT_TRUE(first.valid());
|
||||
ASSERT_TRUE(second.valid());
|
||||
|
||||
EXPECT_TRUE(gate.finishStopAll(first, true));
|
||||
EXPECT_FALSE(gate.lockAdmission().accepting());
|
||||
EXPECT_FALSE(gate.finishStopAll(second, false));
|
||||
EXPECT_FALSE(gate.lockAdmission().accepting());
|
||||
}
|
||||
|
||||
TEST(StopAllAdmissionGateTest,
|
||||
DetailedFinishDoesNotReportRecoveryAfterAnotherParticipantFailed)
|
||||
{
|
||||
StopAllAdmissionGate gate;
|
||||
const auto system_ticket = gate.beginStopAll();
|
||||
const auto failed_participant = gate.beginStopAll();
|
||||
|
||||
const auto failed_result =
|
||||
gate.finishStopAllDetailed(failed_participant, false);
|
||||
EXPECT_TRUE(failed_result.ticket_consumed);
|
||||
EXPECT_FALSE(failed_result.admission_reopened);
|
||||
|
||||
const auto system_result =
|
||||
gate.finishStopAllDetailed(system_ticket, true);
|
||||
EXPECT_TRUE(system_result.ticket_consumed);
|
||||
EXPECT_FALSE(system_result.admission_reopened);
|
||||
EXPECT_FALSE(gate.lockAdmission().accepting());
|
||||
}
|
||||
|
||||
TEST(StopAllAdmissionGateTest,
|
||||
DetailedFinishSeparatesConsumptionFromOutstandingParticipants)
|
||||
{
|
||||
StopAllAdmissionGate gate;
|
||||
const auto first = gate.beginStopAll();
|
||||
const auto second = gate.beginStopAll();
|
||||
|
||||
const auto first_result = gate.finishStopAllDetailed(first, true);
|
||||
EXPECT_TRUE(first_result.ticket_consumed);
|
||||
EXPECT_FALSE(first_result.admission_reopened);
|
||||
|
||||
const auto second_result = gate.finishStopAllDetailed(second, true);
|
||||
EXPECT_TRUE(second_result.ticket_consumed);
|
||||
EXPECT_TRUE(second_result.admission_reopened);
|
||||
EXPECT_TRUE(gate.lockAdmission().accepting());
|
||||
}
|
||||
|
||||
TEST(StopAllAdmissionGateTest, TestClearInvalidatesOutstandingTickets)
|
||||
{
|
||||
StopAllAdmissionGate gate;
|
||||
const auto stale = gate.beginStopAll();
|
||||
ASSERT_TRUE(stale.valid());
|
||||
|
||||
gate.clearForTesting();
|
||||
|
||||
EXPECT_TRUE(gate.lockAdmission().accepting());
|
||||
EXPECT_FALSE(gate.finishStopAll(stale, true));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -1,399 +0,0 @@
|
||||
#include "service/grpc/stop_all/include/stop_operation_dispatcher.h"
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
TEST(StopOperationDispatcherTest, RejectsEmptyKeysAndOperations)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
StopOperationDispatcher::Operation empty_operation;
|
||||
|
||||
const auto empty_key = dispatcher.submit("", [] {
|
||||
return StopOperationDispatcher::OperationResult{true, {}};
|
||||
});
|
||||
const auto empty_callback = dispatcher.submit(
|
||||
"arm:one", std::move(empty_operation));
|
||||
|
||||
EXPECT_FALSE(empty_key.valid());
|
||||
EXPECT_FALSE(empty_callback.valid());
|
||||
const auto invalid_result = empty_key.waitUntil(
|
||||
StopOperationDispatcher::Clock::now());
|
||||
EXPECT_FALSE(invalid_result.completed);
|
||||
EXPECT_FALSE(invalid_result.result);
|
||||
EXPECT_FALSE(invalid_result.detail.empty());
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest, ReturnsOperationOutcome)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
const auto handle = dispatcher.submit("arm:one", [] {
|
||||
return StopOperationDispatcher::OperationResult{
|
||||
false, "driver did not confirm idle"};
|
||||
});
|
||||
|
||||
ASSERT_TRUE(handle.valid());
|
||||
const auto result = handle.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s);
|
||||
EXPECT_TRUE(result.completed);
|
||||
EXPECT_FALSE(result.result);
|
||||
EXPECT_EQ(result.detail, "driver did not confirm idle");
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest, TimeoutDoesNotCancelTheJob)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
std::promise<void> release;
|
||||
auto released = release.get_future().share();
|
||||
const auto handle = dispatcher.submit("agv:one", [released] {
|
||||
released.wait();
|
||||
return StopOperationDispatcher::OperationResult{true, "stopped"};
|
||||
});
|
||||
|
||||
const auto timed_out = handle.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 20ms);
|
||||
EXPECT_FALSE(timed_out.completed);
|
||||
EXPECT_FALSE(timed_out.result);
|
||||
|
||||
release.set_value();
|
||||
const auto completed = handle.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s);
|
||||
EXPECT_TRUE(completed.completed);
|
||||
EXPECT_TRUE(completed.result);
|
||||
EXPECT_EQ(completed.detail, "stopped");
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest,
|
||||
RunningJobKeepsItsOriginalTimeoutDetailProvider)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
std::promise<void> release;
|
||||
auto released = release.get_future().share();
|
||||
std::atomic<int> first_operation_calls{0};
|
||||
std::atomic<int> duplicate_operation_calls{0};
|
||||
std::atomic<int> first_provider_calls{0};
|
||||
std::atomic<int> duplicate_provider_calls{0};
|
||||
|
||||
const auto first = dispatcher.submit(
|
||||
"arm:one",
|
||||
[&] {
|
||||
++first_operation_calls;
|
||||
released.wait();
|
||||
return StopOperationDispatcher::OperationResult{true, {}};
|
||||
},
|
||||
[&] {
|
||||
++first_provider_calls;
|
||||
return std::string("first job is waiting for its handler");
|
||||
});
|
||||
const auto duplicate = dispatcher.submit(
|
||||
"arm:one",
|
||||
[&] {
|
||||
++duplicate_operation_calls;
|
||||
return StopOperationDispatcher::OperationResult{true, {}};
|
||||
},
|
||||
[&] {
|
||||
++duplicate_provider_calls;
|
||||
return std::string("duplicate submission detail");
|
||||
});
|
||||
|
||||
const auto first_timeout = first.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 20ms);
|
||||
const auto duplicate_timeout = duplicate.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 20ms);
|
||||
release.set_value();
|
||||
const auto completed = first.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s);
|
||||
|
||||
EXPECT_FALSE(first_timeout.completed);
|
||||
EXPECT_EQ(
|
||||
first_timeout.detail, "first job is waiting for its handler");
|
||||
EXPECT_FALSE(duplicate_timeout.completed);
|
||||
EXPECT_EQ(
|
||||
duplicate_timeout.detail, "first job is waiting for its handler");
|
||||
EXPECT_TRUE(completed.completed);
|
||||
EXPECT_TRUE(completed.result);
|
||||
EXPECT_EQ(first_operation_calls.load(), 1);
|
||||
EXPECT_EQ(duplicate_operation_calls.load(), 0);
|
||||
EXPECT_EQ(first_provider_calls.load(), 2);
|
||||
EXPECT_EQ(duplicate_provider_calls.load(), 0);
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest,
|
||||
ThrowingTimeoutDetailProviderFallsBackToGenericDetail)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
std::promise<void> release;
|
||||
auto released = release.get_future().share();
|
||||
const auto handle = dispatcher.submit(
|
||||
"arm:one",
|
||||
[released] {
|
||||
released.wait();
|
||||
return StopOperationDispatcher::OperationResult{true, {}};
|
||||
},
|
||||
[]() -> std::string {
|
||||
throw std::runtime_error("diagnostic provider failed");
|
||||
});
|
||||
|
||||
const auto timed_out = handle.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 20ms);
|
||||
release.set_value();
|
||||
|
||||
EXPECT_FALSE(timed_out.completed);
|
||||
EXPECT_FALSE(timed_out.result);
|
||||
EXPECT_EQ(
|
||||
timed_out.detail,
|
||||
"stop operation did not complete before the deadline");
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest, RunningSubmissionsForAKeyShareOneJob)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
std::promise<void> started;
|
||||
std::promise<void> release;
|
||||
auto released = release.get_future().share();
|
||||
std::atomic<int> first_calls{0};
|
||||
std::atomic<int> duplicate_calls{0};
|
||||
|
||||
const auto first = dispatcher.submit("arm:one", [&] {
|
||||
++first_calls;
|
||||
started.set_value();
|
||||
released.wait();
|
||||
return StopOperationDispatcher::OperationResult{true, "first"};
|
||||
});
|
||||
ASSERT_EQ(started.get_future().wait_for(1s), std::future_status::ready);
|
||||
|
||||
const auto duplicate = dispatcher.submit("arm:one", [&] {
|
||||
++duplicate_calls;
|
||||
return StopOperationDispatcher::OperationResult{false, "duplicate"};
|
||||
});
|
||||
release.set_value();
|
||||
|
||||
const auto first_result = first.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s);
|
||||
const auto duplicate_result = duplicate.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s);
|
||||
EXPECT_TRUE(first_result.completed);
|
||||
EXPECT_TRUE(first_result.result);
|
||||
EXPECT_EQ(first_result.detail, "first");
|
||||
EXPECT_TRUE(duplicate_result.completed);
|
||||
EXPECT_TRUE(duplicate_result.result);
|
||||
EXPECT_EQ(duplicate_result.detail, "first");
|
||||
EXPECT_EQ(first_calls.load(), 1);
|
||||
EXPECT_EQ(duplicate_calls.load(), 0);
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest, ConcurrentSubmissionsForAKeyShareOneJob)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
constexpr int submitter_count = 12;
|
||||
std::promise<void> release;
|
||||
auto released = release.get_future().share();
|
||||
std::atomic<int> operation_calls{0};
|
||||
std::mutex handles_mutex;
|
||||
std::vector<StopOperationDispatcher::Handle> handles;
|
||||
std::vector<std::thread> submitters;
|
||||
handles.reserve(submitter_count);
|
||||
submitters.reserve(submitter_count);
|
||||
|
||||
for (int index = 0; index < submitter_count; ++index) {
|
||||
submitters.emplace_back([&] {
|
||||
auto handle = dispatcher.submit("dexhand:one", [&] {
|
||||
++operation_calls;
|
||||
released.wait();
|
||||
return StopOperationDispatcher::OperationResult{true, {}};
|
||||
});
|
||||
std::lock_guard lock(handles_mutex);
|
||||
handles.emplace_back(std::move(handle));
|
||||
});
|
||||
}
|
||||
for (auto& submitter : submitters) {
|
||||
submitter.join();
|
||||
}
|
||||
release.set_value();
|
||||
|
||||
ASSERT_EQ(handles.size(), static_cast<std::size_t>(submitter_count));
|
||||
const auto deadline = StopOperationDispatcher::Clock::now() + 1s;
|
||||
for (const auto& handle : handles) {
|
||||
const auto result = handle.waitUntil(deadline);
|
||||
EXPECT_TRUE(result.completed);
|
||||
EXPECT_TRUE(result.result);
|
||||
}
|
||||
EXPECT_EQ(operation_calls.load(), 1);
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest, CompletedJobIsReapedBeforeNextSubmission)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
std::atomic<int> calls{0};
|
||||
|
||||
const auto first = dispatcher.submit("arm:one", [&] {
|
||||
++calls;
|
||||
return StopOperationDispatcher::OperationResult{true, "round one"};
|
||||
});
|
||||
const auto first_result = first.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s);
|
||||
ASSERT_TRUE(first_result.completed);
|
||||
ASSERT_TRUE(first_result.result);
|
||||
|
||||
const auto second = dispatcher.submit("arm:one", [&] {
|
||||
++calls;
|
||||
return StopOperationDispatcher::OperationResult{true, "round two"};
|
||||
});
|
||||
const auto second_result = second.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s);
|
||||
|
||||
EXPECT_TRUE(second_result.completed);
|
||||
EXPECT_TRUE(second_result.result);
|
||||
EXPECT_EQ(second_result.detail, "round two");
|
||||
EXPECT_EQ(calls.load(), 2);
|
||||
EXPECT_EQ(first.waitUntil(
|
||||
StopOperationDispatcher::Clock::now()).detail, "round one");
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest, SubmissionReapsAllCompletedJobs)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
constexpr int completed_job_count = 24;
|
||||
std::promise<void> release;
|
||||
auto released = release.get_future().share();
|
||||
std::vector<StopOperationDispatcher::Handle> handles;
|
||||
handles.reserve(completed_job_count);
|
||||
|
||||
for (int index = 0; index < completed_job_count; ++index) {
|
||||
handles.emplace_back(dispatcher.submit(
|
||||
"arm:" + std::to_string(index), [released] {
|
||||
released.wait();
|
||||
return StopOperationDispatcher::OperationResult{true, {}};
|
||||
}));
|
||||
}
|
||||
ASSERT_EQ(dispatcher.jobCountForTesting(),
|
||||
static_cast<std::size_t>(completed_job_count));
|
||||
|
||||
release.set_value();
|
||||
const auto deadline = StopOperationDispatcher::Clock::now() + 1s;
|
||||
for (const auto& handle : handles) {
|
||||
ASSERT_TRUE(handle.waitUntil(deadline).completed);
|
||||
}
|
||||
ASSERT_EQ(dispatcher.jobCountForTesting(),
|
||||
static_cast<std::size_t>(completed_job_count));
|
||||
|
||||
std::promise<void> trigger_started;
|
||||
std::promise<void> release_trigger;
|
||||
auto trigger_released = release_trigger.get_future().share();
|
||||
const auto trigger = dispatcher.submit(
|
||||
"agv:cleanup-trigger", [&] {
|
||||
trigger_started.set_value();
|
||||
trigger_released.wait();
|
||||
return StopOperationDispatcher::OperationResult{true, {}};
|
||||
});
|
||||
|
||||
ASSERT_EQ(trigger_started.get_future().wait_for(1s),
|
||||
std::future_status::ready);
|
||||
EXPECT_EQ(dispatcher.jobCountForTesting(), 1U);
|
||||
|
||||
release_trigger.set_value();
|
||||
EXPECT_TRUE(trigger.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s).result);
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest, DifferentKeysRunIndependently)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
std::promise<void> release_first;
|
||||
auto first_released = release_first.get_future().share();
|
||||
std::promise<void> second_started;
|
||||
|
||||
const auto first = dispatcher.submit("camera:one", [first_released] {
|
||||
first_released.wait();
|
||||
return StopOperationDispatcher::OperationResult{true, {}};
|
||||
});
|
||||
const auto second = dispatcher.submit("speaker:one", [&] {
|
||||
second_started.set_value();
|
||||
return StopOperationDispatcher::OperationResult{true, {}};
|
||||
});
|
||||
|
||||
EXPECT_EQ(
|
||||
second_started.get_future().wait_for(1s),
|
||||
std::future_status::ready);
|
||||
const auto second_result = second.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s);
|
||||
EXPECT_TRUE(second_result.completed);
|
||||
EXPECT_TRUE(second_result.result);
|
||||
|
||||
release_first.set_value();
|
||||
EXPECT_TRUE(first.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s).result);
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest, ConvertsOperationExceptionsToFailures)
|
||||
{
|
||||
StopOperationDispatcher dispatcher;
|
||||
const auto standard = dispatcher.submit("arm:one", []()
|
||||
-> StopOperationDispatcher::OperationResult {
|
||||
throw std::runtime_error("transport failed");
|
||||
});
|
||||
const auto unknown = dispatcher.submit("agv:one", []()
|
||||
-> StopOperationDispatcher::OperationResult {
|
||||
throw 42;
|
||||
});
|
||||
|
||||
const auto deadline = StopOperationDispatcher::Clock::now() + 1s;
|
||||
const auto standard_result = standard.waitUntil(deadline);
|
||||
const auto unknown_result = unknown.waitUntil(deadline);
|
||||
EXPECT_TRUE(standard_result.completed);
|
||||
EXPECT_FALSE(standard_result.result);
|
||||
EXPECT_NE(standard_result.detail.find("transport failed"),
|
||||
std::string::npos);
|
||||
EXPECT_TRUE(unknown_result.completed);
|
||||
EXPECT_FALSE(unknown_result.result);
|
||||
EXPECT_NE(unknown_result.detail.find("unknown exception"),
|
||||
std::string::npos);
|
||||
}
|
||||
|
||||
TEST(StopOperationDispatcherTest,
|
||||
DestructorWaitsForOutstandingWorkers)
|
||||
{
|
||||
auto dispatcher = std::make_unique<StopOperationDispatcher>();
|
||||
std::promise<void> started;
|
||||
std::promise<void> release;
|
||||
auto released = release.get_future().share();
|
||||
const auto handle = dispatcher->submit("arm:one", [&] {
|
||||
started.set_value();
|
||||
released.wait();
|
||||
return StopOperationDispatcher::OperationResult{
|
||||
true, "completed after dispatcher destruction"};
|
||||
});
|
||||
ASSERT_EQ(started.get_future().wait_for(1s), std::future_status::ready);
|
||||
|
||||
auto destroy = std::async(std::launch::async, [&] {
|
||||
dispatcher.reset();
|
||||
});
|
||||
EXPECT_EQ(destroy.wait_for(20ms), std::future_status::timeout);
|
||||
|
||||
release.set_value();
|
||||
EXPECT_EQ(destroy.wait_for(1s), std::future_status::ready);
|
||||
destroy.get();
|
||||
const auto result = handle.waitUntil(
|
||||
StopOperationDispatcher::Clock::now() + 1s);
|
||||
EXPECT_TRUE(result.completed);
|
||||
EXPECT_TRUE(result.result);
|
||||
EXPECT_EQ(result.detail, "completed after dispatcher destruction");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cmvr::service
|
||||
@ -22,34 +22,6 @@ target_link_libraries(task
|
||||
add_library(cmvr_es::task ALIAS task)
|
||||
install(TARGETS task LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(touch_screen_admission_test
|
||||
touch_screen_task/src/touch_screen_admission_test.cpp
|
||||
)
|
||||
target_link_libraries(touch_screen_admission_test PRIVATE
|
||||
cmvr_es::task
|
||||
cmvr_es::device_manager
|
||||
cmvr_es::stop_all_admission_gate
|
||||
cmvr_es::camera_operational_activity_registry
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME touch_screen_admission_test
|
||||
COMMAND touch_screen_admission_test
|
||||
)
|
||||
set(_touch_screen_admission_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}")
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _touch_screen_admission_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(touch_screen_admission_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_touch_screen_admission_test_environment}")
|
||||
endif()
|
||||
|
||||
#add_executable(touch_screen_task_test
|
||||
# touch_screen_task/src/touch_screen_task_test.cpp
|
||||
#)
|
||||
|
||||
@ -1,559 +0,0 @@
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "manager/device_manager/include/device_manager.h"
|
||||
#include "service/grpc/server/include/camera_operational_activity_registry.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "task/touch_screen_task/include/touch_screen_task.h"
|
||||
|
||||
namespace cmvr::task {
|
||||
|
||||
class TouchScreenTaskAdmissionTestPeer final {
|
||||
public:
|
||||
static void prepare(
|
||||
TouchScreenTask& task,
|
||||
const std::shared_ptr<device::RobotArm>& arm,
|
||||
const std::shared_ptr<device::AbstractCamera>& camera)
|
||||
{
|
||||
std::lock_guard lock(task.mutex_);
|
||||
task.arm_ = arm;
|
||||
{
|
||||
std::lock_guard arm_lock(task.activity_arm_mutex_);
|
||||
task.activity_arm_ = arm;
|
||||
}
|
||||
task.camera_ = camera;
|
||||
task.initialized_ = true;
|
||||
task.phase_ = TouchScreenTask::Phase::IDLE;
|
||||
task.last_status_ = TouchScreenTask::Status::IDLE;
|
||||
}
|
||||
|
||||
static void prepareInit(
|
||||
TouchScreenTask& task,
|
||||
const std::string& arm_id,
|
||||
const std::string& dexhand_id,
|
||||
const std::string& camera_id)
|
||||
{
|
||||
std::lock_guard lock(task.mutex_);
|
||||
task.config_valid_ = true;
|
||||
auto* devices = task.config_.mutable_devices();
|
||||
devices->set_arm_id(arm_id);
|
||||
devices->set_dexhand_id(dexhand_id);
|
||||
devices->set_camera_id(camera_id);
|
||||
task.initialized_ = false;
|
||||
task.phase_ = TouchScreenTask::Phase::IDLE;
|
||||
task.last_status_ = TouchScreenTask::Status::NOT_INITIALIZED;
|
||||
}
|
||||
|
||||
static bool sendJointVelocity(TouchScreenTask& task)
|
||||
{
|
||||
std::lock_guard lock(task.mutex_);
|
||||
return task.sendJointVelocity({});
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace cmvr::task
|
||||
|
||||
namespace {
|
||||
|
||||
class AdmissionRobotArm final : public cmvr::device::RobotArm {
|
||||
public:
|
||||
AdmissionRobotArm() { id_ = "touch-admission-arm"; }
|
||||
|
||||
std::string typeName() const override { return "AdmissionRobotArm"; }
|
||||
cmvr::device::RobotModel getRobotModel() const override { return {}; }
|
||||
std::size_t getDof() const override { return 0U; }
|
||||
cmvr::device::ArmState getRobotState() const override { return {}; }
|
||||
cmvr::device::JointGroupState getJointState() const override { return {}; }
|
||||
cmvr::device::CartesianPose getTcpPose(
|
||||
cmvr::device::FrameType = cmvr::device::FrameType::Base) const override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
cmvr::device::RobotMode getRobotMode() const override
|
||||
{
|
||||
return cmvr::device::RobotMode::Idle;
|
||||
}
|
||||
cmvr::device::SafetyMode getSafetyMode() const override
|
||||
{
|
||||
return cmvr::device::SafetyMode::Normal;
|
||||
}
|
||||
cmvr::device::ControlMode getControlMode() const override
|
||||
{
|
||||
return cmvr::device::ControlMode::None;
|
||||
}
|
||||
cmvr::device::Result torqueOn() override { return success(); }
|
||||
cmvr::device::Result torqueOff() override { return success(); }
|
||||
cmvr::device::Result calibrateZeroQ(const std::string&) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result emergencyStop() override { return success(); }
|
||||
cmvr::device::Result protectiveStop() override { return success(); }
|
||||
cmvr::device::Result setSpeedScaling(double) override { return success(); }
|
||||
double getSpeedScaling() const override { return 1.0; }
|
||||
bool isProtectiveStopped() const override { return false; }
|
||||
bool isEmergencyStopped() const override { return false; }
|
||||
bool isFault() const override { return false; }
|
||||
cmvr::device::Result moveJ(
|
||||
const cmvr::device::JointPositionCommand&,
|
||||
const cmvr::device::MotionOptions&) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result speedJ(
|
||||
const cmvr::device::JointVelocityCommand&, double, double) override
|
||||
{
|
||||
++speed_j_calls_;
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result stopJ(double) override { return success(); }
|
||||
cmvr::device::Result moveL(
|
||||
const cmvr::device::CartesianPose&,
|
||||
const cmvr::device::MotionOptions&,
|
||||
cmvr::device::FrameType = cmvr::device::FrameType::Base) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result speedL(
|
||||
const cmvr::device::CartesianVelocity&,
|
||||
double,
|
||||
double,
|
||||
cmvr::device::FrameType = cmvr::device::FrameType::Base) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result stopL(std::optional<double> = std::nullopt) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result stopMotion() override
|
||||
{
|
||||
++stop_motion_calls_;
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result startServoMode(
|
||||
const cmvr::device::ServoOptions&) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result servoJ(
|
||||
const cmvr::device::JointPositionCommand&) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result servoL(
|
||||
const cmvr::device::CartesianPose&,
|
||||
cmvr::device::FrameType = cmvr::device::FrameType::Base) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result servoSpeedJ(
|
||||
const cmvr::device::JointVelocityCommand&) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result servoSpeedL(
|
||||
const cmvr::device::CartesianVelocity&,
|
||||
cmvr::device::FrameType = cmvr::device::FrameType::Base) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result stopServoMode() override { return success(); }
|
||||
cmvr::device::Result connect(const std::string&, int) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result disconnect() override { return success(); }
|
||||
bool isConnected() const override { return true; }
|
||||
cmvr::device::Result powerOn() override { return success(); }
|
||||
cmvr::device::Result powerOff() override { return success(); }
|
||||
cmvr::device::Result brakeRelease() override { return success(); }
|
||||
cmvr::device::Result shutdown() override { return success(); }
|
||||
cmvr::device::Result clearFault() override { return success(); }
|
||||
cmvr::device::Result unlockProtectiveStop() override { return success(); }
|
||||
cmvr::device::Result loadProgram(const std::string&) override
|
||||
{
|
||||
return success();
|
||||
}
|
||||
cmvr::device::Result playProgram() override { return success(); }
|
||||
cmvr::device::Result pauseProgram() override { return success(); }
|
||||
cmvr::device::Result stopProgram() override { return success(); }
|
||||
std::vector<double> ik(
|
||||
const std::string&,
|
||||
const std::string&,
|
||||
const cmvr::device::CartesianPose&) override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
std::shared_ptr<cmvr::IKSolver> kinematicsSolver() const override
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
cmvr::device::CartesianPose fk(
|
||||
const std::string&, const std::string&) override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
cmvr::device::CartesianPose fk(bool = true) override { return {}; }
|
||||
cmvr::device::CartesianVelocity getSpeedLCommandTwistBase() const override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
bool busy() const override { return false; }
|
||||
|
||||
int speedJCalls() const noexcept { return speed_j_calls_.load(); }
|
||||
int stopMotionCalls() const noexcept
|
||||
{
|
||||
return stop_motion_calls_.load();
|
||||
}
|
||||
|
||||
private:
|
||||
static cmvr::device::Result success()
|
||||
{
|
||||
return cmvr::device::Result::success();
|
||||
}
|
||||
|
||||
std::atomic<int> speed_j_calls_{0};
|
||||
std::atomic<int> stop_motion_calls_{0};
|
||||
};
|
||||
|
||||
class AdmissionCamera final : public cmvr::device::AbstractCamera {
|
||||
public:
|
||||
explicit AdmissionCamera(std::string id)
|
||||
{
|
||||
id_ = std::move(id);
|
||||
state_.is_initialized = true;
|
||||
}
|
||||
|
||||
std::string typeName() const override { return "AdmissionCamera"; }
|
||||
|
||||
void getState(cmvr::device::CameraState& state) override
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
state = state_;
|
||||
}
|
||||
|
||||
bool start() override
|
||||
{
|
||||
++lifecycle_start_calls_;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool stop() override
|
||||
{
|
||||
++lifecycle_stop_calls_;
|
||||
std::lock_guard lock(mutex_);
|
||||
operational_active_ = false;
|
||||
state_.is_opened = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool startOperationalActivity() override
|
||||
{
|
||||
++operational_start_calls_;
|
||||
std::unique_lock lock(mutex_);
|
||||
start_entered_ = true;
|
||||
condition_.notify_all();
|
||||
condition_.wait(lock, [this] { return !block_start_; });
|
||||
operational_active_ = true;
|
||||
state_.is_opened = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool stopOperationalActivity() override
|
||||
{
|
||||
++operational_stop_calls_;
|
||||
std::lock_guard lock(mutex_);
|
||||
operational_active_ = false;
|
||||
state_.is_opened = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void blockStart()
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_start_ = true;
|
||||
start_entered_ = false;
|
||||
}
|
||||
|
||||
void waitForStartEntered()
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
condition_.wait(lock, [this] { return start_entered_; });
|
||||
}
|
||||
|
||||
void releaseStart()
|
||||
{
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
block_start_ = false;
|
||||
}
|
||||
condition_.notify_all();
|
||||
}
|
||||
|
||||
bool operationalActive() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return operational_active_;
|
||||
}
|
||||
|
||||
int lifecycleStartCalls() const { return lifecycle_start_calls_; }
|
||||
int lifecycleStopCalls() const { return lifecycle_stop_calls_; }
|
||||
int operationalStartCalls() const { return operational_start_calls_; }
|
||||
int operationalStopCalls() const { return operational_stop_calls_; }
|
||||
|
||||
private:
|
||||
mutable std::mutex mutex_;
|
||||
std::condition_variable condition_;
|
||||
bool block_start_{false};
|
||||
bool start_entered_{false};
|
||||
bool operational_active_{false};
|
||||
std::atomic<int> lifecycle_start_calls_{0};
|
||||
std::atomic<int> lifecycle_stop_calls_{0};
|
||||
std::atomic<int> operational_start_calls_{0};
|
||||
std::atomic<int> operational_stop_calls_{0};
|
||||
};
|
||||
|
||||
class TouchScreenAdmissionTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
cmvr::service::globalCameraOperationalActivityRegistry()
|
||||
.clearForTesting();
|
||||
cmvr::device::DeviceManager::destroyInstance();
|
||||
cmvr::service::globalStopAllAdmissionGate().clearForTesting();
|
||||
cmvr::control::ControlAuthorityManager::instance().clear();
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
cmvr::service::globalCameraOperationalActivityRegistry()
|
||||
.clearForTesting();
|
||||
cmvr::device::DeviceManager::destroyInstance();
|
||||
cmvr::service::globalStopAllAdmissionGate().clearForTesting();
|
||||
cmvr::control::ControlAuthorityManager::instance().clear();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(TouchScreenAdmissionTest,
|
||||
DirectTouchAndStartFromPixelHonorFailClosedAdmissionAndRecovery)
|
||||
{
|
||||
auto arm = std::make_shared<AdmissionRobotArm>();
|
||||
auto camera = std::make_shared<AdmissionCamera>(
|
||||
"touch-admission-camera");
|
||||
cmvr::task::TouchScreenTask task(cmvr::config::TouchScreenTaskConfig{});
|
||||
cmvr::task::TouchScreenTaskAdmissionTestPeer::prepare(
|
||||
task, arm, camera);
|
||||
auto& gate = cmvr::service::globalStopAllAdmissionGate();
|
||||
|
||||
auto ticket = gate.beginStopAll();
|
||||
EXPECT_FALSE(task.touch(10, 20));
|
||||
EXPECT_FALSE(task.startFromPixel(10, 20));
|
||||
EXPECT_FALSE(task.isBusy());
|
||||
|
||||
EXPECT_TRUE(gate.finishStopAll(ticket, true));
|
||||
ASSERT_TRUE(task.touch(10, 20));
|
||||
EXPECT_TRUE(task.isBusy());
|
||||
EXPECT_TRUE(task.stopActivity());
|
||||
|
||||
ticket = gate.beginStopAll();
|
||||
EXPECT_FALSE(gate.finishStopAll(ticket, false));
|
||||
EXPECT_FALSE(task.touch(10, 20));
|
||||
EXPECT_FALSE(task.startFromPixel(10, 20));
|
||||
|
||||
ticket = gate.beginStopAll();
|
||||
EXPECT_TRUE(gate.finishStopAll(ticket, true));
|
||||
EXPECT_TRUE(task.startFromPixel(30, 40));
|
||||
EXPECT_TRUE(task.stopActivity());
|
||||
}
|
||||
|
||||
TEST_F(TouchScreenAdmissionTest,
|
||||
SafetyHooksFenceEveryArmActuation)
|
||||
{
|
||||
auto arm = std::make_shared<AdmissionRobotArm>();
|
||||
auto camera = std::make_shared<AdmissionCamera>(
|
||||
"touch-safety-hooks-camera");
|
||||
cmvr::task::TouchScreenTask task(cmvr::config::TouchScreenTaskConfig{});
|
||||
cmvr::task::TouchScreenTaskAdmissionTestPeer::prepare(
|
||||
task, arm, camera);
|
||||
|
||||
bool admitted = true;
|
||||
int revalidations = 0;
|
||||
int dispatches = 0;
|
||||
cmvr::task::TouchScreenTask::SafetyHooks hooks;
|
||||
hooks.revalidate = [&] {
|
||||
++revalidations;
|
||||
return admitted;
|
||||
};
|
||||
hooks.dispatch_actuation = [&](const auto& operation) {
|
||||
++dispatches;
|
||||
return operation();
|
||||
};
|
||||
hooks.dispatch_stop = [](const auto& operation) {
|
||||
return operation();
|
||||
};
|
||||
|
||||
ASSERT_TRUE(task.touchIfCurrent(
|
||||
10, 20, [] { return true; }, std::move(hooks)));
|
||||
EXPECT_TRUE(
|
||||
cmvr::task::TouchScreenTaskAdmissionTestPeer::sendJointVelocity(task));
|
||||
EXPECT_EQ(arm->speedJCalls(), 1);
|
||||
EXPECT_EQ(dispatches, 1);
|
||||
EXPECT_GE(revalidations, 2);
|
||||
|
||||
admitted = false;
|
||||
EXPECT_FALSE(
|
||||
cmvr::task::TouchScreenTaskAdmissionTestPeer::sendJointVelocity(task));
|
||||
EXPECT_EQ(arm->speedJCalls(), 1);
|
||||
EXPECT_EQ(dispatches, 1);
|
||||
EXPECT_TRUE(task.stopActivity());
|
||||
}
|
||||
|
||||
TEST_F(TouchScreenAdmissionTest,
|
||||
RevokedSafetySessionStopsActivityThroughStopLane)
|
||||
{
|
||||
auto arm = std::make_shared<AdmissionRobotArm>();
|
||||
auto camera = std::make_shared<AdmissionCamera>(
|
||||
"touch-revoked-safety-camera");
|
||||
cmvr::task::TouchScreenTask task(cmvr::config::TouchScreenTaskConfig{});
|
||||
cmvr::task::TouchScreenTaskAdmissionTestPeer::prepare(
|
||||
task, arm, camera);
|
||||
|
||||
bool admitted = true;
|
||||
int stop_dispatches = 0;
|
||||
cmvr::task::TouchScreenTask::SafetyHooks hooks;
|
||||
hooks.revalidate = [&] { return admitted; };
|
||||
hooks.dispatch_actuation = [](const auto& operation) {
|
||||
return operation();
|
||||
};
|
||||
hooks.dispatch_stop = [&](const auto& operation) {
|
||||
++stop_dispatches;
|
||||
return operation();
|
||||
};
|
||||
|
||||
ASSERT_TRUE(task.touchIfCurrent(
|
||||
10, 20, [] { return true; }, std::move(hooks)));
|
||||
admitted = false;
|
||||
EXPECT_FALSE(task.step(0.01));
|
||||
EXPECT_EQ(task.phase(), cmvr::task::TouchScreenTask::Phase::FAILED);
|
||||
EXPECT_EQ(
|
||||
task.lastStatus(),
|
||||
cmvr::task::TouchScreenTask::Status::SAFETY_ADMISSION_REVOKED);
|
||||
EXPECT_EQ(stop_dispatches, 1);
|
||||
EXPECT_EQ(arm->stopMotionCalls(), 1);
|
||||
}
|
||||
|
||||
TEST_F(TouchScreenAdmissionTest,
|
||||
StopAllStopsCameraActivityAndNextTouchRestartsIt)
|
||||
{
|
||||
auto arm = std::make_shared<AdmissionRobotArm>();
|
||||
auto camera = std::make_shared<AdmissionCamera>(
|
||||
"touch-restart-camera");
|
||||
cmvr::task::TouchScreenTask task(cmvr::config::TouchScreenTaskConfig{});
|
||||
cmvr::task::TouchScreenTaskAdmissionTestPeer::prepare(
|
||||
task, arm, camera);
|
||||
auto& gate = cmvr::service::globalStopAllAdmissionGate();
|
||||
auto& registry =
|
||||
cmvr::service::globalCameraOperationalActivityRegistry();
|
||||
|
||||
ASSERT_TRUE(task.touch(10, 20));
|
||||
EXPECT_TRUE(camera->operationalActive());
|
||||
EXPECT_EQ(camera->operationalStartCalls(), 1);
|
||||
|
||||
const auto ticket = gate.beginStopAll();
|
||||
ASSERT_TRUE(ticket.valid());
|
||||
EXPECT_TRUE(task.stopActivity());
|
||||
EXPECT_TRUE(registry.stopAllActivities());
|
||||
EXPECT_FALSE(camera->operationalActive());
|
||||
EXPECT_EQ(camera->operationalStopCalls(), 1);
|
||||
EXPECT_EQ(camera->lifecycleStopCalls(), 0);
|
||||
ASSERT_TRUE(gate.finishStopAll(ticket, true));
|
||||
|
||||
ASSERT_TRUE(task.touch(30, 40));
|
||||
EXPECT_TRUE(camera->operationalActive());
|
||||
EXPECT_EQ(camera->operationalStartCalls(), 2);
|
||||
EXPECT_EQ(camera->lifecycleStartCalls(), 0);
|
||||
EXPECT_TRUE(task.stopActivity());
|
||||
}
|
||||
|
||||
TEST_F(TouchScreenAdmissionTest,
|
||||
TouchRollsBackCameraStartThatCrossesStopAllGeneration)
|
||||
{
|
||||
auto arm = std::make_shared<AdmissionRobotArm>();
|
||||
auto camera = std::make_shared<AdmissionCamera>(
|
||||
"touch-racing-camera");
|
||||
cmvr::task::TouchScreenTask task(cmvr::config::TouchScreenTaskConfig{});
|
||||
cmvr::task::TouchScreenTaskAdmissionTestPeer::prepare(
|
||||
task, arm, camera);
|
||||
camera->blockStart();
|
||||
|
||||
bool touch_result = true;
|
||||
std::thread touch_thread([&] {
|
||||
touch_result = task.touch(10, 20);
|
||||
});
|
||||
camera->waitForStartEntered();
|
||||
|
||||
auto& gate = cmvr::service::globalStopAllAdmissionGate();
|
||||
const auto ticket = gate.beginStopAll();
|
||||
EXPECT_TRUE(ticket.valid());
|
||||
camera->releaseStart();
|
||||
touch_thread.join();
|
||||
|
||||
EXPECT_FALSE(touch_result);
|
||||
EXPECT_FALSE(task.isBusy());
|
||||
EXPECT_FALSE(camera->operationalActive());
|
||||
EXPECT_EQ(camera->operationalStartCalls(), 1);
|
||||
EXPECT_EQ(camera->operationalStopCalls(), 1);
|
||||
EXPECT_EQ(camera->lifecycleStopCalls(), 0);
|
||||
EXPECT_TRUE(gate.finishStopAll(ticket, true));
|
||||
}
|
||||
|
||||
TEST_F(TouchScreenAdmissionTest,
|
||||
InitRollsBackCameraStartThatCrossesStopAllGeneration)
|
||||
{
|
||||
cmvr::config::DeviceManagerConfig manager_config;
|
||||
auto& manager =
|
||||
cmvr::device::DeviceManager::getInstance(manager_config);
|
||||
auto camera = std::make_shared<AdmissionCamera>(
|
||||
"touch-init-racing-camera");
|
||||
manager.registerDevice(camera);
|
||||
|
||||
cmvr::task::TouchScreenTask task(cmvr::config::TouchScreenTaskConfig{});
|
||||
cmvr::task::TouchScreenTaskAdmissionTestPeer::prepareInit(
|
||||
task,
|
||||
"missing-arm",
|
||||
"missing-dexhand",
|
||||
camera->id());
|
||||
camera->blockStart();
|
||||
|
||||
bool init_result = true;
|
||||
std::thread init_thread([&] {
|
||||
init_result = task.init();
|
||||
});
|
||||
camera->waitForStartEntered();
|
||||
|
||||
auto& gate = cmvr::service::globalStopAllAdmissionGate();
|
||||
const auto ticket = gate.beginStopAll();
|
||||
EXPECT_TRUE(ticket.valid());
|
||||
camera->releaseStart();
|
||||
init_thread.join();
|
||||
|
||||
EXPECT_FALSE(init_result);
|
||||
EXPECT_EQ(task.state(), cmvr::task::TaskState::UNINITIALIZED);
|
||||
EXPECT_FALSE(camera->operationalActive());
|
||||
EXPECT_EQ(camera->operationalStartCalls(), 1);
|
||||
EXPECT_EQ(camera->operationalStopCalls(), 1);
|
||||
EXPECT_EQ(camera->lifecycleStopCalls(), 0);
|
||||
EXPECT_TRUE(gate.finishStopAll(ticket, true));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@ -18,26 +18,3 @@ target_link_libraries(ume_teleop_task
|
||||
|
||||
add_library(cmvr_es::ume_teleop_task ALIAS ume_teleop_task)
|
||||
install(TARGETS ume_teleop_task ARCHIVE DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(ume_teleop_task_test
|
||||
tests/ume_teleop_task_test.cpp
|
||||
)
|
||||
target_compile_features(ume_teleop_task_test PRIVATE cxx_std_17)
|
||||
target_link_libraries(ume_teleop_task_test
|
||||
PRIVATE
|
||||
cmvr_es::ume_teleop_task
|
||||
cmvr_es::stop_all_admission_gate
|
||||
Threads::Threads
|
||||
)
|
||||
add_test(NAME ume_teleop_task_test COMMAND ume_teleop_task_test)
|
||||
set(_ume_teleop_task_test_environment
|
||||
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}")
|
||||
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
|
||||
list(APPEND _ume_teleop_task_test_environment
|
||||
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
|
||||
endif()
|
||||
set_tests_properties(ume_teleop_task_test PROPERTIES
|
||||
TIMEOUT 10
|
||||
ENVIRONMENT "${_ume_teleop_task_test_environment}")
|
||||
endif()
|
||||
|
||||
@ -1,530 +0,0 @@
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <cstdio>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <grpcpp/grpcpp.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "cmvr/api/arm_teleop_v1.grpc.pb.h"
|
||||
#include "service/grpc/client/include/grpc_arm_teleop_client.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "task/ume_teleop_task/include/ume_teleop_task.h"
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
namespace api = cmvr::api::armteleop::v1;
|
||||
|
||||
class WatchdogArmTeleopService final : public api::ArmTeleopService::Service {
|
||||
public:
|
||||
explicit WatchdogArmTeleopService(
|
||||
const std::chrono::milliseconds watchdog)
|
||||
: watchdog_(watchdog)
|
||||
{
|
||||
}
|
||||
|
||||
grpc::Status Teleoperate(
|
||||
grpc::ServerContext* context,
|
||||
grpc::ServerReaderWriter<api::ServerFrame, api::ClientFrame>* stream) override
|
||||
{
|
||||
api::ClientFrame frame;
|
||||
if (!stream->Read(&frame) || !frame.has_open()) {
|
||||
return grpc::Status(
|
||||
grpc::StatusCode::INVALID_ARGUMENT,
|
||||
"OpenSession must be first");
|
||||
}
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
open_received_ = true;
|
||||
++open_count_;
|
||||
reader_finished_ = false;
|
||||
last_sequence_ = 0;
|
||||
last_activity_ = std::chrono::steady_clock::now();
|
||||
}
|
||||
condition_.notify_all();
|
||||
|
||||
api::ServerFrame opened;
|
||||
opened.mutable_status()->set_session_id("task-test-session");
|
||||
opened.mutable_status()->set_phase(api::SESSION_PHASE_OPENED);
|
||||
opened.mutable_status()->set_negotiated_watchdog_ms(
|
||||
static_cast<std::uint32_t>(watchdog_.count()));
|
||||
if (!stream->Write(opened)) {
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
|
||||
api::ServerFrame ready;
|
||||
ready.mutable_status()->set_session_id("task-test-session");
|
||||
ready.mutable_status()->set_phase(api::SESSION_PHASE_READY);
|
||||
ready.mutable_status()->set_negotiated_watchdog_ms(
|
||||
static_cast<std::uint32_t>(watchdog_.count()));
|
||||
if (!stream->Write(ready)) {
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
|
||||
std::thread reader([&] {
|
||||
api::ClientFrame incoming;
|
||||
while (stream->Read(&incoming)) {
|
||||
const auto arrived = std::chrono::steady_clock::now();
|
||||
bool terminal = false;
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
if (incoming.has_heartbeat() ||
|
||||
incoming.has_setpoint()) {
|
||||
const std::uint64_t sequence =
|
||||
incoming.has_heartbeat()
|
||||
? incoming.heartbeat().sequence()
|
||||
: incoming.setpoint().sequence();
|
||||
if (sequence == 0 || sequence <= last_sequence_) {
|
||||
sequence_valid_ = false;
|
||||
}
|
||||
last_sequence_ = sequence;
|
||||
last_activity_ = arrived;
|
||||
++activity_version_;
|
||||
if (incoming.has_heartbeat()) {
|
||||
++heartbeat_count_;
|
||||
} else {
|
||||
setpoints_.push_back(incoming.setpoint());
|
||||
}
|
||||
} else if (incoming.has_stop()) {
|
||||
stop_received_ = true;
|
||||
++stop_count_;
|
||||
terminal = true;
|
||||
}
|
||||
if (terminal) {
|
||||
reader_finished_ = true;
|
||||
}
|
||||
}
|
||||
condition_.notify_all();
|
||||
incoming.Clear();
|
||||
if (terminal) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
reader_finished_ = true;
|
||||
}
|
||||
condition_.notify_all();
|
||||
});
|
||||
|
||||
bool expired = false;
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
std::uint64_t observed_activity = activity_version_;
|
||||
while (!reader_finished_) {
|
||||
const auto deadline = last_activity_ + watchdog_;
|
||||
if (!condition_.wait_until(
|
||||
lock,
|
||||
deadline,
|
||||
[&] {
|
||||
return reader_finished_ ||
|
||||
activity_version_ != observed_activity;
|
||||
})) {
|
||||
watchdog_expired_ = true;
|
||||
expired = true;
|
||||
break;
|
||||
}
|
||||
observed_activity = activity_version_;
|
||||
}
|
||||
}
|
||||
if (expired) {
|
||||
context->TryCancel();
|
||||
}
|
||||
if (reader.joinable()) {
|
||||
reader.join();
|
||||
}
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
handler_finished_ = true;
|
||||
++handler_finish_count_;
|
||||
}
|
||||
condition_.notify_all();
|
||||
return expired
|
||||
? grpc::Status(
|
||||
grpc::StatusCode::DEADLINE_EXCEEDED,
|
||||
"test watchdog expired")
|
||||
: grpc::Status::OK;
|
||||
}
|
||||
|
||||
bool waitForOpen(const std::chrono::milliseconds timeout)
|
||||
{
|
||||
return waitForOpenCount(1, timeout);
|
||||
}
|
||||
|
||||
bool waitForOpenCount(
|
||||
const std::size_t count,
|
||||
const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return condition_.wait_for(
|
||||
lock, timeout, [&] { return open_count_ >= count; });
|
||||
}
|
||||
|
||||
bool waitForHandlerFinish(const std::chrono::milliseconds timeout)
|
||||
{
|
||||
return waitForHandlerFinishCount(1, timeout);
|
||||
}
|
||||
|
||||
bool waitForHandlerFinishCount(
|
||||
const std::size_t count,
|
||||
const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return condition_.wait_for(
|
||||
lock, timeout, [&] { return handler_finish_count_ >= count; });
|
||||
}
|
||||
|
||||
bool waitForHeartbeatCount(
|
||||
const std::size_t count,
|
||||
const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return condition_.wait_for(
|
||||
lock, timeout, [&] { return heartbeat_count_ >= count; });
|
||||
}
|
||||
|
||||
bool waitForSetpointCount(
|
||||
const std::size_t count,
|
||||
const std::chrono::milliseconds timeout)
|
||||
{
|
||||
std::unique_lock lock(mutex_);
|
||||
return condition_.wait_for(
|
||||
lock, timeout, [&] { return setpoints_.size() >= count; });
|
||||
}
|
||||
|
||||
std::size_t setpointCount() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return setpoints_.size();
|
||||
}
|
||||
|
||||
std::size_t heartbeatCount() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return heartbeat_count_;
|
||||
}
|
||||
|
||||
std::size_t stopCount() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return stop_count_;
|
||||
}
|
||||
|
||||
api::JointSetpoint lastSetpoint() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return setpoints_.empty()
|
||||
? api::JointSetpoint{}
|
||||
: setpoints_.back();
|
||||
}
|
||||
|
||||
bool watchdogExpired() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return watchdog_expired_;
|
||||
}
|
||||
|
||||
bool sequenceValid() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return sequence_valid_;
|
||||
}
|
||||
|
||||
bool stopReceived() const
|
||||
{
|
||||
std::lock_guard lock(mutex_);
|
||||
return stop_received_;
|
||||
}
|
||||
|
||||
private:
|
||||
const std::chrono::milliseconds watchdog_;
|
||||
mutable std::mutex mutex_;
|
||||
std::condition_variable condition_;
|
||||
bool open_received_{false};
|
||||
bool reader_finished_{false};
|
||||
bool handler_finished_{false};
|
||||
bool watchdog_expired_{false};
|
||||
bool sequence_valid_{true};
|
||||
bool stop_received_{false};
|
||||
std::size_t open_count_{0};
|
||||
std::size_t handler_finish_count_{0};
|
||||
std::size_t stop_count_{0};
|
||||
std::uint64_t activity_version_{0};
|
||||
std::uint64_t last_sequence_{0};
|
||||
std::size_t heartbeat_count_{0};
|
||||
std::vector<api::JointSetpoint> setpoints_;
|
||||
std::chrono::steady_clock::time_point last_activity_{};
|
||||
};
|
||||
|
||||
cmvr::config::UmeTeleopConfig validConfig(const std::string& endpoint)
|
||||
{
|
||||
cmvr::config::UmeTeleopConfig config;
|
||||
config.set_id("ume_teleop_test");
|
||||
config.set_server_address(endpoint);
|
||||
config.set_allow_insecure(true);
|
||||
|
||||
auto* open = config.mutable_open_session();
|
||||
open->set_protocol_major(1);
|
||||
open->set_protocol_minor(0);
|
||||
open->set_client_instance_id("ume-task-test");
|
||||
open->set_requested_command_rate_hz(20);
|
||||
open->set_requested_state_rate_hz(250);
|
||||
open->set_watchdog_timeout_ms(120);
|
||||
open->set_requested_lease_ms(500);
|
||||
open->mutable_expected_robot()->set_robot_id("test-arm");
|
||||
open->mutable_expected_robot()->add_joint_names("joint1");
|
||||
|
||||
config.mutable_reconnect()->set_initial_delay_ms(10);
|
||||
config.mutable_reconnect()->set_maximum_delay_ms(50);
|
||||
config.mutable_reconnect()->set_multiplier(2.0);
|
||||
return config;
|
||||
}
|
||||
|
||||
int fail(const std::string& detail)
|
||||
{
|
||||
std::cerr << "ume_teleop_task_test: " << detail << '\n';
|
||||
return 1;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
auto& admission = cmvr::service::globalStopAllAdmissionGate();
|
||||
admission.clearForTesting();
|
||||
|
||||
{
|
||||
cmvr::config::UmeTeleopConfig invalid;
|
||||
invalid.set_id("invalid");
|
||||
cmvr::task::UmeTeleopTask task(invalid);
|
||||
if (task.init() || task.state() != cmvr::task::TaskState::FAILED) {
|
||||
return fail("invalid transport configuration was not rejected");
|
||||
}
|
||||
task.stop();
|
||||
if (task.state() != cmvr::task::TaskState::FAILED) {
|
||||
return fail("stop did not preserve an initialization failure");
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// Exercise the start/stop race before a synchronous stream necessarily
|
||||
// publishes its ClientContext. The Task's cancellation predicate closes
|
||||
// this gap, while tryCancel() interrupts it once the context is visible.
|
||||
const std::string unavailable_endpoint =
|
||||
"unix:/tmp/cmvr_ume_teleop_unavailable_" +
|
||||
std::to_string(static_cast<long long>(::getpid())) + ".sock";
|
||||
auto channel = grpc::CreateChannel(
|
||||
unavailable_endpoint,
|
||||
grpc::InsecureChannelCredentials());
|
||||
auto client =
|
||||
std::make_shared<cmvr::teleop::GrpcArmTeleopClient>(channel);
|
||||
cmvr::task::UmeTeleopTask task(
|
||||
validConfig(unavailable_endpoint), client);
|
||||
if (!task.init() || !task.start()) {
|
||||
return fail("immediate-stop task did not initialize and start");
|
||||
}
|
||||
api::JointSetpoint disconnected_setpoint;
|
||||
disconnected_setpoint.add_position_rad(1.0);
|
||||
disconnected_setpoint.set_valid_for_us(100000);
|
||||
if (task.submitSetpoint(disconnected_setpoint)) {
|
||||
task.stop();
|
||||
return fail(
|
||||
"task accepted a motion command without a ready session");
|
||||
}
|
||||
const auto stop_begin = std::chrono::steady_clock::now();
|
||||
task.stop();
|
||||
if (std::chrono::steady_clock::now() - stop_begin > 2s ||
|
||||
task.state() != cmvr::task::TaskState::STOPPED) {
|
||||
return fail("immediate Task stop did not cancel and join promptly");
|
||||
}
|
||||
}
|
||||
|
||||
WatchdogArmTeleopService service(120ms);
|
||||
grpc::ServerBuilder builder;
|
||||
int selected_port = 0;
|
||||
builder.AddListeningPort(
|
||||
"127.0.0.1:0",
|
||||
grpc::InsecureServerCredentials(),
|
||||
&selected_port);
|
||||
builder.RegisterService(&service);
|
||||
std::unique_ptr<grpc::Server> server = builder.BuildAndStart();
|
||||
if (!server || selected_port == 0) {
|
||||
return fail("failed to start in-process gRPC server");
|
||||
}
|
||||
const std::string endpoint =
|
||||
"127.0.0.1:" + std::to_string(selected_port);
|
||||
|
||||
auto channel = grpc::CreateChannel(
|
||||
endpoint,
|
||||
grpc::InsecureChannelCredentials());
|
||||
auto client =
|
||||
std::make_shared<cmvr::teleop::GrpcArmTeleopClient>(channel);
|
||||
cmvr::task::UmeTeleopTask task(validConfig(endpoint), client);
|
||||
|
||||
if (task.runMode() != cmvr::task::TaskRunMode::BLOCKING_SERVICE) {
|
||||
server->Shutdown();
|
||||
return fail("task is not a BLOCKING_SERVICE");
|
||||
}
|
||||
if (!task.init()) {
|
||||
server->Shutdown();
|
||||
return fail("valid task did not initialize");
|
||||
}
|
||||
|
||||
auto admission_ticket = admission.beginStopAll();
|
||||
if (task.start() || task.isBusy()) {
|
||||
server->Shutdown();
|
||||
return fail("public start bypassed closed StopAll admission");
|
||||
}
|
||||
if (!admission.finishStopAll(admission_ticket, true) || !task.start()) {
|
||||
server->Shutdown();
|
||||
return fail("explicit start was not restored after successful StopAll");
|
||||
}
|
||||
if (!service.waitForOpen(2s)) {
|
||||
task.stop();
|
||||
server->Shutdown();
|
||||
return fail("task worker did not open the teleoperation stream");
|
||||
}
|
||||
|
||||
// No application commands are submitted here. Heartbeats alone must keep
|
||||
// the session alive for longer than the negotiated watchdog.
|
||||
if (!service.waitForHeartbeatCount(4, 2s) ||
|
||||
service.watchdogExpired() || !task.isBusy()) {
|
||||
task.stop();
|
||||
server->Shutdown();
|
||||
return fail("silent command stream did not survive via heartbeats");
|
||||
}
|
||||
|
||||
api::JointSetpoint first;
|
||||
first.set_sequence(999); // Task must replace caller-owned sequence values.
|
||||
first.add_position_rad(1.0);
|
||||
first.add_velocity_rad_s(0.0);
|
||||
first.set_valid_for_us(100000);
|
||||
if (!task.submitSetpoint(first) ||
|
||||
!service.waitForSetpointCount(1, 2s)) {
|
||||
task.stop();
|
||||
server->Shutdown();
|
||||
return fail("first mailbox setpoint was not sent");
|
||||
}
|
||||
|
||||
// The sender rate is 20 Hz. These arrive inside one command period, so the
|
||||
// capacity-one mailbox must publish only the newest value.
|
||||
for (int value = 2; value <= 4; ++value) {
|
||||
api::JointSetpoint setpoint;
|
||||
setpoint.set_sequence(1000 + value);
|
||||
setpoint.add_position_rad(static_cast<double>(value));
|
||||
setpoint.add_velocity_rad_s(0.0);
|
||||
setpoint.set_valid_for_us(100000);
|
||||
if (!task.submitSetpoint(setpoint)) {
|
||||
task.stop();
|
||||
server->Shutdown();
|
||||
return fail("latest-only mailbox rejected a valid setpoint");
|
||||
}
|
||||
}
|
||||
if (!service.waitForSetpointCount(2, 2s)) {
|
||||
task.stop();
|
||||
server->Shutdown();
|
||||
return fail("latest mailbox setpoint was not sent");
|
||||
}
|
||||
std::this_thread::sleep_for(70ms);
|
||||
const api::JointSetpoint latest = service.lastSetpoint();
|
||||
if (service.setpointCount() != 2 ||
|
||||
latest.position_rad_size() != 1 ||
|
||||
latest.position_rad(0) != 4.0 ||
|
||||
latest.sequence() == 0 ||
|
||||
latest.sequence() >= 1000) {
|
||||
task.stop();
|
||||
server->Shutdown();
|
||||
return fail("mailbox did not collapse queued commands to the latest value");
|
||||
}
|
||||
|
||||
const auto stop_begin = std::chrono::steady_clock::now();
|
||||
const bool activity_stopped = task.stopActivity();
|
||||
const auto stop_elapsed = std::chrono::steady_clock::now() - stop_begin;
|
||||
if (!activity_stopped || stop_elapsed > 2s) {
|
||||
server->Shutdown();
|
||||
return fail("stopActivity did not stop and join promptly");
|
||||
}
|
||||
if (task.state() != cmvr::task::TaskState::STOPPED ||
|
||||
task.isBusy() || !task.isFinished()) {
|
||||
server->Shutdown();
|
||||
return fail("task did not reach STOPPED after stopping its activity");
|
||||
}
|
||||
if (!service.waitForHandlerFinish(2s)) {
|
||||
server->Shutdown();
|
||||
return fail("server handler did not observe activity cancellation");
|
||||
}
|
||||
if (!service.stopReceived()) {
|
||||
server->Shutdown();
|
||||
return fail("stopActivity did not send StopSession before TryCancel");
|
||||
}
|
||||
api::JointSetpoint stopped_setpoint;
|
||||
stopped_setpoint.add_position_rad(5.0);
|
||||
stopped_setpoint.set_valid_for_us(100000);
|
||||
if (task.submitSetpoint(stopped_setpoint)) {
|
||||
server->Shutdown();
|
||||
return fail("stopped activity still accepted a setpoint");
|
||||
}
|
||||
const auto heartbeats_after_stop = service.heartbeatCount();
|
||||
const auto setpoints_after_stop = service.setpointCount();
|
||||
std::this_thread::sleep_for(200ms);
|
||||
if (service.heartbeatCount() != heartbeats_after_stop ||
|
||||
service.setpointCount() != setpoints_after_stop) {
|
||||
server->Shutdown();
|
||||
return fail("stopped activity continued sending heartbeat or setpoint frames");
|
||||
}
|
||||
|
||||
if (!task.start() ||
|
||||
!service.waitForOpenCount(2, 2s) ||
|
||||
!service.waitForHeartbeatCount(heartbeats_after_stop + 1, 2s) ||
|
||||
!task.isBusy()) {
|
||||
task.stop();
|
||||
server->Shutdown();
|
||||
return fail("explicit start did not create a new teleoperation activity");
|
||||
}
|
||||
api::JointSetpoint restarted_setpoint;
|
||||
restarted_setpoint.add_position_rad(6.0);
|
||||
restarted_setpoint.set_valid_for_us(100000);
|
||||
if (!task.submitSetpoint(restarted_setpoint) ||
|
||||
!service.waitForSetpointCount(setpoints_after_stop + 1, 2s)) {
|
||||
task.stop();
|
||||
server->Shutdown();
|
||||
return fail("restarted activity did not send a setpoint");
|
||||
}
|
||||
if (!task.stopActivity() ||
|
||||
!service.waitForHandlerFinishCount(2, 2s) ||
|
||||
service.stopCount() != 2 ||
|
||||
task.state() != cmvr::task::TaskState::STOPPED) {
|
||||
server->Shutdown();
|
||||
return fail("restarted activity did not stop cleanly");
|
||||
}
|
||||
|
||||
admission_ticket = admission.beginStopAll();
|
||||
if (admission.finishStopAll(admission_ticket, false) || task.start()) {
|
||||
server->Shutdown();
|
||||
return fail("failed StopAll did not keep public start fail-closed");
|
||||
}
|
||||
admission_ticket = admission.beginStopAll();
|
||||
if (!admission.finishStopAll(admission_ticket, true) ||
|
||||
!task.start() || !service.waitForOpenCount(3, 2s) ||
|
||||
!task.stopActivity() ||
|
||||
!service.waitForHandlerFinishCount(3, 2s)) {
|
||||
server->Shutdown();
|
||||
return fail("successful StopAll did not restore a new explicit start");
|
||||
}
|
||||
if (service.watchdogExpired() || !service.sequenceValid()) {
|
||||
server->Shutdown();
|
||||
return fail("heartbeat/setpoint sequence or watchdog contract failed");
|
||||
}
|
||||
|
||||
server->Shutdown();
|
||||
admission.clearForTesting();
|
||||
std::cout << "ume_teleop_task_test: PASS\n";
|
||||
return 0;
|
||||
}
|
||||
@ -1,986 +0,0 @@
|
||||
[
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/biohead_command.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/biohead_command.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/biohead_command.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/biohead_command.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/biohead_service.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/biohead_service.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/biohead_service.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/biohead_service.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/camera_command.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/camera_command.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/camera_command.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/camera_command.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/camera_service.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/camera_service.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/camera_service.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/camera_service.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/common.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/common.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/common.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/common.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/dexhand_command.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/dexhand_command.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/dexhand_command.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/dexhand_command.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/dexhand_service.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/dexhand_service.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/dexhand_service.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/dexhand_service.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/hlc_command.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/hlc_command.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/hlc_command.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/hlc_command.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/hlc_service.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/hlc_service.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/hlc_service.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/hlc_service.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/humanoid_robot_command.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/humanoid_robot_command.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/humanoid_robot_command.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/humanoid_robot_command.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/humanoid_robot_service.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/humanoid_robot_service.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/humanoid_robot_service.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/humanoid_robot_service.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/microphone_command.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/microphone_command.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/microphone_command.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/microphone_command.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/microphone_service.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/microphone_service.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/microphone_service.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/microphone_service.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/speaker_command.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/speaker_command.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/speaker_command.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/speaker_command.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/speaker_service.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/speaker_service.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/speaker_service.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/speaker_service.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/system_command.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/system_command.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/system_command.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/system_command.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/system_service.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/system_service.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/system_service.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/system_service.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/test_service.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/test_service.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/test_service.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/test_service.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/camera_config/camera_config.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/camera_config/camera_config.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/camera_config/camera_config.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/camera_config/camera_config.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/dexhand_config/dexhand_config.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/dexhand_config/dexhand_config.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/dexhand_config/dexhand_config.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/dexhand_config/dexhand_config.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/microphone_config/microphone_config.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/microphone_config/microphone_config.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/microphone_config/microphone_config.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/microphone_config/microphone_config.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/pinocchio_dls_ik_config.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/pinocchio_dls_ik_config.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/pinocchio_dls_ik_config.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/pinocchio_dls_ik_config.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/pinocchio_qp_ik_solver_config.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/pinocchio_qp_ik_solver_config.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/pinocchio_qp_ik_solver_config.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/pinocchio_qp_ik_solver_config.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/speaker_config/speaker_conifg.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/speaker_config/speaker_conifg.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/speaker_config/speaker_conifg.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/speaker_config/speaker_conifg.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/touch_screen_app_config/touch_screen_app_config.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/touch_screen_app_config/touch_screen_app_config.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/touch_screen_app_config/touch_screen_app_config.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/touch_screen_app_config/touch_screen_app_config.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/can_card_parameter.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/can_card_parameter.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/can_card_parameter.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/can_card_parameter.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/canopen.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/canopen.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/canopen.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/canopen.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/error_code.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/error_code.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/error_code.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/error_code.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/geometry.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/geometry.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/geometry.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/geometry.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/motor.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/motor.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/motor.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/motor.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/robot_detail.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/robot_detail.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/robot_detail.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/robot_detail.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/biohead_command.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/biohead_command.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/biohead_command.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/biohead_command.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/biohead_service.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/biohead_service.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/biohead_service.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/biohead_service.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/camera_command.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/camera_command.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/camera_command.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/camera_command.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/camera_service.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/camera_service.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/camera_service.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/camera_service.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/common.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/common.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/common.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/common.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/dexhand_command.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/dexhand_command.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/dexhand_command.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/dexhand_command.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/dexhand_service.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/dexhand_service.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/dexhand_service.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/dexhand_service.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/hlc_command.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/hlc_command.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/hlc_command.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/hlc_command.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/hlc_service.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/hlc_service.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/hlc_service.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/hlc_service.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/humanoid_robot_command.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/humanoid_robot_command.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/humanoid_robot_command.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/humanoid_robot_command.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/humanoid_robot_service.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/humanoid_robot_service.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/humanoid_robot_service.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/humanoid_robot_service.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/microphone_command.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/microphone_command.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/microphone_command.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/microphone_command.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/microphone_service.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/microphone_service.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/microphone_service.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/microphone_service.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/speaker_command.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/speaker_command.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/speaker_command.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/speaker_command.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/speaker_service.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/speaker_service.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/speaker_service.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/speaker_service.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/system_command.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/system_command.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/system_command.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/system_command.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/system_service.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/system_service.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/system_service.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/system_service.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/test_service.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/test_service.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/api/test_service.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/api/test_service.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/camera_config/camera_config.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/camera_config/camera_config.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/camera_config/camera_config.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/camera_config/camera_config.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/dexhand_config/dexhand_config.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/dexhand_config/dexhand_config.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/dexhand_config/dexhand_config.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/dexhand_config/dexhand_config.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/microphone_config/microphone_config.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/microphone_config/microphone_config.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/microphone_config/microphone_config.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/microphone_config/microphone_config.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/pinocchio_dls_ik_config.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/pinocchio_dls_ik_config.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/pinocchio_dls_ik_config.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/pinocchio_dls_ik_config.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/pinocchio_qp_ik_solver_config.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/pinocchio_qp_ik_solver_config.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/pinocchio_qp_ik_solver_config.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/pinocchio_qp_ik_solver_config.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/speaker_config/speaker_conifg.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/speaker_config/speaker_conifg.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/speaker_config/speaker_conifg.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/speaker_config/speaker_conifg.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/touch_screen_app_config/touch_screen_app_config.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/touch_screen_app_config/touch_screen_app_config.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/config/touch_screen_app_config/touch_screen_app_config.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/config/touch_screen_app_config/touch_screen_app_config.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/can_card_parameter.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/can_card_parameter.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/can_card_parameter.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/can_card_parameter.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/canopen.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/canopen.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/canopen.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/canopen.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/error_code.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/error_code.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/error_code.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/error_code.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/geometry.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/geometry.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/geometry.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/geometry.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/motor.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/motor.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/motor.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/motor.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/robot_detail.grpc.pb.cc.o -c /home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/robot_detail.grpc.pb.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf/cmvr/msgs/robot_detail.grpc.pb.cc",
|
||||
"output": "CMakeFiles/proto-objects.dir/_protobuf/cmvr/msgs/robot_detail.grpc.pb.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/cmvr-es/monitor_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/data_center -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIE -o CMakeFiles/cmvr_es.dir/cmvr-es/main.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/main.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/main.cpp",
|
||||
"output": "CMakeFiles/cmvr_es.dir/cmvr-es/main.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/base/src/thread_pool.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/base/src/thread_pool.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/base/src/thread_pool.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/base/src/thread_pool.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/base/src/timer.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/base/src/timer.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/base/src/timer.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/base/src/timer.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/base/src/abstract_interpolation.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/base/src/abstract_interpolation.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/base/src/abstract_interpolation.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/base/src/abstract_interpolation.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/dynamics/src/inertial.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/dynamics/src/inertial.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/dynamics/src/inertial.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/dynamics/src/inertial.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/dynamics/src/joint.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/dynamics/src/joint.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/dynamics/src/joint.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/dynamics/src/joint.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/dynamics/src/link.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/dynamics/src/link.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/dynamics/src/link.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/dynamics/src/link.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/dynamics/src/robot.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/dynamics/src/robot.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/dynamics/src/robot.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/dynamics/src/robot.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/math/src/qp_solver.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/math/src/qp_solver.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/math/src/qp_solver.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/math/src/qp_solver.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/math/src/se2.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/math/src/se2.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/math/src/se2.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/math/src/se2.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/math/src/se3.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/math/src/se3.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/math/src/se3.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/math/src/se3.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/math/src/so3.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/math/src/so3.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/math/src/so3.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/math/src/so3.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -g -std=gnu++17 -fPIC -o cmvr-es/utils/CMakeFiles/utils.dir/controller/src/cartesian_controller.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/utils/controller/src/cartesian_controller.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/utils/controller/src/cartesian_controller.cpp",
|
||||
"output": "cmvr-es/utils/CMakeFiles/utils.dir/controller/src/cartesian_controller.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dhardware_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -g -std=gnu++17 -fPIC -o cmvr-es/hardware/CMakeFiles/hardware.dir/src/serial_interface.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/hardware/src/serial_interface.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/hardware/src/serial_interface.cpp",
|
||||
"output": "cmvr-es/hardware/CMakeFiles/hardware.dir/src/serial_interface.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dhardware_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -g -std=gnu++17 -fPIC -o cmvr-es/hardware/CMakeFiles/hardware.dir/src/esp32_serial_port.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/hardware/src/esp32_serial_port.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/hardware/src/esp32_serial_port.cpp",
|
||||
"output": "cmvr-es/hardware/CMakeFiles/hardware.dir/src/esp32_serial_port.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dhardware_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -g -std=gnu++17 -fPIC -o cmvr-es/hardware/CMakeFiles/hardware.dir/src/posix_serial_transport.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/hardware/src/posix_serial_transport.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/hardware/src/posix_serial_transport.cpp",
|
||||
"output": "cmvr-es/hardware/CMakeFiles/hardware.dir/src/posix_serial_transport.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Duvc_camera_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/uvc_camera -g -std=gnu++17 -fPIC -o cmvr-es/devices/camera/uvc_camera/CMakeFiles/uvc_camera.dir/src/uvc_camera.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/uvc_camera/src/uvc_camera.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/uvc_camera/src/uvc_camera.cpp",
|
||||
"output": "cmvr-es/devices/camera/uvc_camera/CMakeFiles/uvc_camera.dir/src/uvc_camera.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Drealsense_camera_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/realsense_camera -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -g -std=gnu++17 -fPIC -o cmvr-es/devices/camera/realsense_camera/CMakeFiles/realsense_camera.dir/src/realsense_camera.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/realsense_camera/src/realsense_camera.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/realsense_camera/src/realsense_camera.cpp",
|
||||
"output": "cmvr-es/devices/camera/realsense_camera/CMakeFiles/realsense_camera.dir/src/realsense_camera.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/realsense_camera -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/devices/camera/realsense_camera/CMakeFiles/realsense_camera_test.dir/src/realsense_camera_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/realsense_camera/src/realsense_camera_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/realsense_camera/src/realsense_camera_test.cpp",
|
||||
"output": "cmvr-es/devices/camera/realsense_camera/CMakeFiles/realsense_camera_test.dir/src/realsense_camera_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dmujoco_camera_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/mujoco_camera -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/devices/camera/mujoco_camera/CMakeFiles/mujoco_camera.dir/src/mujoco_camera.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/mujoco_camera/src/mujoco_camera.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/mujoco_camera/src/mujoco_camera.cpp",
|
||||
"output": "cmvr-es/devices/camera/mujoco_camera/CMakeFiles/mujoco_camera.dir/src/mujoco_camera.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dffmpeg_speaker_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/speaker/ffmpeg_speaker -g -std=gnu++17 -fPIC -o cmvr-es/devices/speaker/ffmpeg_speaker/CMakeFiles/ffmpeg_speaker.dir/src/ffmpeg_speaker.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/speaker/ffmpeg_speaker/src/ffmpeg_speaker.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/speaker/ffmpeg_speaker/src/ffmpeg_speaker.cpp",
|
||||
"output": "cmvr-es/devices/speaker/ffmpeg_speaker/CMakeFiles/ffmpeg_speaker.dir/src/ffmpeg_speaker.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dffmpeg_microphone_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/microphone/ffmpeg_microphone -g -std=gnu++17 -fPIC -o cmvr-es/devices/microphone/ffmpeg_microphone/CMakeFiles/ffmpeg_microphone.dir/src/ffmpeg_microphone.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/microphone/ffmpeg_microphone/src/ffmpeg_microphone.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/microphone/ffmpeg_microphone/src/ffmpeg_microphone.cpp",
|
||||
"output": "cmvr-es/devices/microphone/ffmpeg_microphone/CMakeFiles/ffmpeg_microphone.dir/src/ffmpeg_microphone.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Drh56dftp_dexhand_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/rh56dftp_dexhand -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -g -std=gnu++17 -fPIC -o cmvr-es/devices/dexhand/rh56dftp_dexhand/CMakeFiles/rh56dftp_dexhand.dir/src/rh56dftp_dexhand.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/rh56dftp_dexhand/src/rh56dftp_dexhand.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/rh56dftp_dexhand/src/rh56dftp_dexhand.cpp",
|
||||
"output": "cmvr-es/devices/dexhand/rh56dftp_dexhand/CMakeFiles/rh56dftp_dexhand.dir/src/rh56dftp_dexhand.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/rh56dftp_dexhand -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/devices/dexhand/rh56dftp_dexhand/CMakeFiles/rh56dftp_dexhand_test.dir/src/rh56dftp_dexhand_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/rh56dftp_dexhand/src/rh56dftp_dexhand_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/rh56dftp_dexhand/src/rh56dftp_dexhand_test.cpp",
|
||||
"output": "cmvr-es/devices/dexhand/rh56dftp_dexhand/CMakeFiles/rh56dftp_dexhand_test.dir/src/rh56dftp_dexhand_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dpx_6ax_gen3_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/px_6ax_gen3 -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/devices/dexhand/px_6ax_gen3/CMakeFiles/px_6ax_gen3.dir/src/px_6ax_gen3.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/px_6ax_gen3/src/px_6ax_gen3.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/px_6ax_gen3/src/px_6ax_gen3.cpp",
|
||||
"output": "cmvr-es/devices/dexhand/px_6ax_gen3/CMakeFiles/px_6ax_gen3.dir/src/px_6ax_gen3.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/px_6ax_gen3 -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/devices/dexhand/px_6ax_gen3/CMakeFiles/px_6ax_gen3_test.dir/src/px_6ax_gen3_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/px_6ax_gen3/src/px_6ax_gen3_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/px_6ax_gen3/src/px_6ax_gen3_test.cpp",
|
||||
"output": "cmvr-es/devices/dexhand/px_6ax_gen3/CMakeFiles/px_6ax_gen3_test.dir/src/px_6ax_gen3_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dhead_esp32_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/biohead/biohead_esp32 -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -g -std=gnu++17 -fPIC -o cmvr-es/devices/biohead/biohead_esp32/CMakeFiles/head_esp32.dir/src/biohead_esp32.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/biohead/biohead_esp32/src/biohead_esp32.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/biohead/biohead_esp32/src/biohead_esp32.cpp",
|
||||
"output": "cmvr-es/devices/biohead/biohead_esp32/CMakeFiles/head_esp32.dir/src/biohead_esp32.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dhumanoid_robot_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/data_center -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/devices/robot/humanoid_robot/CMakeFiles/humanoid_robot.dir/src/humanoid_robot.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot/src/humanoid_robot.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot/src/humanoid_robot.cpp",
|
||||
"output": "cmvr-es/devices/robot/humanoid_robot/CMakeFiles/humanoid_robot.dir/src/humanoid_robot.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/data_center -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIE -o cmvr-es/devices/robot/humanoid_robot/CMakeFiles/humanoid_robot_test.dir/src/humanoid_robot_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot/src/humanoid_robot_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot/src/humanoid_robot_test.cpp",
|
||||
"output": "cmvr-es/devices/robot/humanoid_robot/CMakeFiles/humanoid_robot_test.dir/src/humanoid_robot_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dcanbus_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/devices/canbus/CMakeFiles/canbus.dir/can_client/socket/socket_can_client_raw.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_client/socket/socket_can_client_raw.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_client/socket/socket_can_client_raw.cc",
|
||||
"output": "cmvr-es/devices/canbus/CMakeFiles/canbus.dir/can_client/socket/socket_can_client_raw.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dcanbus_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/devices/canbus/CMakeFiles/canbus.dir/common/byte.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/common/byte.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/common/byte.cc",
|
||||
"output": "cmvr-es/devices/canbus/CMakeFiles/canbus.dir/common/byte.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/devices/canbus/CMakeFiles/socket_can_client_raw_test.dir/can_client/socket/socket_can_client_raw_test.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_client/socket/socket_can_client_raw_test.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_client/socket/socket_can_client_raw_test.cc",
|
||||
"output": "cmvr-es/devices/canbus/CMakeFiles/socket_can_client_raw_test.dir/can_client/socket/socket_can_client_raw_test.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/devices/canbus/CMakeFiles/protocol_data_test.dir/can_comm/protocol_data_test.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_comm/protocol_data_test.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_comm/protocol_data_test.cc",
|
||||
"output": "cmvr-es/devices/canbus/CMakeFiles/protocol_data_test.dir/can_comm/protocol_data_test.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/devices/canbus/CMakeFiles/message_manager_test.dir/can_comm/message_manager_test.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_comm/message_manager_test.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_comm/message_manager_test.cc",
|
||||
"output": "cmvr-es/devices/canbus/CMakeFiles/message_manager_test.dir/can_comm/message_manager_test.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/devices/canbus/CMakeFiles/can_sender_test.dir/can_comm/can_sender_test.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_comm/can_sender_test.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_comm/can_sender_test.cc",
|
||||
"output": "cmvr-es/devices/canbus/CMakeFiles/can_sender_test.dir/can_comm/can_sender_test.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/devices/canbus/CMakeFiles/can_receiver_test.dir/can_comm/can_receiver_test.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_comm/can_receiver_test.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus/can_comm/can_receiver_test.cc",
|
||||
"output": "cmvr-es/devices/canbus/CMakeFiles/can_receiver_test.dir/can_comm/can_receiver_test.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/devices/motor/CMakeFiles/motor_manager_test.dir/motor_manager_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/motor_manager_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/motor_manager_test.cpp",
|
||||
"output": "cmvr-es/devices/motor/CMakeFiles/motor_manager_test.dir/motor_manager_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dti5motor_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -g -std=gnu++17 -fPIC -o cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/protocol/ti5_motor_sdo_response.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/protocol/ti5_motor_sdo_response.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/protocol/ti5_motor_sdo_response.cpp",
|
||||
"output": "cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/protocol/ti5_motor_sdo_response.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dti5motor_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -g -std=gnu++17 -fPIC -o cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/protocol/ti5_motor_tpdo1.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/protocol/ti5_motor_tpdo1.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/protocol/ti5_motor_tpdo1.cpp",
|
||||
"output": "cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/protocol/ti5_motor_tpdo1.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dti5motor_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -g -std=gnu++17 -fPIC -o cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/protocol/ti5_motor_tpdo2.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/protocol/ti5_motor_tpdo2.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/protocol/ti5_motor_tpdo2.cpp",
|
||||
"output": "cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/protocol/ti5_motor_tpdo2.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dti5motor_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -g -std=gnu++17 -fPIC -o cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/protocol/ti5_motor_rpdo1.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/protocol/ti5_motor_rpdo1.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/protocol/ti5_motor_rpdo1.cpp",
|
||||
"output": "cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/protocol/ti5_motor_rpdo1.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dti5motor_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -g -std=gnu++17 -fPIC -o cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/protocol/ti5_motor_rpdo2.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/protocol/ti5_motor_rpdo2.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/protocol/ti5_motor_rpdo2.cpp",
|
||||
"output": "cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/protocol/ti5_motor_rpdo2.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dti5motor_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -g -std=gnu++17 -fPIC -o cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/ti5_motor_canopen_protocol.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/ti5_motor_canopen_protocol.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/canopen/ti5_motor_canopen_protocol.cpp",
|
||||
"output": "cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/canopen/ti5_motor_canopen_protocol.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dti5motor_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -g -std=gnu++17 -fPIC -o cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/ti5_motor.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/ti5_motor.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor/ti5_motor.cpp",
|
||||
"output": "cmvr-es/devices/motor/ti5_motor/CMakeFiles/ti5motor.dir/ti5_motor.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/uvc_camera -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/speaker/ffmpeg_speaker -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/microphone/ffmpeg_microphone -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/realsense_camera -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/rh56dftp_dexhand -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/px_6ax_gen3 -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/biohead/biohead_esp32 -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -g -std=gnu++17 -fPIC -o cmvr-es/device_manager/CMakeFiles/device_manager.dir/src/device_factory.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/device_manager/src/device_factory.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager/src/device_factory.cpp",
|
||||
"output": "cmvr-es/device_manager/CMakeFiles/device_manager.dir/src/device_factory.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/uvc_camera -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/speaker/ffmpeg_speaker -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/microphone/ffmpeg_microphone -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/realsense_camera -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/rh56dftp_dexhand -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/px_6ax_gen3 -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/biohead/biohead_esp32 -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -g -std=gnu++17 -fPIC -o cmvr-es/device_manager/CMakeFiles/device_manager.dir/src/device_manager.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/device_manager/src/device_manager.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager/src/device_manager.cpp",
|
||||
"output": "cmvr-es/device_manager/CMakeFiles/device_manager.dir/src/device_manager.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/uvc_camera -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/speaker/ffmpeg_speaker -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/microphone/ffmpeg_microphone -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/realsense_camera -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/rh56dftp_dexhand -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/dexhand/px_6ax_gen3 -I/home/lgv/cmvr/cmvr-es/cmvr-es/hardware -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/biohead/biohead_esp32 -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -g -std=gnu++17 -fPIC -o cmvr-es/device_manager/CMakeFiles/device_manager.dir/src/system_monitor.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/device_manager/src/system_monitor.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager/src/system_monitor.cpp",
|
||||
"output": "cmvr-es/device_manager/CMakeFiles/device_manager.dir/src/system_monitor.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Ddisk_monitor_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/monitor/diskmonitor -g -std=gnu++17 -fPIC -o cmvr-es/monitor/diskmonitor/CMakeFiles/disk_monitor.dir/src/disk_monitor.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/monitor/diskmonitor/src/disk_monitor.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/monitor/diskmonitor/src/disk_monitor.cpp",
|
||||
"output": "cmvr-es/monitor/diskmonitor/CMakeFiles/disk_monitor.dir/src/disk_monitor.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/monitor_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/monitor/diskmonitor -g -std=gnu++17 -fPIC -o cmvr-es/monitor_manager/CMakeFiles/monitor_manager.dir/src/monitor_factory.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/monitor_manager/src/monitor_factory.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/monitor_manager/src/monitor_factory.cpp",
|
||||
"output": "cmvr-es/monitor_manager/CMakeFiles/monitor_manager.dir/src/monitor_factory.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/monitor_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/monitor/diskmonitor -g -std=gnu++17 -fPIC -o cmvr-es/monitor_manager/CMakeFiles/monitor_manager.dir/src/monitor_manager.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/monitor_manager/src/monitor_manager.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/monitor_manager/src/monitor_manager.cpp",
|
||||
"output": "cmvr-es/monitor_manager/CMakeFiles/monitor_manager.dir/src/monitor_manager.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_camera_service.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_camera_service.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_camera_service.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_camera_service.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_system_service.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_system_service.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_system_service.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_system_service.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_speaker_service.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_speaker_service.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_speaker_service.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_speaker_service.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_microphone_service.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_microphone_service.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_microphone_service.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_microphone_service.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_head_service.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_head_service.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_head_service.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_head_service.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_dexhand_service.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_dexhand_service.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_dexhand_service.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_dexhand_service.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_humanoid_robot_service.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_humanoid_robot_service.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_humanoid_robot_service.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_humanoid_robot_service.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_hlc_service.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_hlc_service.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_hlc_service.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/service.dir/grpc/src/grpc_hlc_service.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/service/CMakeFiles/service.dir/grpc/src/server_runner.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/server_runner.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/server_runner.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/service.dir/grpc/src/server_runner.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIE -o cmvr-es/service/CMakeFiles/grpc_humanoid_robot_client_test.dir/grpc/src/grpc_humanoid_robot_client_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_humanoid_robot_client_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_humanoid_robot_client_test.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/grpc_humanoid_robot_client_test.dir/grpc/src/grpc_humanoid_robot_client_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/third_party/gtest/1.17.0/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/service/CMakeFiles/grpc_hlc_client_test.dir/grpc/src/grpc_hlc_client_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_hlc_client_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/service/grpc/src/grpc_hlc_client_test.cpp",
|
||||
"output": "cmvr-es/service/CMakeFiles/grpc_hlc_client_test.dir/grpc/src/grpc_hlc_client_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dperception_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/perception/CMakeFiles/perception.dir/src/tag_relative_target_3d.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/perception/src/tag_relative_target_3d.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/perception/src/tag_relative_target_3d.cpp",
|
||||
"output": "cmvr-es/perception/CMakeFiles/perception.dir/src/tag_relative_target_3d.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dperception_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/perception/CMakeFiles/perception.dir/src/apriltag_perception.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/perception/src/apriltag_perception.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/perception/src/apriltag_perception.cpp",
|
||||
"output": "cmvr-es/perception/CMakeFiles/perception.dir/src/apriltag_perception.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/realsense_camera -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIE -o cmvr-es/perception/CMakeFiles/tag_relative_target_3d_test.dir/src/tag_relative_target_3d_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/perception/src/tag_relative_target_3d_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/perception/src/tag_relative_target_3d_test.cpp",
|
||||
"output": "cmvr-es/perception/CMakeFiles/tag_relative_target_3d_test.dir/src/tag_relative_target_3d_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dcontroller_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/controller/CMakeFiles/controller.dir/src/ibvs_controller.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/controller/src/ibvs_controller.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/controller/src/ibvs_controller.cpp",
|
||||
"output": "cmvr-es/controller/CMakeFiles/controller.dir/src/ibvs_controller.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dcontroller_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/controller/CMakeFiles/controller.dir/src/pid_controller.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/controller/src/pid_controller.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/controller/src/pid_controller.cpp",
|
||||
"output": "cmvr-es/controller/CMakeFiles/controller.dir/src/pid_controller.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DELPP_NO_DEFAULT_LOG_FILE -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/camera/mujoco_camera -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIE -o cmvr-es/controller/CMakeFiles/controller_test.dir/src/controller_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/controller/src/controller_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/controller/src/controller_test.cpp",
|
||||
"output": "cmvr-es/controller/CMakeFiles/controller_test.dir/src/controller_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dplanner_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/planner/CMakeFiles/planner.dir/joint_space_planner/src/joint_space_planner.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/planner/joint_space_planner/src/joint_space_planner.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/planner/joint_space_planner/src/joint_space_planner.cpp",
|
||||
"output": "cmvr-es/planner/CMakeFiles/planner.dir/joint_space_planner/src/joint_space_planner.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dplanner_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/planner/CMakeFiles/planner.dir/joint_space_planner/src/joint_space_planner_creator.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/planner/joint_space_planner/src/joint_space_planner_creator.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/planner/joint_space_planner/src/joint_space_planner_creator.cpp",
|
||||
"output": "cmvr-es/planner/CMakeFiles/planner.dir/joint_space_planner/src/joint_space_planner_creator.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dplanner_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/planner/CMakeFiles/planner.dir/joint_space_planner/src/toppra_bspline.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/planner/joint_space_planner/src/toppra_bspline.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/planner/joint_space_planner/src/toppra_bspline.cpp",
|
||||
"output": "cmvr-es/planner/CMakeFiles/planner.dir/joint_space_planner/src/toppra_bspline.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dplanner_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/planner/CMakeFiles/planner.dir/s_curve_planner/src/s_curve_position_planner.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/planner/s_curve_planner/src/s_curve_position_planner.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/planner/s_curve_planner/src/s_curve_position_planner.cpp",
|
||||
"output": "cmvr-es/planner/CMakeFiles/planner.dir/s_curve_planner/src/s_curve_position_planner.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dplanner_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/planner/CMakeFiles/planner.dir/s_curve_planner/src/s_curve_velocity_planner.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/planner/s_curve_planner/src/s_curve_velocity_planner.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/planner/s_curve_planner/src/s_curve_velocity_planner.cpp",
|
||||
"output": "cmvr-es/planner/CMakeFiles/planner.dir/s_curve_planner/src/s_curve_velocity_planner.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dplanner_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/planner/CMakeFiles/planner.dir/cartesian_space_planner/src/cartesian_twist_limiter.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/planner/cartesian_space_planner/src/cartesian_twist_limiter.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/planner/cartesian_space_planner/src/cartesian_twist_limiter.cpp",
|
||||
"output": "cmvr-es/planner/CMakeFiles/planner.dir/cartesian_space_planner/src/cartesian_twist_limiter.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/data_center -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/planner/CMakeFiles/joint_space_planner_test.dir/joint_space_planner/src/joint_space_planner_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/planner/joint_space_planner/src/joint_space_planner_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/planner/joint_space_planner/src/joint_space_planner_test.cpp",
|
||||
"output": "cmvr-es/planner/CMakeFiles/joint_space_planner_test.dir/joint_space_planner/src/joint_space_planner_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/planner/CMakeFiles/cartesian_twist_limiter_test.dir/cartesian_space_planner/src/cartesian_twist_limiter_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/planner/cartesian_space_planner/src/cartesian_twist_limiter_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/planner/cartesian_space_planner/src/cartesian_twist_limiter_test.cpp",
|
||||
"output": "cmvr-es/planner/CMakeFiles/cartesian_twist_limiter_test.dir/cartesian_space_planner/src/cartesian_twist_limiter_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dik_solver_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/ik_solver.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/ik_solver.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/ik_solver.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/ik_solver.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dik_solver_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/ik_solver_creator.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/ik_solver_creator.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/ik_solver_creator.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/ik_solver_creator.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dik_solver_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/urdf_parser.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/urdf_parser.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/urdf_parser.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/urdf_parser.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dik_solver_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/pinocchio_ik_base.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/pinocchio_ik_base.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/pinocchio_ik_base.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/pinocchio_ik_base.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dik_solver_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/pinocchio_dls_ik_solver.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/pinocchio_dls_ik_solver.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/pinocchio_dls_ik_solver.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/pinocchio_dls_ik_solver.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dik_solver_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/pinocchio_qp_ik_solver.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/pinocchio_qp_ik_solver.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/pinocchio_qp_ik_solver.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/pinocchio_qp_ik_solver.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dik_solver_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/bias_srs_ik_slover.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/bias_srs_ik_slover.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/bias_srs_ik_slover.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/bias_srs_ik_slover.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dik_solver_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/joints_limit_analyzer.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/joints_limit_analyzer.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/joints_limit_analyzer.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/joints_limit_analyzer.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dik_solver_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/lawba_ik_solver.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/lawba_ik_solver.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/lawba_ik_solver.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/lawba_ik_solver.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dik_solver_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/opt_psi_selector.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/opt_psi_selector.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/opt_psi_selector.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_solver.dir/src/opt_psi_selector.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/ik_solver/CMakeFiles/srs_ik_test.dir/src/srs_ik_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/srs_ik_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/srs_ik_test.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/srs_ik_test.dir/src/srs_ik_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIE -o cmvr-es/ik_solver/CMakeFiles/ik_test.dir/src/ik_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/ik_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver/src/ik_test.cpp",
|
||||
"output": "cmvr-es/ik_solver/CMakeFiles/ik_test.dir/src/ik_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/data_center -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -g -std=gnu++17 -fPIC -o cmvr-es/data_center/CMakeFiles/data_center.dir/src/data_center.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/data_center/src/data_center.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/data_center/src/data_center.cpp",
|
||||
"output": "cmvr-es/data_center/CMakeFiles/data_center.dir/src/data_center.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/data_center -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/canbus -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/motor/ti5_motor -g -std=gnu++17 -fPIC -o cmvr-es/data_center/CMakeFiles/data_center.dir/src/motors_info.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/data_center/src/motors_info.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/data_center/src/motors_info.cpp",
|
||||
"output": "cmvr-es/data_center/CMakeFiles/data_center.dir/src/motors_info.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIC -o cmvr-es/applications/CMakeFiles/applications.dir/src/touch_screen_app.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/applications/src/touch_screen_app.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/applications/src/touch_screen_app.cpp",
|
||||
"output": "cmvr-es/applications/CMakeFiles/applications.dir/src/touch_screen_app.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/applications -I/home/lgv/cmvr/cmvr-es/cmvr-es/controller -I/home/lgv/cmvr/cmvr-es/cmvr-es/perception -I/home/lgv/cmvr/cmvr-es/cmvr-es/ik_solver -I/home/lgv/cmvr/cmvr-es/cmvr-es/planner -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices/robot/humanoid_robot -I/home/lgv/cmvr/cmvr-es/cmvr-es/device_manager -I/home/lgv/cmvr/cmvr-es/cmvr-es/service -I/home/lgv/cmvr/cmvr-es/cmvr-es/monitor_manager -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -g -std=gnu++17 -fPIE -o cmvr-es/applications/CMakeFiles/touch_screen_app_test.dir/src/touch_screen_app_test.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/applications/src/touch_screen_app_test.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/applications/src/touch_screen_app_test.cpp",
|
||||
"output": "cmvr-es/applications/CMakeFiles/touch_screen_app_test.dir/src/touch_screen_app_test.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dmujoco_viewer_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer -g -std=gnu++17 -fPIC -o cmvr-es/simulate/mujoco/mujoco_viewer/CMakeFiles/mujoco_viewer.dir/src/glfw_adapter.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer/src/glfw_adapter.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer/src/glfw_adapter.cc",
|
||||
"output": "cmvr-es/simulate/mujoco/mujoco_viewer/CMakeFiles/mujoco_viewer.dir/src/glfw_adapter.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dmujoco_viewer_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer -g -std=gnu++17 -fPIC -o cmvr-es/simulate/mujoco/mujoco_viewer/CMakeFiles/mujoco_viewer.dir/src/glfw_dispatch.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer/src/glfw_dispatch.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer/src/glfw_dispatch.cc",
|
||||
"output": "cmvr-es/simulate/mujoco/mujoco_viewer/CMakeFiles/mujoco_viewer.dir/src/glfw_dispatch.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dmujoco_viewer_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer -g -std=gnu++17 -fPIC -o cmvr-es/simulate/mujoco/mujoco_viewer/CMakeFiles/mujoco_viewer.dir/src/mujoco_viewer.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer/src/mujoco_viewer.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer/src/mujoco_viewer.cpp",
|
||||
"output": "cmvr-es/simulate/mujoco/mujoco_viewer/CMakeFiles/mujoco_viewer.dir/src/mujoco_viewer.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dmujoco_viewer_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer -g -std=gnu++17 -fPIC -o cmvr-es/simulate/mujoco/mujoco_viewer/CMakeFiles/mujoco_viewer.dir/src/platform_ui_adapter.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer/src/platform_ui_adapter.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer/src/platform_ui_adapter.cc",
|
||||
"output": "cmvr-es/simulate/mujoco/mujoco_viewer/CMakeFiles/mujoco_viewer.dir/src/platform_ui_adapter.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -Dmujoco_viewer_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer -g -std=gnu++17 -fPIC -o cmvr-es/simulate/mujoco/mujoco_viewer/CMakeFiles/mujoco_viewer.dir/src/simulate.cc.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer/src/simulate.cc",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/simulate/mujoco/mujoco_viewer/src/simulate.cc",
|
||||
"output": "cmvr-es/simulate/mujoco/mujoco_viewer/CMakeFiles/mujoco_viewer.dir/src/simulate.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dcommon_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/common/CMakeFiles/common.dir/curve/src/s_curve.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/common/curve/src/s_curve.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/common/curve/src/s_curve.cpp",
|
||||
"output": "cmvr-es/common/CMakeFiles/common.dir/curve/src/s_curve.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dcommon_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/common/CMakeFiles/common.dir/utils/config_helper/src/config_setting.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/common/utils/config_helper/src/config_setting.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/common/utils/config_helper/src/config_setting.cpp",
|
||||
"output": "cmvr-es/common/CMakeFiles/common.dir/utils/config_helper/src/config_setting.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dcommon_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/common/CMakeFiles/common.dir/utils/ffmpeg/src/CameraCapture.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/common/utils/ffmpeg/src/CameraCapture.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/common/utils/ffmpeg/src/CameraCapture.cpp",
|
||||
"output": "cmvr-es/common/CMakeFiles/common.dir/utils/ffmpeg/src/CameraCapture.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dcommon_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/common/CMakeFiles/common.dir/utils/ffmpeg/src/RealSenseCapture.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/common/utils/ffmpeg/src/RealSenseCapture.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/common/utils/ffmpeg/src/RealSenseCapture.cpp",
|
||||
"output": "cmvr-es/common/CMakeFiles/common.dir/utils/ffmpeg/src/RealSenseCapture.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dcommon_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/common/CMakeFiles/common.dir/utils/ffmpeg/src/VideoFrameEncoder.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/common/utils/ffmpeg/src/VideoFrameEncoder.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/common/utils/ffmpeg/src/VideoFrameEncoder.cpp",
|
||||
"output": "cmvr-es/common/CMakeFiles/common.dir/utils/ffmpeg/src/VideoFrameEncoder.cpp.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/lgv/cmvr/cmvr-es/cmake-build-debug",
|
||||
"command": "/usr/bin/g++-11 -DPROTOBUF_USE_DLLS -Dcommon_EXPORTS -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/coal/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/console_bridge/v1.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/eigenpy/v3.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/Eigen3/v3.4.0 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/example-robot-data/v4.3.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/fcl/v0.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x264/v165/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/x265/v215/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg-jetson/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/ffmpeg/v4.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gflags/v2.2.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/glog/v0.5.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/gtest/v1.17.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jrl-cmakemodules/v1.1.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/jsoncpp/v1.9.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/libccd/v2.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/lodepng/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mujoco/v3.3.7/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp-eigen/v0.10.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/PCAN-Basic/v4.10.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/peak-linux-driver/v8.20.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pinocchio/v3.6.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/pybind11/v3.0.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/realsense/v2.56.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/tinyxml2/v11.0.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/toppra/v0.6.2/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom/v5.0.3/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/urdfdom_headers/v2.0.1/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/opencv/4.13.0/include/opencv4 -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/modbus/3.1.11/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/visp/3.7.0/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/mainif/0.0.5/include -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/matplotplusplus/1.2.0/include -I/home/lgv/cmvr/cmvr-es/cmake-build-debug/_protobuf -I/home/lgv/cmvr/cmvr-es/include -I/home/lgv/cmvr/cmvr-es/cmvr-es/devices -I/home/lgv/cmvr/cmvr-es/cmvr-es/utils -I/home/lgv/cmvr/cmvr-es/cmvr-es -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party -I/home/lgv/cmvr/cmvr-es/dependency/x86/third_party/osqp/v0.6.3/include/osqp -I/home/lgv/cmvr/cmvr-es/cmvr-es/common -I/home/lgv/cmvr/cmvr-es/protos -isystem /home/lgv/cmvr/cmvr-es/dependency/x86/third_party/grpc/v1.76.0/include -g -std=gnu++17 -fPIC -o cmvr-es/common/CMakeFiles/common.dir/utils/ffmpeg/src/VideoWriter.cpp.o -c /home/lgv/cmvr/cmvr-es/cmvr-es/common/utils/ffmpeg/src/VideoWriter.cpp",
|
||||
"file": "/home/lgv/cmvr/cmvr-es/cmvr-es/common/utils/ffmpeg/src/VideoWriter.cpp",
|
||||
"output": "cmvr-es/common/CMakeFiles/common.dir/utils/ffmpeg/src/VideoWriter.cpp.o"
|
||||
}
|
||||
]
|
||||
BIN
data/plot.png
|
Before Width: | Height: | Size: 50 KiB |
BIN
data/plot1.png
|
Before Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 82 KiB |
@ -1,544 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<svg
|
||||
width="1920" height="1080"
|
||||
viewBox="0 0 1920 1080"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
>
|
||||
|
||||
<title>Gnuplot</title>
|
||||
<desc>Produced by GNUPLOT 5.4 patchlevel 2 </desc>
|
||||
|
||||
<g id="gnuplot_canvas">
|
||||
|
||||
<rect x="0" y="0" width="1920" height="1080" fill="none"/>
|
||||
<defs>
|
||||
|
||||
<circle id='gpDot' r='0.5' stroke-width='0.5' stroke='currentColor'/>
|
||||
<path id='gpPt0' stroke-width='0.148' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
|
||||
<path id='gpPt1' stroke-width='0.148' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
|
||||
<path id='gpPt2' stroke-width='0.148' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
|
||||
<rect id='gpPt3' stroke-width='0.148' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
|
||||
<rect id='gpPt4' stroke-width='0.148' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
|
||||
<circle id='gpPt5' stroke-width='0.148' stroke='currentColor' cx='0' cy='0' r='1'/>
|
||||
<use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
|
||||
<path id='gpPt7' stroke-width='0.148' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
|
||||
<use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
|
||||
<use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
|
||||
<use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
|
||||
<use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
|
||||
<use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
|
||||
<path id='gpPt13' stroke-width='0.148' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/>
|
||||
<use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/>
|
||||
<filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
|
||||
<feFlood flood-color='white' flood-opacity='1' result='bgnd'/>
|
||||
<feComposite in='SourceGraphic' in2='bgnd' operator='atop'/>
|
||||
</filter>
|
||||
<filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
|
||||
<feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/>
|
||||
<feComposite in='SourceGraphic' in2='grey' operator='atop'/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g fill="none" color="white" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,961.21 L1737.59,961.21 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,961.21 L259.71,961.21 '/> <g transform="translate(236.99,966.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >-6</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,814.51 L1737.59,814.51 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,814.51 L259.71,814.51 '/> <g transform="translate(236.99,819.71)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >-4</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,667.81 L1737.59,667.81 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,667.81 L259.71,667.81 '/> <g transform="translate(236.99,673.01)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >-2</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,521.11 L1737.59,521.11 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,521.11 L259.71,521.11 '/> <g transform="translate(236.99,526.31)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >0</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,374.41 L1737.59,374.41 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,374.41 L259.71,374.41 '/> <g transform="translate(236.99,379.61)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >2</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,227.71 L1737.59,227.71 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,227.71 L259.71,227.71 '/> <g transform="translate(236.99,232.91)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >4</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,81.01 L1737.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L259.71,81.01 '/> <g transform="translate(236.99,86.21)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >6</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,961.21 L249.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,961.21 L249.59,951.09 '/> <g transform="translate(249.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >0</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M497.59,961.21 L497.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M497.59,961.21 L497.59,951.09 '/> <g transform="translate(497.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >0.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M745.59,961.21 L745.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M745.59,961.21 L745.59,951.09 '/> <g transform="translate(745.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >1</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M993.59,961.21 L993.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M993.59,961.21 L993.59,951.09 '/> <g transform="translate(993.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >1.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1241.59,961.21 L1241.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1241.59,961.21 L1241.59,951.09 '/> <g transform="translate(1241.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >2</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1489.59,961.21 L1489.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1489.59,961.21 L1489.59,951.09 '/> <g transform="translate(1489.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >2.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1737.59,961.21 L1737.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1737.59,961.21 L1737.59,951.09 '/> <g transform="translate(1737.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >3</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L249.59,961.21 L1737.59,961.21 L1737.59,81.01 L249.59,81.01 Z '/></g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(192.41,521.11) rotate(270)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >acceleration [m/s</tspan><tspan font-family="Helvetica" font-size="8.8" dy="-5.50px">2</tspan><tspan font-family="Helvetica" font-size="11.0" dy="5.50px">]</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(993.59,1032.29)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >time [s]</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1534.62,145.12 L1534.62,94.51 L1724.99,94.51 L1724.99,145.12 L1534.62,145.12 Z '/></g>
|
||||
<g id="gnuplot_plot_1a" ><title>gnuplot_plot_1a</title>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 0, 0)" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(216, 51, 45)' d='M249.59,521.11 L252.07,517.44 L254.55,513.77 L257.03,510.11 L259.51,506.44 L261.99,502.77 L264.47,499.10 L266.95,495.44
|
||||
L269.43,491.77 L271.91,488.10 L274.39,484.43 L276.87,480.77 L279.35,477.10 L281.83,473.43 L284.31,469.76 L286.79,466.10
|
||||
L289.27,462.43 L291.75,458.76 L294.23,455.09 L296.71,451.43 L299.19,447.76 L301.67,444.09 L304.15,440.42 L306.63,436.76
|
||||
L309.11,433.09 L311.59,429.42 L314.07,425.75 L316.55,422.09 L319.03,418.42 L321.51,414.75 L323.99,411.08 L326.47,407.42
|
||||
L328.95,403.75 L331.43,400.08 L333.91,396.41 L336.39,392.75 L338.87,389.08 L341.35,385.41 L343.83,381.74 L346.31,378.08
|
||||
L348.79,374.41 L351.27,370.74 L353.75,367.07 L356.23,363.41 L358.71,359.74 L361.19,356.07 L363.67,352.40 L366.15,348.74
|
||||
L368.63,345.07 L371.11,341.40 L373.59,337.73 L376.07,334.07 L378.55,330.40 L381.03,326.73 L383.51,323.06 L385.99,319.40
|
||||
L388.47,315.73 L390.95,312.06 L393.43,308.39 L395.91,304.73 L398.39,301.06 L400.87,297.39 L403.35,293.72 L405.83,290.06
|
||||
L408.31,286.39 L410.79,282.72 L413.27,279.05 L415.75,275.39 L418.23,271.72 L420.71,268.05 L423.19,264.38 L425.67,260.72
|
||||
L428.15,257.05 L430.63,253.38 L433.11,249.71 L435.59,246.05 L438.07,242.38 L440.55,238.71 L443.03,235.04 L445.51,231.38
|
||||
L447.99,227.71 L450.47,224.04 L452.95,220.37 L455.43,216.71 L457.91,213.04 L460.39,209.37 L462.87,205.70 L465.35,202.04
|
||||
L467.83,198.37 L470.31,194.70 L472.79,191.03 L475.27,187.37 L477.75,183.70 L480.23,180.03 L482.71,176.36 L485.19,172.70
|
||||
L487.67,169.03 L490.15,165.36 L492.63,161.69 L495.11,158.03 L497.59,154.36 L500.07,154.36 L502.55,154.36 L505.03,154.36
|
||||
L507.51,154.36 L509.99,154.36 L512.47,154.36 L514.95,154.36 L517.43,154.36 L519.91,154.36 L522.39,154.36 L524.87,154.36
|
||||
L527.35,154.36 L529.83,154.36 L532.31,154.36 L534.79,154.36 L537.27,154.36 L539.75,154.36 L542.23,154.36 L544.71,154.36
|
||||
L547.19,154.36 L549.67,158.03 L552.15,161.69 L554.63,165.36 L557.11,169.03 L559.59,172.70 L562.07,176.36 L564.55,180.03
|
||||
L567.03,183.70 L569.51,187.37 L571.99,191.03 L574.47,194.70 L576.95,198.37 L579.43,202.04 L581.91,205.70 L584.39,209.37
|
||||
L586.87,213.04 L589.35,216.71 L591.83,220.37 L594.31,224.04 L596.79,227.71 L599.27,231.38 L601.75,235.04 L604.23,238.71
|
||||
L606.71,242.38 L609.19,246.05 L611.67,249.71 L614.15,253.38 L616.63,257.05 L619.11,260.72 L621.59,264.38 L624.07,268.05
|
||||
L626.55,271.72 L629.03,275.39 L631.51,279.05 L633.99,282.72 L636.47,286.39 L638.95,290.06 L641.43,293.72 L643.91,297.39
|
||||
L646.39,301.06 L648.87,304.73 L651.35,308.39 L653.83,312.06 L656.31,315.73 L658.79,319.40 L661.27,323.06 L663.75,326.73
|
||||
L666.23,330.40 L668.71,334.07 L671.19,337.73 L673.67,341.40 L676.15,345.07 L678.63,348.74 L681.11,352.40 L683.59,356.07
|
||||
L686.07,359.74 L688.55,363.41 L691.03,367.07 L693.51,370.74 L695.99,374.41 L698.47,378.08 L700.95,381.74 L703.43,385.41
|
||||
L705.91,389.08 L708.39,392.75 L710.87,396.41 L713.35,400.08 L715.83,403.75 L718.31,407.42 L720.79,411.08 L723.27,414.75
|
||||
L725.75,418.42 L728.23,422.09 L730.71,425.75 L733.19,429.42 L735.67,433.09 L738.15,436.76 L740.63,440.42 L743.11,444.09
|
||||
L745.59,447.76 L748.07,451.43 L750.55,455.09 L753.03,458.76 L755.51,462.43 L757.99,466.10 L760.47,469.76 L762.95,473.43
|
||||
L765.43,477.10 L767.91,480.77 L770.39,484.43 L772.87,488.10 L775.35,491.77 L777.83,495.44 L780.31,499.10 L782.79,502.77
|
||||
L785.27,506.44 L787.75,510.11 L790.23,513.77 L792.71,517.44 L795.19,521.11 L797.67,521.11 L800.15,521.11 L802.63,521.11
|
||||
L805.11,521.11 L807.59,521.11 L810.07,521.11 L812.55,521.11 L815.03,521.11 L817.51,521.11 L819.99,521.11 L822.47,521.11
|
||||
L824.95,521.11 L827.43,521.11 L829.91,521.11 L832.39,521.11 L834.87,521.11 L837.35,521.11 L839.83,521.11 L842.31,521.11
|
||||
L844.79,521.11 L847.27,521.11 L849.75,521.11 L852.23,521.11 L854.71,521.11 L857.19,521.11 L859.67,521.11 L862.15,521.11
|
||||
L864.63,521.11 L867.11,521.11 L869.59,521.11 L872.07,521.11 L874.55,521.11 L877.03,521.11 L879.51,521.11 L881.99,521.11
|
||||
L884.47,521.11 L886.95,521.11 L889.43,521.11 L891.91,521.11 L894.39,521.11 L896.87,521.11 L899.35,521.11 L901.83,521.11
|
||||
L904.31,521.11 L906.79,521.11 L909.27,521.11 L911.75,521.11 L914.23,521.11 L916.71,521.11 L919.19,521.11 L921.67,521.11
|
||||
L924.15,521.11 L926.63,521.11 L929.11,521.11 L931.59,521.11 L934.07,521.11 L936.55,521.11 L939.03,521.11 L941.51,521.11
|
||||
L943.99,521.11 L946.47,521.11 L948.95,521.11 L951.43,521.11 L953.91,521.11 L956.39,521.11 L958.87,521.11 L961.35,521.11
|
||||
L963.83,521.11 L966.31,521.11 L968.79,521.11 L971.27,521.11 L973.75,521.11 L976.23,521.11 L978.71,521.11 L981.19,521.11
|
||||
L983.67,521.11 L986.15,521.11 L988.63,521.11 L991.11,521.11 L993.59,521.11 L996.07,521.11 L998.55,521.11 L1001.03,521.11
|
||||
L1003.51,521.11 L1005.99,521.11 L1008.47,521.11 L1010.95,521.11 L1013.43,521.11 L1015.91,521.11 L1018.39,521.11 L1020.87,521.11
|
||||
L1023.35,521.11 L1025.83,521.11 L1028.31,521.11 L1030.79,521.11 L1033.27,521.11 L1035.75,521.11 L1038.23,521.11 L1040.71,521.11
|
||||
L1043.19,521.11 L1045.67,521.11 L1048.15,521.11 L1050.63,521.11 L1053.11,521.11 L1055.59,521.11 L1058.07,521.11 L1060.55,521.11
|
||||
L1063.03,521.11 L1065.51,521.11 L1067.99,521.11 L1070.47,521.11 L1072.95,521.11 L1075.43,521.11 L1077.91,523.55 L1080.39,527.22
|
||||
L1082.87,530.89 L1085.35,534.56 L1087.83,538.22 L1090.31,541.89 L1092.79,545.56 L1095.27,549.23 L1097.75,552.89 L1100.23,556.56
|
||||
L1102.71,560.23 L1105.19,563.90 L1107.67,567.56 L1110.15,571.23 L1112.63,574.90 L1115.11,578.57 L1117.59,582.23 L1120.07,585.90
|
||||
L1122.55,589.57 L1125.03,593.24 L1127.51,596.90 L1129.99,600.57 L1132.47,604.24 L1134.95,607.91 L1137.43,611.57 L1139.91,615.24
|
||||
L1142.39,618.91 L1144.87,622.58 L1147.35,626.24 L1149.83,629.91 L1152.31,633.58 L1154.79,637.25 L1157.27,640.91 L1159.75,644.58
|
||||
L1162.23,648.25 L1164.71,651.92 L1167.19,655.58 L1169.67,659.25 L1172.15,662.92 L1174.63,666.59 L1177.11,670.25 L1179.59,673.92
|
||||
L1182.07,677.59 L1184.55,681.26 L1187.03,684.92 L1189.51,688.59 L1191.99,692.26 L1194.47,695.93 L1196.95,699.59 L1199.43,703.26
|
||||
L1201.91,706.93 L1204.39,710.60 L1206.87,714.26 L1209.35,717.93 L1211.83,721.60 L1214.31,725.27 L1216.79,728.93 L1219.27,732.60
|
||||
L1221.75,736.27 L1224.23,739.94 L1226.71,743.60 L1229.19,747.27 L1231.67,750.94 L1234.15,754.61 L1236.63,758.27 L1239.11,761.94
|
||||
L1241.59,765.61 L1244.07,769.28 L1246.55,772.94 L1249.03,776.61 L1251.51,780.28 L1253.99,783.95 L1256.47,787.61 L1258.95,791.28
|
||||
L1261.43,794.95 L1263.91,798.62 L1266.39,802.28 L1268.87,805.95 L1271.35,809.62 L1273.83,813.29 L1276.31,816.95 L1278.79,820.62
|
||||
L1281.27,824.29 L1283.75,827.96 L1286.23,831.62 L1288.71,835.29 L1291.19,838.96 L1293.67,842.63 L1296.15,846.29 L1298.63,849.96
|
||||
L1301.11,853.63 L1303.59,857.30 L1306.07,860.96 L1308.55,864.63 L1311.03,868.30 L1313.51,871.97 L1315.99,875.63 L1318.47,879.30
|
||||
L1320.95,882.97 L1323.43,886.64 L1325.91,887.86 L1328.39,887.86 L1330.87,887.86 L1333.35,887.86 L1335.83,887.86 L1338.31,887.86
|
||||
L1340.79,887.86 L1343.27,887.86 L1345.75,887.86 L1348.23,887.86 L1350.71,887.86 L1353.19,887.86 L1355.67,887.86 L1358.15,887.86
|
||||
L1360.63,887.86 L1363.11,887.86 L1365.59,887.86 L1368.07,887.86 L1370.55,887.86 L1373.03,887.86 L1375.51,885.42 L1377.99,881.75
|
||||
L1380.47,878.08 L1382.95,874.41 L1385.43,870.75 L1387.91,867.08 L1390.39,863.41 L1392.87,859.74 L1395.35,856.08 L1397.83,852.41
|
||||
L1400.31,848.74 L1402.79,845.07 L1405.27,841.41 L1407.75,837.74 L1410.23,834.07 L1412.71,830.40 L1415.19,826.74 L1417.67,823.07
|
||||
L1420.15,819.40 L1422.63,815.73 L1425.11,812.07 L1427.59,808.40 L1430.07,804.73 L1432.55,801.06 L1435.03,797.40 L1437.51,793.73
|
||||
L1439.99,790.06 L1442.47,786.39 L1444.95,782.73 L1447.43,779.06 L1449.91,775.39 L1452.39,771.72 L1454.87,768.06 L1457.35,764.39
|
||||
L1459.83,760.72 L1462.31,757.05 L1464.79,753.39 L1467.27,749.72 L1469.75,746.05 L1472.23,742.38 L1474.71,738.72 L1477.19,735.05
|
||||
L1479.67,731.38 L1482.15,727.71 L1484.63,724.05 L1487.11,720.38 L1489.59,716.71 L1492.07,713.04 L1494.55,709.38 L1497.03,705.71
|
||||
L1499.51,702.04 L1501.99,698.37 L1504.47,694.71 L1506.95,691.04 L1509.43,687.37 L1511.91,683.70 L1514.39,680.04 L1516.87,676.37
|
||||
L1519.35,672.70 L1521.83,669.03 L1524.31,665.37 L1526.79,661.70 L1529.27,658.03 L1531.75,654.36 L1534.23,650.70 L1536.71,647.03
|
||||
L1539.19,643.36 L1541.67,639.69 L1544.15,636.03 L1546.63,632.36 L1549.11,628.69 L1551.59,625.02 L1554.07,621.36 L1556.55,617.69
|
||||
L1559.03,614.02 L1561.51,610.35 L1563.99,606.69 L1566.47,603.02 L1568.95,599.35 L1571.43,595.68 L1573.91,592.02 L1576.39,588.35
|
||||
L1578.87,584.68 L1581.35,581.01 L1583.83,577.35 L1586.31,573.68 L1588.79,570.01 L1591.27,566.34 L1593.75,562.68 L1596.23,559.01
|
||||
L1598.71,555.34 L1601.19,551.67 L1603.67,548.01 L1606.15,544.34 L1608.63,540.67 L1611.11,537.00 L1613.59,533.34 L1616.07,529.67
|
||||
L1618.55,526.00 L1621.03,522.33 L1621.86,521.11 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_2a" ><title>gnuplot_plot_2a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 114, 178)' d='M249.59,521.11 L252.07,517.44 L254.55,513.77 L257.03,510.11 L259.51,506.44 L261.99,502.77 L264.47,499.10 L266.95,495.44
|
||||
L269.43,491.77 L271.91,488.10 L274.39,484.43 L276.87,480.77 L279.35,477.10 L281.83,473.43 L284.31,469.76 L286.79,466.10
|
||||
L289.27,462.43 L291.75,458.76 L294.23,455.09 L296.71,451.43 L299.19,447.76 L301.67,444.09 L304.15,440.42 L306.63,436.76
|
||||
L309.11,433.09 L311.59,429.42 L314.07,425.75 L316.55,422.09 L319.03,418.42 L321.51,414.75 L323.99,411.08 L326.47,407.42
|
||||
L328.95,403.75 L331.43,400.08 L333.91,396.41 L336.39,392.75 L338.87,389.08 L341.35,385.41 L343.83,381.74 L346.31,378.08
|
||||
L348.79,374.41 L351.27,370.74 L353.75,367.07 L356.23,363.41 L358.71,359.74 L361.19,356.07 L363.67,352.40 L366.15,348.74
|
||||
L368.63,345.07 L371.11,341.40 L373.59,337.73 L376.07,334.07 L378.55,330.40 L381.03,326.73 L383.51,323.06 L385.99,319.40
|
||||
L388.47,315.73 L390.95,312.06 L393.43,308.39 L395.91,304.73 L398.39,301.06 L400.87,297.39 L403.35,293.72 L405.83,290.06
|
||||
L408.31,286.39 L410.79,282.72 L413.27,279.05 L415.75,275.39 L418.23,271.72 L420.71,268.05 L423.19,264.38 L425.67,260.72
|
||||
L428.15,257.05 L430.63,253.38 L433.11,249.71 L435.59,246.05 L438.07,242.38 L440.55,238.71 L443.03,235.04 L445.51,231.38
|
||||
L447.99,227.71 L450.47,224.04 L452.95,220.37 L455.43,216.71 L457.91,213.04 L460.39,209.37 L462.87,205.70 L465.35,202.04
|
||||
L467.83,198.37 L470.31,194.70 L472.79,191.03 L475.27,187.37 L477.75,183.70 L480.23,180.03 L482.71,176.36 L485.19,172.70
|
||||
L487.67,169.03 L490.15,165.36 L492.63,161.69 L495.11,158.03 L497.59,154.36 L500.07,154.36 L502.55,154.36 L505.03,154.36
|
||||
L507.51,154.36 L509.99,154.36 L512.47,154.36 L514.95,154.36 L517.43,154.36 L519.91,154.36 L522.39,154.36 L524.87,154.36
|
||||
L527.35,154.36 L529.83,154.36 L532.31,154.36 L534.79,154.36 L537.27,154.36 L539.75,154.36 L542.23,154.36 L544.71,154.36
|
||||
L547.19,154.36 L549.67,158.03 L552.15,161.69 L554.63,165.36 L557.11,169.03 L559.59,172.70 L562.07,176.36 L564.55,180.03
|
||||
L567.03,183.70 L569.51,187.37 L571.99,191.03 L574.47,194.70 L576.95,198.37 L579.43,202.04 L581.91,205.70 L584.39,209.37
|
||||
L586.87,213.04 L589.35,216.71 L591.83,220.37 L594.31,224.04 L596.79,227.71 L599.27,231.38 L601.75,235.04 L604.23,238.71
|
||||
L606.71,242.38 L609.19,246.05 L611.67,249.71 L614.15,253.38 L616.63,257.05 L619.11,260.72 L621.59,264.38 L624.07,268.05
|
||||
L626.55,271.72 L629.03,275.39 L631.51,279.05 L633.99,282.72 L636.47,286.39 L638.95,290.06 L641.43,293.72 L643.91,297.39
|
||||
L646.39,301.06 L648.87,304.73 L651.35,308.39 L653.83,312.06 L656.31,315.73 L658.79,319.40 L661.27,323.06 L663.75,326.73
|
||||
L666.23,330.40 L668.71,334.07 L671.19,337.73 L673.67,341.40 L676.15,345.07 L678.63,348.74 L681.11,352.40 L683.59,356.07
|
||||
L686.07,359.74 L688.55,363.41 L691.03,367.07 L693.51,370.74 L695.99,374.41 L698.47,378.08 L700.95,381.74 L703.43,385.41
|
||||
L705.91,389.08 L708.39,392.75 L710.87,396.41 L713.35,400.08 L715.83,403.75 L718.31,407.42 L720.79,411.08 L723.27,414.75
|
||||
L725.75,418.42 L728.23,422.09 L730.71,425.75 L733.19,429.42 L735.67,433.09 L738.15,436.76 L740.63,440.42 L743.11,444.09
|
||||
L745.59,447.76 L748.07,451.43 L750.55,455.09 L753.03,458.76 L755.51,462.43 L757.99,466.10 L760.47,469.76 L762.95,473.43
|
||||
L765.43,477.10 L767.91,480.77 L770.39,484.43 L772.87,488.10 L775.35,491.77 L777.83,495.44 L780.31,499.10 L782.79,502.77
|
||||
L785.27,506.44 L787.75,510.11 L790.23,513.77 L792.71,517.44 L795.19,521.11 L797.67,521.11 L800.15,521.11 L802.63,521.11
|
||||
L805.11,521.11 L807.59,521.11 L810.07,521.11 L812.55,521.11 L815.03,521.11 L817.51,521.11 L819.99,521.11 L822.47,521.11
|
||||
L824.95,521.11 L827.43,521.11 L829.91,521.11 L832.39,521.11 L834.87,521.11 L837.35,521.11 L839.83,521.11 L842.31,521.11
|
||||
L844.79,521.11 L847.27,521.11 L849.75,521.11 L852.23,521.11 L854.71,521.11 L857.19,521.11 L859.67,521.11 L862.15,521.11
|
||||
L864.63,521.11 L867.11,521.11 L869.59,521.11 L872.07,521.11 L874.55,521.11 L877.03,521.11 L879.51,521.11 L881.99,521.11
|
||||
L884.47,521.11 L886.95,521.11 L889.43,521.11 L891.91,521.11 L894.39,521.11 L896.87,521.11 L899.35,521.11 L901.83,521.11
|
||||
L904.31,521.11 L906.79,521.11 L909.27,521.11 L911.75,521.11 L914.23,521.11 L916.71,521.11 L919.19,521.11 L921.67,521.11
|
||||
L924.15,521.11 L926.63,521.11 L929.11,521.11 L931.59,521.11 L934.07,521.11 L936.55,521.11 L939.03,521.11 L941.51,521.11
|
||||
L943.99,521.11 L946.47,521.11 L948.95,521.11 L951.43,521.11 L953.91,521.11 L956.39,521.11 L958.87,521.11 L961.35,521.11
|
||||
L963.83,521.11 L966.31,521.11 L968.79,521.11 L971.27,521.11 L973.75,521.11 L976.23,521.11 L978.71,521.11 L981.19,521.11
|
||||
L983.67,521.11 L986.15,521.11 L988.63,521.11 L991.11,521.11 L993.59,521.11 L996.07,521.11 L998.55,521.11 L1001.03,521.11
|
||||
L1003.51,521.11 L1005.99,521.11 L1008.47,521.11 L1010.95,521.11 L1013.43,521.11 L1015.91,521.11 L1018.39,521.11 L1020.87,521.11
|
||||
L1023.35,521.11 L1025.83,521.11 L1028.31,521.11 L1030.79,521.11 L1033.27,521.11 L1035.75,521.11 L1038.23,521.11 L1040.71,521.11
|
||||
L1043.19,521.11 L1045.67,521.11 L1048.15,521.11 L1050.63,521.11 L1053.11,521.11 L1055.59,521.11 L1058.07,521.11 L1060.55,521.11
|
||||
L1063.03,521.11 L1065.51,521.11 L1067.99,521.11 L1070.47,523.80 L1072.95,527.47 L1075.43,531.13 L1077.91,534.80 L1080.39,538.47
|
||||
L1082.87,542.14 L1085.35,545.80 L1087.83,549.47 L1090.31,553.14 L1092.79,556.81 L1095.27,560.47 L1097.75,564.14 L1100.23,567.81
|
||||
L1102.71,571.48 L1105.19,575.14 L1107.67,578.81 L1110.15,582.48 L1112.63,586.15 L1115.11,589.81 L1117.59,593.48 L1120.07,597.15
|
||||
L1122.55,600.82 L1125.03,604.48 L1127.51,608.15 L1129.99,611.82 L1132.47,615.49 L1134.95,619.15 L1137.43,622.82 L1139.91,626.49
|
||||
L1142.39,630.16 L1144.87,633.82 L1147.35,637.49 L1149.83,641.16 L1152.31,644.83 L1154.79,648.49 L1157.27,652.16 L1159.75,655.83
|
||||
L1162.23,659.50 L1164.71,663.16 L1167.19,666.83 L1169.67,670.50 L1172.15,674.17 L1174.63,677.83 L1177.11,681.50 L1179.59,685.17
|
||||
L1182.07,688.84 L1184.55,692.50 L1187.03,696.17 L1189.51,699.84 L1191.99,703.51 L1194.47,707.17 L1196.95,710.84 L1199.43,714.51
|
||||
L1201.91,718.18 L1204.39,721.84 L1206.87,725.51 L1209.35,729.18 L1211.83,732.85 L1214.31,736.51 L1216.79,740.18 L1219.27,743.85
|
||||
L1221.75,747.52 L1224.23,751.18 L1226.71,754.85 L1229.19,758.52 L1231.67,762.19 L1234.15,765.85 L1236.63,769.52 L1239.11,773.19
|
||||
L1241.59,776.86 L1244.07,780.52 L1246.55,784.19 L1249.03,787.86 L1251.51,791.53 L1253.99,795.19 L1256.47,798.86 L1258.95,802.53
|
||||
L1261.43,806.20 L1263.91,809.86 L1266.39,813.53 L1268.87,817.20 L1271.35,820.87 L1273.83,824.53 L1276.31,828.20 L1278.79,831.87
|
||||
L1281.27,835.54 L1283.75,839.20 L1286.23,842.87 L1288.71,846.54 L1291.19,850.21 L1293.67,853.87 L1296.15,857.54 L1298.63,861.21
|
||||
L1301.11,864.88 L1303.59,868.54 L1306.07,872.21 L1308.55,875.88 L1311.03,879.55 L1313.51,883.21 L1315.99,886.88 L1318.47,887.86
|
||||
L1320.95,887.86 L1323.43,887.86 L1325.91,887.86 L1328.39,887.86 L1330.87,887.86 L1333.35,887.86 L1335.83,887.86 L1338.31,887.86
|
||||
L1340.79,887.86 L1343.27,887.86 L1345.75,887.86 L1348.23,885.17 L1350.71,881.50 L1353.19,877.84 L1355.67,874.17 L1358.15,870.50
|
||||
L1360.63,866.83 L1363.11,863.17 L1365.59,859.50 L1368.07,855.83 L1370.55,852.16 L1373.03,848.50 L1375.51,844.83 L1377.99,841.16
|
||||
L1380.47,837.49 L1382.95,833.83 L1385.43,830.16 L1387.91,826.49 L1390.39,822.82 L1392.87,819.16 L1395.35,815.49 L1397.83,811.82
|
||||
L1400.31,808.15 L1402.79,804.49 L1405.27,800.82 L1407.75,797.15 L1410.23,793.48 L1412.71,789.82 L1415.19,786.15 L1417.67,782.48
|
||||
L1420.15,778.81 L1422.63,775.15 L1425.11,771.48 L1427.59,767.81 L1430.07,764.14 L1432.55,760.48 L1435.03,756.81 L1437.51,753.14
|
||||
L1439.99,749.47 L1442.47,745.81 L1444.95,742.14 L1447.43,738.47 L1449.91,734.80 L1452.39,731.14 L1454.87,727.47 L1457.35,723.80
|
||||
L1459.83,720.13 L1462.31,716.47 L1464.79,712.80 L1467.27,709.13 L1469.75,705.46 L1472.23,701.80 L1474.71,698.13 L1477.19,694.46
|
||||
L1479.67,690.79 L1482.15,687.13 L1484.63,683.46 L1487.11,679.79 L1489.59,676.12 L1492.07,672.46 L1494.55,668.79 L1497.03,665.12
|
||||
L1499.51,661.45 L1501.99,657.79 L1504.47,654.12 L1506.95,650.45 L1509.43,646.78 L1511.91,643.12 L1514.39,639.45 L1516.87,635.78
|
||||
L1519.35,632.11 L1521.83,628.45 L1524.31,624.78 L1526.79,621.11 L1529.27,617.44 L1531.75,613.78 L1534.23,610.11 L1536.71,606.44
|
||||
L1539.19,602.77 L1541.67,599.11 L1544.15,595.44 L1546.63,591.77 L1549.11,588.10 L1551.59,584.44 L1554.07,580.77 L1556.55,577.10
|
||||
L1559.03,573.43 L1561.51,569.77 L1563.99,566.10 L1566.47,562.43 L1568.95,558.76 L1571.43,555.10 L1573.91,551.43 L1576.39,547.76
|
||||
L1578.87,544.09 L1581.35,540.43 L1583.83,536.76 L1586.31,533.09 L1588.79,529.42 L1591.27,525.76 L1593.75,522.09 L1594.41,521.11
|
||||
'/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_3a" ><title>gnuplot_plot_3a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 158, 96)' d='M249.59,521.11 L252.07,517.44 L254.55,513.77 L257.03,510.11 L259.51,506.44 L261.99,502.77 L264.47,499.10 L266.95,495.44
|
||||
L269.43,491.77 L271.91,488.10 L274.39,484.43 L276.87,480.77 L279.35,477.10 L281.83,473.43 L284.31,469.76 L286.79,466.10
|
||||
L289.27,462.43 L291.75,458.76 L294.23,455.09 L296.71,451.43 L299.19,447.76 L301.67,444.09 L304.15,440.42 L306.63,436.76
|
||||
L309.11,433.09 L311.59,429.42 L314.07,425.75 L316.55,422.09 L319.03,418.42 L321.51,414.75 L323.99,411.08 L326.47,407.42
|
||||
L328.95,403.75 L331.43,400.08 L333.91,396.41 L336.39,392.75 L338.87,389.08 L341.35,385.41 L343.83,381.74 L346.31,378.08
|
||||
L348.79,374.41 L351.27,370.74 L353.75,367.07 L356.23,363.41 L358.71,359.74 L361.19,356.07 L363.67,352.40 L366.15,348.74
|
||||
L368.63,345.07 L371.11,341.40 L373.59,337.73 L376.07,334.07 L378.55,330.40 L381.03,326.73 L383.51,323.06 L385.99,319.40
|
||||
L388.47,315.73 L390.95,312.06 L393.43,308.39 L395.91,304.73 L398.39,301.06 L400.87,297.39 L403.35,293.72 L405.83,290.06
|
||||
L408.31,286.39 L410.79,282.72 L413.27,279.05 L415.75,275.39 L418.23,271.72 L420.71,268.05 L423.19,264.38 L425.67,260.72
|
||||
L428.15,257.05 L430.63,253.38 L433.11,249.71 L435.59,246.05 L438.07,242.38 L440.55,238.71 L443.03,235.04 L445.51,231.38
|
||||
L447.99,227.71 L450.47,224.04 L452.95,220.37 L455.43,216.71 L457.91,213.04 L460.39,209.37 L462.87,205.70 L465.35,202.04
|
||||
L467.83,198.37 L470.31,194.70 L472.79,191.03 L475.27,187.37 L477.75,183.70 L480.23,180.03 L482.71,176.36 L485.19,172.70
|
||||
L487.67,169.03 L490.15,165.36 L492.63,161.69 L495.11,158.03 L497.59,154.36 L500.07,154.36 L502.55,154.36 L505.03,154.36
|
||||
L507.51,154.36 L509.99,154.36 L512.47,154.36 L514.95,154.36 L517.43,154.36 L519.91,154.36 L522.39,154.36 L524.87,154.36
|
||||
L527.35,154.36 L529.83,158.03 L532.31,161.69 L534.79,165.36 L537.27,169.03 L539.75,172.70 L542.23,176.36 L544.71,180.03
|
||||
L547.19,183.70 L549.67,187.37 L552.15,191.03 L554.63,194.70 L557.11,198.37 L559.59,202.04 L562.07,205.70 L564.55,209.37
|
||||
L567.03,213.04 L569.51,216.71 L571.99,220.37 L574.47,224.04 L576.95,227.71 L579.43,231.38 L581.91,235.04 L584.39,238.71
|
||||
L586.87,242.38 L589.35,246.05 L591.83,249.71 L594.31,253.38 L596.79,257.05 L599.27,260.72 L601.75,264.38 L604.23,268.05
|
||||
L606.71,271.72 L609.19,275.39 L611.67,279.05 L614.15,282.72 L616.63,286.39 L619.11,290.06 L621.59,293.72 L624.07,297.39
|
||||
L626.55,301.06 L629.03,304.73 L631.51,308.39 L633.99,312.06 L636.47,315.73 L638.95,319.40 L641.43,323.06 L643.91,326.73
|
||||
L646.39,330.40 L648.87,334.07 L651.35,337.73 L653.83,341.40 L656.31,345.07 L658.79,348.74 L661.27,352.40 L663.75,356.07
|
||||
L666.23,359.74 L668.71,363.41 L671.19,367.07 L673.67,370.74 L676.15,374.41 L678.63,378.08 L681.11,381.74 L683.59,385.41
|
||||
L686.07,389.08 L688.55,392.75 L691.03,396.41 L693.51,400.08 L695.99,403.75 L698.47,407.42 L700.95,411.08 L703.43,414.75
|
||||
L705.91,418.42 L708.39,422.09 L710.87,425.75 L713.35,429.42 L715.83,433.09 L718.31,436.76 L720.79,440.42 L723.27,444.09
|
||||
L725.75,447.76 L728.23,451.43 L730.71,455.09 L733.19,458.76 L735.67,462.43 L738.15,466.10 L740.63,469.76 L743.11,473.43
|
||||
L745.59,477.10 L748.07,480.77 L750.55,484.43 L753.03,488.10 L755.51,491.77 L757.99,495.44 L760.47,499.10 L762.95,502.77
|
||||
L765.43,506.44 L767.91,510.11 L770.39,513.77 L772.87,517.44 L775.35,521.11 L777.83,521.11 L780.31,521.11 L782.79,521.11
|
||||
L785.27,521.11 L787.75,521.11 L790.23,521.11 L792.71,521.11 L795.19,521.11 L797.67,521.11 L800.15,521.11 L802.63,521.11
|
||||
L805.11,521.11 L807.59,521.11 L810.07,521.11 L812.55,521.11 L815.03,521.11 L817.51,521.11 L819.99,521.11 L822.47,521.11
|
||||
L824.95,521.11 L827.43,521.11 L829.91,521.11 L832.39,521.11 L834.87,521.11 L837.35,521.11 L839.83,521.11 L842.31,521.11
|
||||
L844.79,521.11 L847.27,521.11 L849.75,521.11 L852.23,521.11 L854.71,521.11 L857.19,521.11 L859.67,521.11 L862.15,521.11
|
||||
L864.63,521.11 L867.11,521.11 L869.59,521.11 L872.07,521.11 L874.55,521.11 L877.03,521.11 L879.51,521.11 L881.99,521.11
|
||||
L884.47,521.11 L886.95,521.11 L889.43,521.11 L891.91,521.11 L894.39,521.11 L896.87,521.11 L899.35,521.11 L901.83,521.11
|
||||
L904.31,521.11 L906.79,521.11 L909.27,521.11 L911.75,521.11 L914.23,521.11 L916.71,521.11 L919.19,521.11 L921.67,521.11
|
||||
L924.15,521.11 L926.63,521.11 L929.11,521.11 L931.59,521.11 L934.07,521.11 L936.55,521.11 L939.03,521.11 L941.51,521.11
|
||||
L943.99,521.11 L946.47,521.11 L948.95,521.11 L951.43,521.11 L953.91,521.11 L956.39,521.11 L958.87,521.11 L961.35,521.11
|
||||
L963.83,521.11 L966.31,521.11 L968.79,521.11 L971.27,521.11 L973.75,521.11 L976.23,521.11 L978.71,521.11 L981.19,521.11
|
||||
L983.67,521.11 L986.15,521.11 L988.63,521.11 L991.11,521.11 L993.59,521.11 L996.07,521.11 L998.55,521.11 L1001.03,521.11
|
||||
L1003.51,521.11 L1005.99,521.11 L1008.47,521.11 L1010.95,521.11 L1013.43,521.11 L1015.91,521.11 L1018.39,521.11 L1020.87,521.11
|
||||
L1023.35,521.11 L1025.83,521.11 L1028.31,521.11 L1030.79,521.11 L1033.27,521.11 L1035.75,521.11 L1038.23,521.11 L1040.71,521.11
|
||||
L1043.19,521.11 L1045.67,521.11 L1048.15,521.11 L1050.63,523.80 L1053.11,527.47 L1055.59,531.13 L1058.07,534.80 L1060.55,538.47
|
||||
L1063.03,542.14 L1065.51,545.80 L1067.99,549.47 L1070.47,553.14 L1072.95,556.81 L1075.43,560.47 L1077.91,564.14 L1080.39,567.81
|
||||
L1082.87,571.48 L1085.35,575.14 L1087.83,578.81 L1090.31,582.48 L1092.79,586.15 L1095.27,589.81 L1097.75,593.48 L1100.23,597.15
|
||||
L1102.71,600.82 L1105.19,604.48 L1107.67,608.15 L1110.15,611.82 L1112.63,615.49 L1115.11,619.15 L1117.59,622.82 L1120.07,626.49
|
||||
L1122.55,630.16 L1125.03,633.82 L1127.51,637.49 L1129.99,641.16 L1132.47,644.83 L1134.95,648.49 L1137.43,652.16 L1139.91,655.83
|
||||
L1142.39,659.50 L1144.87,663.16 L1147.35,666.83 L1149.83,670.50 L1152.31,674.17 L1154.79,677.83 L1157.27,681.50 L1159.75,685.17
|
||||
L1162.23,688.84 L1164.71,692.50 L1167.19,696.17 L1169.67,699.84 L1172.15,703.51 L1174.63,707.17 L1177.11,710.84 L1179.59,714.51
|
||||
L1182.07,718.18 L1184.55,721.84 L1187.03,725.51 L1189.51,729.18 L1191.99,732.85 L1194.47,736.51 L1196.95,740.18 L1199.43,743.85
|
||||
L1201.91,747.52 L1204.39,751.18 L1206.87,754.85 L1209.35,758.52 L1211.83,762.19 L1214.31,765.85 L1216.79,769.52 L1219.27,773.19
|
||||
L1221.75,776.86 L1224.23,780.52 L1226.71,784.19 L1229.19,787.86 L1231.67,791.53 L1234.15,795.19 L1236.63,798.86 L1239.11,802.53
|
||||
L1241.59,806.20 L1244.07,809.86 L1246.55,813.53 L1249.03,817.20 L1251.51,820.87 L1253.99,824.53 L1256.47,828.20 L1258.95,831.87
|
||||
L1261.43,835.54 L1263.91,839.20 L1266.39,842.87 L1268.87,846.54 L1271.35,850.21 L1273.83,853.87 L1276.31,857.54 L1278.79,861.21
|
||||
L1281.27,864.88 L1283.75,868.54 L1286.23,872.21 L1288.71,875.88 L1291.19,879.55 L1293.67,883.21 L1296.15,886.88 L1298.63,887.86
|
||||
L1301.11,887.86 L1303.59,887.86 L1306.07,887.86 L1308.55,887.86 L1311.03,887.86 L1313.51,887.86 L1315.99,887.86 L1318.47,887.86
|
||||
L1320.95,887.86 L1323.43,887.86 L1325.91,887.86 L1328.39,887.86 L1330.87,887.86 L1333.35,887.86 L1335.83,887.86 L1338.31,887.86
|
||||
L1340.79,887.86 L1343.27,887.86 L1345.75,887.86 L1348.23,885.17 L1350.71,881.50 L1353.19,877.84 L1355.67,874.17 L1358.15,870.50
|
||||
L1360.63,866.83 L1363.11,863.17 L1365.59,859.50 L1368.07,855.83 L1370.55,852.16 L1373.03,848.50 L1375.51,844.83 L1377.99,841.16
|
||||
L1380.47,837.49 L1382.95,833.83 L1385.43,830.16 L1387.91,826.49 L1390.39,822.82 L1392.87,819.16 L1395.35,815.49 L1397.83,811.82
|
||||
L1400.31,808.15 L1402.79,804.49 L1405.27,800.82 L1407.75,797.15 L1410.23,793.48 L1412.71,789.82 L1415.19,786.15 L1417.67,782.48
|
||||
L1420.15,778.81 L1422.63,775.15 L1425.11,771.48 L1427.59,767.81 L1430.07,764.14 L1432.55,760.48 L1435.03,756.81 L1437.51,753.14
|
||||
L1439.99,749.47 L1442.47,745.81 L1444.95,742.14 L1447.43,738.47 L1449.91,734.80 L1452.39,731.14 L1454.87,727.47 L1457.35,723.80
|
||||
L1459.83,720.13 L1462.31,716.47 L1464.79,712.80 L1467.27,709.13 L1469.75,705.46 L1472.23,701.80 L1474.71,698.13 L1477.19,694.46
|
||||
L1479.67,690.79 L1482.15,687.13 L1484.63,683.46 L1487.11,679.79 L1489.59,676.12 L1492.07,672.46 L1494.55,668.79 L1497.03,665.12
|
||||
L1499.51,661.45 L1501.99,657.79 L1504.47,654.12 L1506.95,650.45 L1509.43,646.78 L1511.91,643.12 L1514.39,639.45 L1516.87,635.78
|
||||
L1519.35,632.11 L1521.83,628.45 L1524.31,624.78 L1526.79,621.11 L1529.27,617.44 L1531.75,613.78 L1534.23,610.11 L1536.71,606.44
|
||||
L1539.19,602.77 L1541.67,599.11 L1544.15,595.44 L1546.63,591.77 L1549.11,588.10 L1551.59,584.44 L1554.07,580.77 L1556.55,577.10
|
||||
L1559.03,573.43 L1561.51,569.77 L1563.99,566.10 L1566.47,562.43 L1568.95,558.76 L1571.43,555.10 L1573.91,551.43 L1576.39,547.76
|
||||
L1578.87,544.09 L1581.35,540.43 L1583.83,536.76 L1586.31,533.09 L1588.79,529.42 L1591.27,525.76 L1593.75,522.09 L1594.41,521.11
|
||||
'/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_4a" ><title>ZeroToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_5a" ><title>ZeroToPositiveVf</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_6a" ><title>PositiveV0ToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g stroke='none' shape-rendering='crispEdges'>
|
||||
<polygon fill = 'white' points = '1534.62,145.12 1724.99,145.12 1724.99,94.51 1534.62,94.51 '/>
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="white" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1534.62,145.12 L1534.62,94.51 L1724.99,94.51 L1724.99,145.12 L1534.62,145.12 Z '/></g>
|
||||
<g id="gnuplot_plot_1a" ><title>gnuplot_plot_1a</title>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 0, 0)" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_2a" ><title>gnuplot_plot_2a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_3a" ><title>gnuplot_plot_3a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_4a" ><title>ZeroToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,106.53)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >ZeroToRest</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(216, 51, 45)' d='M1542.31,102.95 L1586.57,102.95 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_5a" ><title>ZeroToPositiveVf</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,123.40)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >ZeroToPositiveVf</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 114, 178)' d='M1542.31,119.82 L1586.57,119.82 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_6a" ><title>PositiveV0ToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,140.27)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >PositiveV0ToRest</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 158, 96)' d='M1542.31,136.69 L1586.57,136.69 '/></g>
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 158, 96)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="black" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L249.59,961.21 L1737.59,961.21 L1737.59,81.01 L249.59,81.01 Z '/></g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(993.59,47.54)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="17.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" font-weight="bold" >SCurve Acceleration</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 54 KiB |
@ -1,518 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<svg
|
||||
width="1920" height="1080"
|
||||
viewBox="0 0 1920 1080"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
>
|
||||
|
||||
<title>Gnuplot</title>
|
||||
<desc>Produced by GNUPLOT 5.4 patchlevel 2 </desc>
|
||||
|
||||
<g id="gnuplot_canvas">
|
||||
|
||||
<rect x="0" y="0" width="1920" height="1080" fill="none"/>
|
||||
<defs>
|
||||
|
||||
<circle id='gpDot' r='0.5' stroke-width='0.5' stroke='currentColor'/>
|
||||
<path id='gpPt0' stroke-width='0.148' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
|
||||
<path id='gpPt1' stroke-width='0.148' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
|
||||
<path id='gpPt2' stroke-width='0.148' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
|
||||
<rect id='gpPt3' stroke-width='0.148' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
|
||||
<rect id='gpPt4' stroke-width='0.148' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
|
||||
<circle id='gpPt5' stroke-width='0.148' stroke='currentColor' cx='0' cy='0' r='1'/>
|
||||
<use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
|
||||
<path id='gpPt7' stroke-width='0.148' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
|
||||
<use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
|
||||
<use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
|
||||
<use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
|
||||
<use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
|
||||
<use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
|
||||
<path id='gpPt13' stroke-width='0.148' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/>
|
||||
<use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/>
|
||||
<filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
|
||||
<feFlood flood-color='white' flood-opacity='1' result='bgnd'/>
|
||||
<feComposite in='SourceGraphic' in2='bgnd' operator='atop'/>
|
||||
</filter>
|
||||
<filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
|
||||
<feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/>
|
||||
<feComposite in='SourceGraphic' in2='grey' operator='atop'/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g fill="none" color="white" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,961.21 L1737.59,961.21 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,961.21 L259.71,961.21 '/> <g transform="translate(236.99,966.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >-10</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,741.16 L1737.59,741.16 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,741.16 L259.71,741.16 '/> <g transform="translate(236.99,746.36)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >-5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,521.11 L1737.59,521.11 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,521.11 L259.71,521.11 '/> <g transform="translate(236.99,526.31)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >0</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,301.06 L1737.59,301.06 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,301.06 L259.71,301.06 '/> <g transform="translate(236.99,306.26)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,81.01 L1737.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L259.71,81.01 '/> <g transform="translate(236.99,86.21)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >10</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,961.21 L249.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,961.21 L249.59,951.09 '/> <g transform="translate(249.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >0</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M497.59,961.21 L497.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M497.59,961.21 L497.59,951.09 '/> <g transform="translate(497.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >0.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M745.59,961.21 L745.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M745.59,961.21 L745.59,951.09 '/> <g transform="translate(745.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >1</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M993.59,961.21 L993.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M993.59,961.21 L993.59,951.09 '/> <g transform="translate(993.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >1.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1241.59,961.21 L1241.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1241.59,961.21 L1241.59,951.09 '/> <g transform="translate(1241.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >2</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1489.59,961.21 L1489.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1489.59,961.21 L1489.59,951.09 '/> <g transform="translate(1489.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >2.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1737.59,961.21 L1737.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1737.59,961.21 L1737.59,951.09 '/> <g transform="translate(1737.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >3</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L249.59,961.21 L1737.59,961.21 L1737.59,81.01 L249.59,81.01 Z '/></g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(179.81,521.11) rotate(270)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >jerk [m/s</tspan><tspan font-family="Helvetica" font-size="8.8" dy="-5.50px">3</tspan><tspan font-family="Helvetica" font-size="11.0" dy="5.50px">]</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(993.59,1032.29)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >time [s]</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1534.62,145.12 L1534.62,94.51 L1724.99,94.51 L1724.99,145.12 L1534.62,145.12 Z '/></g>
|
||||
<g id="gnuplot_plot_1a" ><title>gnuplot_plot_1a</title>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 0, 0)" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(216, 51, 45)' d='M249.59,521.11 L252.07,81.01 L254.55,81.01 L257.03,81.01 L259.51,81.01 L261.99,81.01 L264.47,81.01 L266.95,81.01
|
||||
L269.43,81.01 L271.91,81.01 L274.39,81.01 L276.87,81.01 L279.35,81.01 L281.83,81.01 L284.31,81.01 L286.79,81.01
|
||||
L289.27,81.01 L291.75,81.01 L294.23,81.01 L296.71,81.01 L299.19,81.01 L301.67,81.01 L304.15,81.01 L306.63,81.01
|
||||
L309.11,81.01 L311.59,81.01 L314.07,81.01 L316.55,81.01 L319.03,81.01 L321.51,81.01 L323.99,81.01 L326.47,81.01
|
||||
L328.95,81.01 L331.43,81.01 L333.91,81.01 L336.39,81.01 L338.87,81.01 L341.35,81.01 L343.83,81.01 L346.31,81.01
|
||||
L348.79,81.01 L351.27,81.01 L353.75,81.01 L356.23,81.01 L358.71,81.01 L361.19,81.01 L363.67,81.01 L366.15,81.01
|
||||
L368.63,81.01 L371.11,81.01 L373.59,81.01 L376.07,81.01 L378.55,81.01 L381.03,81.01 L383.51,81.01 L385.99,81.01
|
||||
L388.47,81.01 L390.95,81.01 L393.43,81.01 L395.91,81.01 L398.39,81.01 L400.87,81.01 L403.35,81.01 L405.83,81.01
|
||||
L408.31,81.01 L410.79,81.01 L413.27,81.01 L415.75,81.01 L418.23,81.01 L420.71,81.01 L423.19,81.01 L425.67,81.01
|
||||
L428.15,81.01 L430.63,81.01 L433.11,81.01 L435.59,81.01 L438.07,81.01 L440.55,81.01 L443.03,81.01 L445.51,81.01
|
||||
L447.99,81.01 L450.47,81.01 L452.95,81.01 L455.43,81.01 L457.91,81.01 L460.39,81.01 L462.87,81.01 L465.35,81.01
|
||||
L467.83,81.01 L470.31,81.01 L472.79,81.01 L475.27,81.01 L477.75,81.01 L480.23,81.01 L482.71,81.01 L485.19,81.01
|
||||
L487.67,81.01 L490.15,81.01 L492.63,81.01 L495.11,81.01 L497.59,521.11 L500.07,521.11 L502.55,521.11 L505.03,521.11
|
||||
L507.51,521.11 L509.99,521.11 L512.47,521.11 L514.95,521.11 L517.43,521.11 L519.91,521.11 L522.39,521.11 L524.87,521.11
|
||||
L527.35,521.11 L529.83,521.11 L532.31,521.11 L534.79,521.11 L537.27,521.11 L539.75,521.11 L542.23,521.11 L544.71,521.11
|
||||
L547.19,961.21 L549.67,961.21 L552.15,961.21 L554.63,961.21 L557.11,961.21 L559.59,961.21 L562.07,961.21 L564.55,961.21
|
||||
L567.03,961.21 L569.51,961.21 L571.99,961.21 L574.47,961.21 L576.95,961.21 L579.43,961.21 L581.91,961.21 L584.39,961.21
|
||||
L586.87,961.21 L589.35,961.21 L591.83,961.21 L594.31,961.21 L596.79,961.21 L599.27,961.21 L601.75,961.21 L604.23,961.21
|
||||
L606.71,961.21 L609.19,961.21 L611.67,961.21 L614.15,961.21 L616.63,961.21 L619.11,961.21 L621.59,961.21 L624.07,961.21
|
||||
L626.55,961.21 L629.03,961.21 L631.51,961.21 L633.99,961.21 L636.47,961.21 L638.95,961.21 L641.43,961.21 L643.91,961.21
|
||||
L646.39,961.21 L648.87,961.21 L651.35,961.21 L653.83,961.21 L656.31,961.21 L658.79,961.21 L661.27,961.21 L663.75,961.21
|
||||
L666.23,961.21 L668.71,961.21 L671.19,961.21 L673.67,961.21 L676.15,961.21 L678.63,961.21 L681.11,961.21 L683.59,961.21
|
||||
L686.07,961.21 L688.55,961.21 L691.03,961.21 L693.51,961.21 L695.99,961.21 L698.47,961.21 L700.95,961.21 L703.43,961.21
|
||||
L705.91,961.21 L708.39,961.21 L710.87,961.21 L713.35,961.21 L715.83,961.21 L718.31,961.21 L720.79,961.21 L723.27,961.21
|
||||
L725.75,961.21 L728.23,961.21 L730.71,961.21 L733.19,961.21 L735.67,961.21 L738.15,961.21 L740.63,961.21 L743.11,961.21
|
||||
L745.59,961.21 L748.07,961.21 L750.55,961.21 L753.03,961.21 L755.51,961.21 L757.99,961.21 L760.47,961.21 L762.95,961.21
|
||||
L765.43,961.21 L767.91,961.21 L770.39,961.21 L772.87,961.21 L775.35,961.21 L777.83,961.21 L780.31,961.21 L782.79,961.21
|
||||
L785.27,961.21 L787.75,961.21 L790.23,961.21 L792.71,961.21 L795.19,521.11 L797.67,521.11 L800.15,521.11 L802.63,521.11
|
||||
L805.11,521.11 L807.59,521.11 L810.07,521.11 L812.55,521.11 L815.03,521.11 L817.51,521.11 L819.99,521.11 L822.47,521.11
|
||||
L824.95,521.11 L827.43,521.11 L829.91,521.11 L832.39,521.11 L834.87,521.11 L837.35,521.11 L839.83,521.11 L842.31,521.11
|
||||
L844.79,521.11 L847.27,521.11 L849.75,521.11 L852.23,521.11 L854.71,521.11 L857.19,521.11 L859.67,521.11 L862.15,521.11
|
||||
L864.63,521.11 L867.11,521.11 L869.59,521.11 L872.07,521.11 L874.55,521.11 L877.03,521.11 L879.51,521.11 L881.99,521.11
|
||||
L884.47,521.11 L886.95,521.11 L889.43,521.11 L891.91,521.11 L894.39,521.11 L896.87,521.11 L899.35,521.11 L901.83,521.11
|
||||
L904.31,521.11 L906.79,521.11 L909.27,521.11 L911.75,521.11 L914.23,521.11 L916.71,521.11 L919.19,521.11 L921.67,521.11
|
||||
L924.15,521.11 L926.63,521.11 L929.11,521.11 L931.59,521.11 L934.07,521.11 L936.55,521.11 L939.03,521.11 L941.51,521.11
|
||||
L943.99,521.11 L946.47,521.11 L948.95,521.11 L951.43,521.11 L953.91,521.11 L956.39,521.11 L958.87,521.11 L961.35,521.11
|
||||
L963.83,521.11 L966.31,521.11 L968.79,521.11 L971.27,521.11 L973.75,521.11 L976.23,521.11 L978.71,521.11 L981.19,521.11
|
||||
L983.67,521.11 L986.15,521.11 L988.63,521.11 L991.11,521.11 L993.59,521.11 L996.07,521.11 L998.55,521.11 L1001.03,521.11
|
||||
L1003.51,521.11 L1005.99,521.11 L1008.47,521.11 L1010.95,521.11 L1013.43,521.11 L1015.91,521.11 L1018.39,521.11 L1020.87,521.11
|
||||
L1023.35,521.11 L1025.83,521.11 L1028.31,521.11 L1030.79,521.11 L1033.27,521.11 L1035.75,521.11 L1038.23,521.11 L1040.71,521.11
|
||||
L1043.19,521.11 L1045.67,521.11 L1048.15,521.11 L1050.63,521.11 L1053.11,521.11 L1055.59,521.11 L1058.07,521.11 L1060.55,521.11
|
||||
L1063.03,521.11 L1065.51,521.11 L1067.99,521.11 L1070.47,521.11 L1072.95,521.11 L1075.43,521.11 L1077.91,961.21 L1080.39,961.21
|
||||
L1082.87,961.21 L1085.35,961.21 L1087.83,961.21 L1090.31,961.21 L1092.79,961.21 L1095.27,961.21 L1097.75,961.21 L1100.23,961.21
|
||||
L1102.71,961.21 L1105.19,961.21 L1107.67,961.21 L1110.15,961.21 L1112.63,961.21 L1115.11,961.21 L1117.59,961.21 L1120.07,961.21
|
||||
L1122.55,961.21 L1125.03,961.21 L1127.51,961.21 L1129.99,961.21 L1132.47,961.21 L1134.95,961.21 L1137.43,961.21 L1139.91,961.21
|
||||
L1142.39,961.21 L1144.87,961.21 L1147.35,961.21 L1149.83,961.21 L1152.31,961.21 L1154.79,961.21 L1157.27,961.21 L1159.75,961.21
|
||||
L1162.23,961.21 L1164.71,961.21 L1167.19,961.21 L1169.67,961.21 L1172.15,961.21 L1174.63,961.21 L1177.11,961.21 L1179.59,961.21
|
||||
L1182.07,961.21 L1184.55,961.21 L1187.03,961.21 L1189.51,961.21 L1191.99,961.21 L1194.47,961.21 L1196.95,961.21 L1199.43,961.21
|
||||
L1201.91,961.21 L1204.39,961.21 L1206.87,961.21 L1209.35,961.21 L1211.83,961.21 L1214.31,961.21 L1216.79,961.21 L1219.27,961.21
|
||||
L1221.75,961.21 L1224.23,961.21 L1226.71,961.21 L1229.19,961.21 L1231.67,961.21 L1234.15,961.21 L1236.63,961.21 L1239.11,961.21
|
||||
L1241.59,961.21 L1244.07,961.21 L1246.55,961.21 L1249.03,961.21 L1251.51,961.21 L1253.99,961.21 L1256.47,961.21 L1258.95,961.21
|
||||
L1261.43,961.21 L1263.91,961.21 L1266.39,961.21 L1268.87,961.21 L1271.35,961.21 L1273.83,961.21 L1276.31,961.21 L1278.79,961.21
|
||||
L1281.27,961.21 L1283.75,961.21 L1286.23,961.21 L1288.71,961.21 L1291.19,961.21 L1293.67,961.21 L1296.15,961.21 L1298.63,961.21
|
||||
L1301.11,961.21 L1303.59,961.21 L1306.07,961.21 L1308.55,961.21 L1311.03,961.21 L1313.51,961.21 L1315.99,961.21 L1318.47,961.21
|
||||
L1320.95,961.21 L1323.43,961.21 L1325.91,521.11 L1328.39,521.11 L1330.87,521.11 L1333.35,521.11 L1335.83,521.11 L1338.31,521.11
|
||||
L1340.79,521.11 L1343.27,521.11 L1345.75,521.11 L1348.23,521.11 L1350.71,521.11 L1353.19,521.11 L1355.67,521.11 L1358.15,521.11
|
||||
L1360.63,521.11 L1363.11,521.11 L1365.59,521.11 L1368.07,521.11 L1370.55,521.11 L1373.03,521.11 L1375.51,81.01 L1377.99,81.01
|
||||
L1380.47,81.01 L1382.95,81.01 L1385.43,81.01 L1387.91,81.01 L1390.39,81.01 L1392.87,81.01 L1395.35,81.01 L1397.83,81.01
|
||||
L1400.31,81.01 L1402.79,81.01 L1405.27,81.01 L1407.75,81.01 L1410.23,81.01 L1412.71,81.01 L1415.19,81.01 L1417.67,81.01
|
||||
L1420.15,81.01 L1422.63,81.01 L1425.11,81.01 L1427.59,81.01 L1430.07,81.01 L1432.55,81.01 L1435.03,81.01 L1437.51,81.01
|
||||
L1439.99,81.01 L1442.47,81.01 L1444.95,81.01 L1447.43,81.01 L1449.91,81.01 L1452.39,81.01 L1454.87,81.01 L1457.35,81.01
|
||||
L1459.83,81.01 L1462.31,81.01 L1464.79,81.01 L1467.27,81.01 L1469.75,81.01 L1472.23,81.01 L1474.71,81.01 L1477.19,81.01
|
||||
L1479.67,81.01 L1482.15,81.01 L1484.63,81.01 L1487.11,81.01 L1489.59,81.01 L1492.07,81.01 L1494.55,81.01 L1497.03,81.01
|
||||
L1499.51,81.01 L1501.99,81.01 L1504.47,81.01 L1506.95,81.01 L1509.43,81.01 L1511.91,81.01 L1514.39,81.01 L1516.87,81.01
|
||||
L1519.35,81.01 L1521.83,81.01 L1524.31,81.01 L1526.79,81.01 L1529.27,81.01 L1531.75,81.01 L1534.23,81.01 L1536.71,81.01
|
||||
L1539.19,81.01 L1541.67,81.01 L1544.15,81.01 L1546.63,81.01 L1549.11,81.01 L1551.59,81.01 L1554.07,81.01 L1556.55,81.01
|
||||
L1559.03,81.01 L1561.51,81.01 L1563.99,81.01 L1566.47,81.01 L1568.95,81.01 L1571.43,81.01 L1573.91,81.01 L1576.39,81.01
|
||||
L1578.87,81.01 L1581.35,81.01 L1583.83,81.01 L1586.31,81.01 L1588.79,81.01 L1591.27,81.01 L1593.75,81.01 L1596.23,81.01
|
||||
L1598.71,81.01 L1601.19,81.01 L1603.67,81.01 L1606.15,81.01 L1608.63,81.01 L1611.11,81.01 L1613.59,81.01 L1616.07,81.01
|
||||
L1618.55,81.01 L1621.03,81.01 L1621.86,521.11 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_2a" ><title>gnuplot_plot_2a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 114, 178)' d='M249.59,521.11 L252.07,81.01 L254.55,81.01 L257.03,81.01 L259.51,81.01 L261.99,81.01 L264.47,81.01 L266.95,81.01
|
||||
L269.43,81.01 L271.91,81.01 L274.39,81.01 L276.87,81.01 L279.35,81.01 L281.83,81.01 L284.31,81.01 L286.79,81.01
|
||||
L289.27,81.01 L291.75,81.01 L294.23,81.01 L296.71,81.01 L299.19,81.01 L301.67,81.01 L304.15,81.01 L306.63,81.01
|
||||
L309.11,81.01 L311.59,81.01 L314.07,81.01 L316.55,81.01 L319.03,81.01 L321.51,81.01 L323.99,81.01 L326.47,81.01
|
||||
L328.95,81.01 L331.43,81.01 L333.91,81.01 L336.39,81.01 L338.87,81.01 L341.35,81.01 L343.83,81.01 L346.31,81.01
|
||||
L348.79,81.01 L351.27,81.01 L353.75,81.01 L356.23,81.01 L358.71,81.01 L361.19,81.01 L363.67,81.01 L366.15,81.01
|
||||
L368.63,81.01 L371.11,81.01 L373.59,81.01 L376.07,81.01 L378.55,81.01 L381.03,81.01 L383.51,81.01 L385.99,81.01
|
||||
L388.47,81.01 L390.95,81.01 L393.43,81.01 L395.91,81.01 L398.39,81.01 L400.87,81.01 L403.35,81.01 L405.83,81.01
|
||||
L408.31,81.01 L410.79,81.01 L413.27,81.01 L415.75,81.01 L418.23,81.01 L420.71,81.01 L423.19,81.01 L425.67,81.01
|
||||
L428.15,81.01 L430.63,81.01 L433.11,81.01 L435.59,81.01 L438.07,81.01 L440.55,81.01 L443.03,81.01 L445.51,81.01
|
||||
L447.99,81.01 L450.47,81.01 L452.95,81.01 L455.43,81.01 L457.91,81.01 L460.39,81.01 L462.87,81.01 L465.35,81.01
|
||||
L467.83,81.01 L470.31,81.01 L472.79,81.01 L475.27,81.01 L477.75,81.01 L480.23,81.01 L482.71,81.01 L485.19,81.01
|
||||
L487.67,81.01 L490.15,81.01 L492.63,81.01 L495.11,81.01 L497.59,521.11 L500.07,521.11 L502.55,521.11 L505.03,521.11
|
||||
L507.51,521.11 L509.99,521.11 L512.47,521.11 L514.95,521.11 L517.43,521.11 L519.91,521.11 L522.39,521.11 L524.87,521.11
|
||||
L527.35,521.11 L529.83,521.11 L532.31,521.11 L534.79,521.11 L537.27,521.11 L539.75,521.11 L542.23,521.11 L544.71,521.11
|
||||
L547.19,961.21 L549.67,961.21 L552.15,961.21 L554.63,961.21 L557.11,961.21 L559.59,961.21 L562.07,961.21 L564.55,961.21
|
||||
L567.03,961.21 L569.51,961.21 L571.99,961.21 L574.47,961.21 L576.95,961.21 L579.43,961.21 L581.91,961.21 L584.39,961.21
|
||||
L586.87,961.21 L589.35,961.21 L591.83,961.21 L594.31,961.21 L596.79,961.21 L599.27,961.21 L601.75,961.21 L604.23,961.21
|
||||
L606.71,961.21 L609.19,961.21 L611.67,961.21 L614.15,961.21 L616.63,961.21 L619.11,961.21 L621.59,961.21 L624.07,961.21
|
||||
L626.55,961.21 L629.03,961.21 L631.51,961.21 L633.99,961.21 L636.47,961.21 L638.95,961.21 L641.43,961.21 L643.91,961.21
|
||||
L646.39,961.21 L648.87,961.21 L651.35,961.21 L653.83,961.21 L656.31,961.21 L658.79,961.21 L661.27,961.21 L663.75,961.21
|
||||
L666.23,961.21 L668.71,961.21 L671.19,961.21 L673.67,961.21 L676.15,961.21 L678.63,961.21 L681.11,961.21 L683.59,961.21
|
||||
L686.07,961.21 L688.55,961.21 L691.03,961.21 L693.51,961.21 L695.99,961.21 L698.47,961.21 L700.95,961.21 L703.43,961.21
|
||||
L705.91,961.21 L708.39,961.21 L710.87,961.21 L713.35,961.21 L715.83,961.21 L718.31,961.21 L720.79,961.21 L723.27,961.21
|
||||
L725.75,961.21 L728.23,961.21 L730.71,961.21 L733.19,961.21 L735.67,961.21 L738.15,961.21 L740.63,961.21 L743.11,961.21
|
||||
L745.59,961.21 L748.07,961.21 L750.55,961.21 L753.03,961.21 L755.51,961.21 L757.99,961.21 L760.47,961.21 L762.95,961.21
|
||||
L765.43,961.21 L767.91,961.21 L770.39,961.21 L772.87,961.21 L775.35,961.21 L777.83,961.21 L780.31,961.21 L782.79,961.21
|
||||
L785.27,961.21 L787.75,961.21 L790.23,961.21 L792.71,961.21 L795.19,521.11 L797.67,521.11 L800.15,521.11 L802.63,521.11
|
||||
L805.11,521.11 L807.59,521.11 L810.07,521.11 L812.55,521.11 L815.03,521.11 L817.51,521.11 L819.99,521.11 L822.47,521.11
|
||||
L824.95,521.11 L827.43,521.11 L829.91,521.11 L832.39,521.11 L834.87,521.11 L837.35,521.11 L839.83,521.11 L842.31,521.11
|
||||
L844.79,521.11 L847.27,521.11 L849.75,521.11 L852.23,521.11 L854.71,521.11 L857.19,521.11 L859.67,521.11 L862.15,521.11
|
||||
L864.63,521.11 L867.11,521.11 L869.59,521.11 L872.07,521.11 L874.55,521.11 L877.03,521.11 L879.51,521.11 L881.99,521.11
|
||||
L884.47,521.11 L886.95,521.11 L889.43,521.11 L891.91,521.11 L894.39,521.11 L896.87,521.11 L899.35,521.11 L901.83,521.11
|
||||
L904.31,521.11 L906.79,521.11 L909.27,521.11 L911.75,521.11 L914.23,521.11 L916.71,521.11 L919.19,521.11 L921.67,521.11
|
||||
L924.15,521.11 L926.63,521.11 L929.11,521.11 L931.59,521.11 L934.07,521.11 L936.55,521.11 L939.03,521.11 L941.51,521.11
|
||||
L943.99,521.11 L946.47,521.11 L948.95,521.11 L951.43,521.11 L953.91,521.11 L956.39,521.11 L958.87,521.11 L961.35,521.11
|
||||
L963.83,521.11 L966.31,521.11 L968.79,521.11 L971.27,521.11 L973.75,521.11 L976.23,521.11 L978.71,521.11 L981.19,521.11
|
||||
L983.67,521.11 L986.15,521.11 L988.63,521.11 L991.11,521.11 L993.59,521.11 L996.07,521.11 L998.55,521.11 L1001.03,521.11
|
||||
L1003.51,521.11 L1005.99,521.11 L1008.47,521.11 L1010.95,521.11 L1013.43,521.11 L1015.91,521.11 L1018.39,521.11 L1020.87,521.11
|
||||
L1023.35,521.11 L1025.83,521.11 L1028.31,521.11 L1030.79,521.11 L1033.27,521.11 L1035.75,521.11 L1038.23,521.11 L1040.71,521.11
|
||||
L1043.19,521.11 L1045.67,521.11 L1048.15,521.11 L1050.63,521.11 L1053.11,521.11 L1055.59,521.11 L1058.07,521.11 L1060.55,521.11
|
||||
L1063.03,521.11 L1065.51,521.11 L1067.99,521.11 L1070.47,961.21 L1072.95,961.21 L1075.43,961.21 L1077.91,961.21 L1080.39,961.21
|
||||
L1082.87,961.21 L1085.35,961.21 L1087.83,961.21 L1090.31,961.21 L1092.79,961.21 L1095.27,961.21 L1097.75,961.21 L1100.23,961.21
|
||||
L1102.71,961.21 L1105.19,961.21 L1107.67,961.21 L1110.15,961.21 L1112.63,961.21 L1115.11,961.21 L1117.59,961.21 L1120.07,961.21
|
||||
L1122.55,961.21 L1125.03,961.21 L1127.51,961.21 L1129.99,961.21 L1132.47,961.21 L1134.95,961.21 L1137.43,961.21 L1139.91,961.21
|
||||
L1142.39,961.21 L1144.87,961.21 L1147.35,961.21 L1149.83,961.21 L1152.31,961.21 L1154.79,961.21 L1157.27,961.21 L1159.75,961.21
|
||||
L1162.23,961.21 L1164.71,961.21 L1167.19,961.21 L1169.67,961.21 L1172.15,961.21 L1174.63,961.21 L1177.11,961.21 L1179.59,961.21
|
||||
L1182.07,961.21 L1184.55,961.21 L1187.03,961.21 L1189.51,961.21 L1191.99,961.21 L1194.47,961.21 L1196.95,961.21 L1199.43,961.21
|
||||
L1201.91,961.21 L1204.39,961.21 L1206.87,961.21 L1209.35,961.21 L1211.83,961.21 L1214.31,961.21 L1216.79,961.21 L1219.27,961.21
|
||||
L1221.75,961.21 L1224.23,961.21 L1226.71,961.21 L1229.19,961.21 L1231.67,961.21 L1234.15,961.21 L1236.63,961.21 L1239.11,961.21
|
||||
L1241.59,961.21 L1244.07,961.21 L1246.55,961.21 L1249.03,961.21 L1251.51,961.21 L1253.99,961.21 L1256.47,961.21 L1258.95,961.21
|
||||
L1261.43,961.21 L1263.91,961.21 L1266.39,961.21 L1268.87,961.21 L1271.35,961.21 L1273.83,961.21 L1276.31,961.21 L1278.79,961.21
|
||||
L1281.27,961.21 L1283.75,961.21 L1286.23,961.21 L1288.71,961.21 L1291.19,961.21 L1293.67,961.21 L1296.15,961.21 L1298.63,961.21
|
||||
L1301.11,961.21 L1303.59,961.21 L1306.07,961.21 L1308.55,961.21 L1311.03,961.21 L1313.51,961.21 L1315.99,961.21 L1318.47,521.11
|
||||
L1320.95,521.11 L1323.43,521.11 L1325.91,521.11 L1328.39,521.11 L1330.87,521.11 L1333.35,521.11 L1335.83,521.11 L1338.31,521.11
|
||||
L1340.79,521.11 L1343.27,521.11 L1345.75,521.11 L1348.23,81.01 L1350.71,81.01 L1353.19,81.01 L1355.67,81.01 L1358.15,81.01
|
||||
L1360.63,81.01 L1363.11,81.01 L1365.59,81.01 L1368.07,81.01 L1370.55,81.01 L1373.03,81.01 L1375.51,81.01 L1377.99,81.01
|
||||
L1380.47,81.01 L1382.95,81.01 L1385.43,81.01 L1387.91,81.01 L1390.39,81.01 L1392.87,81.01 L1395.35,81.01 L1397.83,81.01
|
||||
L1400.31,81.01 L1402.79,81.01 L1405.27,81.01 L1407.75,81.01 L1410.23,81.01 L1412.71,81.01 L1415.19,81.01 L1417.67,81.01
|
||||
L1420.15,81.01 L1422.63,81.01 L1425.11,81.01 L1427.59,81.01 L1430.07,81.01 L1432.55,81.01 L1435.03,81.01 L1437.51,81.01
|
||||
L1439.99,81.01 L1442.47,81.01 L1444.95,81.01 L1447.43,81.01 L1449.91,81.01 L1452.39,81.01 L1454.87,81.01 L1457.35,81.01
|
||||
L1459.83,81.01 L1462.31,81.01 L1464.79,81.01 L1467.27,81.01 L1469.75,81.01 L1472.23,81.01 L1474.71,81.01 L1477.19,81.01
|
||||
L1479.67,81.01 L1482.15,81.01 L1484.63,81.01 L1487.11,81.01 L1489.59,81.01 L1492.07,81.01 L1494.55,81.01 L1497.03,81.01
|
||||
L1499.51,81.01 L1501.99,81.01 L1504.47,81.01 L1506.95,81.01 L1509.43,81.01 L1511.91,81.01 L1514.39,81.01 L1516.87,81.01
|
||||
L1519.35,81.01 L1521.83,81.01 L1524.31,81.01 L1526.79,81.01 L1529.27,81.01 L1531.75,81.01 L1534.23,81.01 L1536.71,81.01
|
||||
L1539.19,81.01 L1541.67,81.01 L1544.15,81.01 L1546.63,81.01 L1549.11,81.01 L1551.59,81.01 L1554.07,81.01 L1556.55,81.01
|
||||
L1559.03,81.01 L1561.51,81.01 L1563.99,81.01 L1566.47,81.01 L1568.95,81.01 L1571.43,81.01 L1573.91,81.01 L1576.39,81.01
|
||||
L1578.87,81.01 L1581.35,81.01 L1583.83,81.01 L1586.31,81.01 L1588.79,81.01 L1591.27,81.01 L1593.75,81.01 L1594.41,521.11
|
||||
'/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_3a" ><title>gnuplot_plot_3a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 158, 96)' d='M249.59,521.11 L252.07,81.01 L254.55,81.01 L257.03,81.01 L259.51,81.01 L261.99,81.01 L264.47,81.01 L266.95,81.01
|
||||
L269.43,81.01 L271.91,81.01 L274.39,81.01 L276.87,81.01 L279.35,81.01 L281.83,81.01 L284.31,81.01 L286.79,81.01
|
||||
L289.27,81.01 L291.75,81.01 L294.23,81.01 L296.71,81.01 L299.19,81.01 L301.67,81.01 L304.15,81.01 L306.63,81.01
|
||||
L309.11,81.01 L311.59,81.01 L314.07,81.01 L316.55,81.01 L319.03,81.01 L321.51,81.01 L323.99,81.01 L326.47,81.01
|
||||
L328.95,81.01 L331.43,81.01 L333.91,81.01 L336.39,81.01 L338.87,81.01 L341.35,81.01 L343.83,81.01 L346.31,81.01
|
||||
L348.79,81.01 L351.27,81.01 L353.75,81.01 L356.23,81.01 L358.71,81.01 L361.19,81.01 L363.67,81.01 L366.15,81.01
|
||||
L368.63,81.01 L371.11,81.01 L373.59,81.01 L376.07,81.01 L378.55,81.01 L381.03,81.01 L383.51,81.01 L385.99,81.01
|
||||
L388.47,81.01 L390.95,81.01 L393.43,81.01 L395.91,81.01 L398.39,81.01 L400.87,81.01 L403.35,81.01 L405.83,81.01
|
||||
L408.31,81.01 L410.79,81.01 L413.27,81.01 L415.75,81.01 L418.23,81.01 L420.71,81.01 L423.19,81.01 L425.67,81.01
|
||||
L428.15,81.01 L430.63,81.01 L433.11,81.01 L435.59,81.01 L438.07,81.01 L440.55,81.01 L443.03,81.01 L445.51,81.01
|
||||
L447.99,81.01 L450.47,81.01 L452.95,81.01 L455.43,81.01 L457.91,81.01 L460.39,81.01 L462.87,81.01 L465.35,81.01
|
||||
L467.83,81.01 L470.31,81.01 L472.79,81.01 L475.27,81.01 L477.75,81.01 L480.23,81.01 L482.71,81.01 L485.19,81.01
|
||||
L487.67,81.01 L490.15,81.01 L492.63,81.01 L495.11,81.01 L497.59,521.11 L500.07,521.11 L502.55,521.11 L505.03,521.11
|
||||
L507.51,521.11 L509.99,521.11 L512.47,521.11 L514.95,521.11 L517.43,521.11 L519.91,521.11 L522.39,521.11 L524.87,521.11
|
||||
L527.35,961.21 L529.83,961.21 L532.31,961.21 L534.79,961.21 L537.27,961.21 L539.75,961.21 L542.23,961.21 L544.71,961.21
|
||||
L547.19,961.21 L549.67,961.21 L552.15,961.21 L554.63,961.21 L557.11,961.21 L559.59,961.21 L562.07,961.21 L564.55,961.21
|
||||
L567.03,961.21 L569.51,961.21 L571.99,961.21 L574.47,961.21 L576.95,961.21 L579.43,961.21 L581.91,961.21 L584.39,961.21
|
||||
L586.87,961.21 L589.35,961.21 L591.83,961.21 L594.31,961.21 L596.79,961.21 L599.27,961.21 L601.75,961.21 L604.23,961.21
|
||||
L606.71,961.21 L609.19,961.21 L611.67,961.21 L614.15,961.21 L616.63,961.21 L619.11,961.21 L621.59,961.21 L624.07,961.21
|
||||
L626.55,961.21 L629.03,961.21 L631.51,961.21 L633.99,961.21 L636.47,961.21 L638.95,961.21 L641.43,961.21 L643.91,961.21
|
||||
L646.39,961.21 L648.87,961.21 L651.35,961.21 L653.83,961.21 L656.31,961.21 L658.79,961.21 L661.27,961.21 L663.75,961.21
|
||||
L666.23,961.21 L668.71,961.21 L671.19,961.21 L673.67,961.21 L676.15,961.21 L678.63,961.21 L681.11,961.21 L683.59,961.21
|
||||
L686.07,961.21 L688.55,961.21 L691.03,961.21 L693.51,961.21 L695.99,961.21 L698.47,961.21 L700.95,961.21 L703.43,961.21
|
||||
L705.91,961.21 L708.39,961.21 L710.87,961.21 L713.35,961.21 L715.83,961.21 L718.31,961.21 L720.79,961.21 L723.27,961.21
|
||||
L725.75,961.21 L728.23,961.21 L730.71,961.21 L733.19,961.21 L735.67,961.21 L738.15,961.21 L740.63,961.21 L743.11,961.21
|
||||
L745.59,961.21 L748.07,961.21 L750.55,961.21 L753.03,961.21 L755.51,961.21 L757.99,961.21 L760.47,961.21 L762.95,961.21
|
||||
L765.43,961.21 L767.91,961.21 L770.39,961.21 L772.87,961.21 L775.35,521.11 L777.83,521.11 L780.31,521.11 L782.79,521.11
|
||||
L785.27,521.11 L787.75,521.11 L790.23,521.11 L792.71,521.11 L795.19,521.11 L797.67,521.11 L800.15,521.11 L802.63,521.11
|
||||
L805.11,521.11 L807.59,521.11 L810.07,521.11 L812.55,521.11 L815.03,521.11 L817.51,521.11 L819.99,521.11 L822.47,521.11
|
||||
L824.95,521.11 L827.43,521.11 L829.91,521.11 L832.39,521.11 L834.87,521.11 L837.35,521.11 L839.83,521.11 L842.31,521.11
|
||||
L844.79,521.11 L847.27,521.11 L849.75,521.11 L852.23,521.11 L854.71,521.11 L857.19,521.11 L859.67,521.11 L862.15,521.11
|
||||
L864.63,521.11 L867.11,521.11 L869.59,521.11 L872.07,521.11 L874.55,521.11 L877.03,521.11 L879.51,521.11 L881.99,521.11
|
||||
L884.47,521.11 L886.95,521.11 L889.43,521.11 L891.91,521.11 L894.39,521.11 L896.87,521.11 L899.35,521.11 L901.83,521.11
|
||||
L904.31,521.11 L906.79,521.11 L909.27,521.11 L911.75,521.11 L914.23,521.11 L916.71,521.11 L919.19,521.11 L921.67,521.11
|
||||
L924.15,521.11 L926.63,521.11 L929.11,521.11 L931.59,521.11 L934.07,521.11 L936.55,521.11 L939.03,521.11 L941.51,521.11
|
||||
L943.99,521.11 L946.47,521.11 L948.95,521.11 L951.43,521.11 L953.91,521.11 L956.39,521.11 L958.87,521.11 L961.35,521.11
|
||||
L963.83,521.11 L966.31,521.11 L968.79,521.11 L971.27,521.11 L973.75,521.11 L976.23,521.11 L978.71,521.11 L981.19,521.11
|
||||
L983.67,521.11 L986.15,521.11 L988.63,521.11 L991.11,521.11 L993.59,521.11 L996.07,521.11 L998.55,521.11 L1001.03,521.11
|
||||
L1003.51,521.11 L1005.99,521.11 L1008.47,521.11 L1010.95,521.11 L1013.43,521.11 L1015.91,521.11 L1018.39,521.11 L1020.87,521.11
|
||||
L1023.35,521.11 L1025.83,521.11 L1028.31,521.11 L1030.79,521.11 L1033.27,521.11 L1035.75,521.11 L1038.23,521.11 L1040.71,521.11
|
||||
L1043.19,521.11 L1045.67,521.11 L1048.15,521.11 L1050.63,961.21 L1053.11,961.21 L1055.59,961.21 L1058.07,961.21 L1060.55,961.21
|
||||
L1063.03,961.21 L1065.51,961.21 L1067.99,961.21 L1070.47,961.21 L1072.95,961.21 L1075.43,961.21 L1077.91,961.21 L1080.39,961.21
|
||||
L1082.87,961.21 L1085.35,961.21 L1087.83,961.21 L1090.31,961.21 L1092.79,961.21 L1095.27,961.21 L1097.75,961.21 L1100.23,961.21
|
||||
L1102.71,961.21 L1105.19,961.21 L1107.67,961.21 L1110.15,961.21 L1112.63,961.21 L1115.11,961.21 L1117.59,961.21 L1120.07,961.21
|
||||
L1122.55,961.21 L1125.03,961.21 L1127.51,961.21 L1129.99,961.21 L1132.47,961.21 L1134.95,961.21 L1137.43,961.21 L1139.91,961.21
|
||||
L1142.39,961.21 L1144.87,961.21 L1147.35,961.21 L1149.83,961.21 L1152.31,961.21 L1154.79,961.21 L1157.27,961.21 L1159.75,961.21
|
||||
L1162.23,961.21 L1164.71,961.21 L1167.19,961.21 L1169.67,961.21 L1172.15,961.21 L1174.63,961.21 L1177.11,961.21 L1179.59,961.21
|
||||
L1182.07,961.21 L1184.55,961.21 L1187.03,961.21 L1189.51,961.21 L1191.99,961.21 L1194.47,961.21 L1196.95,961.21 L1199.43,961.21
|
||||
L1201.91,961.21 L1204.39,961.21 L1206.87,961.21 L1209.35,961.21 L1211.83,961.21 L1214.31,961.21 L1216.79,961.21 L1219.27,961.21
|
||||
L1221.75,961.21 L1224.23,961.21 L1226.71,961.21 L1229.19,961.21 L1231.67,961.21 L1234.15,961.21 L1236.63,961.21 L1239.11,961.21
|
||||
L1241.59,961.21 L1244.07,961.21 L1246.55,961.21 L1249.03,961.21 L1251.51,961.21 L1253.99,961.21 L1256.47,961.21 L1258.95,961.21
|
||||
L1261.43,961.21 L1263.91,961.21 L1266.39,961.21 L1268.87,961.21 L1271.35,961.21 L1273.83,961.21 L1276.31,961.21 L1278.79,961.21
|
||||
L1281.27,961.21 L1283.75,961.21 L1286.23,961.21 L1288.71,961.21 L1291.19,961.21 L1293.67,961.21 L1296.15,961.21 L1298.63,521.11
|
||||
L1301.11,521.11 L1303.59,521.11 L1306.07,521.11 L1308.55,521.11 L1311.03,521.11 L1313.51,521.11 L1315.99,521.11 L1318.47,521.11
|
||||
L1320.95,521.11 L1323.43,521.11 L1325.91,521.11 L1328.39,521.11 L1330.87,521.11 L1333.35,521.11 L1335.83,521.11 L1338.31,521.11
|
||||
L1340.79,521.11 L1343.27,521.11 L1345.75,521.11 L1348.23,81.01 L1350.71,81.01 L1353.19,81.01 L1355.67,81.01 L1358.15,81.01
|
||||
L1360.63,81.01 L1363.11,81.01 L1365.59,81.01 L1368.07,81.01 L1370.55,81.01 L1373.03,81.01 L1375.51,81.01 L1377.99,81.01
|
||||
L1380.47,81.01 L1382.95,81.01 L1385.43,81.01 L1387.91,81.01 L1390.39,81.01 L1392.87,81.01 L1395.35,81.01 L1397.83,81.01
|
||||
L1400.31,81.01 L1402.79,81.01 L1405.27,81.01 L1407.75,81.01 L1410.23,81.01 L1412.71,81.01 L1415.19,81.01 L1417.67,81.01
|
||||
L1420.15,81.01 L1422.63,81.01 L1425.11,81.01 L1427.59,81.01 L1430.07,81.01 L1432.55,81.01 L1435.03,81.01 L1437.51,81.01
|
||||
L1439.99,81.01 L1442.47,81.01 L1444.95,81.01 L1447.43,81.01 L1449.91,81.01 L1452.39,81.01 L1454.87,81.01 L1457.35,81.01
|
||||
L1459.83,81.01 L1462.31,81.01 L1464.79,81.01 L1467.27,81.01 L1469.75,81.01 L1472.23,81.01 L1474.71,81.01 L1477.19,81.01
|
||||
L1479.67,81.01 L1482.15,81.01 L1484.63,81.01 L1487.11,81.01 L1489.59,81.01 L1492.07,81.01 L1494.55,81.01 L1497.03,81.01
|
||||
L1499.51,81.01 L1501.99,81.01 L1504.47,81.01 L1506.95,81.01 L1509.43,81.01 L1511.91,81.01 L1514.39,81.01 L1516.87,81.01
|
||||
L1519.35,81.01 L1521.83,81.01 L1524.31,81.01 L1526.79,81.01 L1529.27,81.01 L1531.75,81.01 L1534.23,81.01 L1536.71,81.01
|
||||
L1539.19,81.01 L1541.67,81.01 L1544.15,81.01 L1546.63,81.01 L1549.11,81.01 L1551.59,81.01 L1554.07,81.01 L1556.55,81.01
|
||||
L1559.03,81.01 L1561.51,81.01 L1563.99,81.01 L1566.47,81.01 L1568.95,81.01 L1571.43,81.01 L1573.91,81.01 L1576.39,81.01
|
||||
L1578.87,81.01 L1581.35,81.01 L1583.83,81.01 L1586.31,81.01 L1588.79,81.01 L1591.27,81.01 L1593.75,81.01 L1594.41,521.11
|
||||
'/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_4a" ><title>ZeroToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_5a" ><title>ZeroToPositiveVf</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_6a" ><title>PositiveV0ToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g stroke='none' shape-rendering='crispEdges'>
|
||||
<polygon fill = 'white' points = '1534.62,145.12 1724.99,145.12 1724.99,94.51 1534.62,94.51 '/>
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="white" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1534.62,145.12 L1534.62,94.51 L1724.99,94.51 L1724.99,145.12 L1534.62,145.12 Z '/></g>
|
||||
<g id="gnuplot_plot_1a" ><title>gnuplot_plot_1a</title>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 0, 0)" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_2a" ><title>gnuplot_plot_2a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_3a" ><title>gnuplot_plot_3a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_4a" ><title>ZeroToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,106.53)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >ZeroToRest</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(216, 51, 45)' d='M1542.31,102.95 L1586.57,102.95 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_5a" ><title>ZeroToPositiveVf</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,123.40)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >ZeroToPositiveVf</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 114, 178)' d='M1542.31,119.82 L1586.57,119.82 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_6a" ><title>PositiveV0ToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,140.27)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >PositiveV0ToRest</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 158, 96)' d='M1542.31,136.69 L1586.57,136.69 '/></g>
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 158, 96)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="black" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L249.59,961.21 L1737.59,961.21 L1737.59,81.01 L249.59,81.01 Z '/></g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(993.59,47.54)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="17.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" font-weight="bold" >SCurve Jerk</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 72 KiB |
@ -1,531 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<svg
|
||||
width="1920" height="1080"
|
||||
viewBox="0 0 1920 1080"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
>
|
||||
|
||||
<title>Gnuplot</title>
|
||||
<desc>Produced by GNUPLOT 5.4 patchlevel 2 </desc>
|
||||
|
||||
<g id="gnuplot_canvas">
|
||||
|
||||
<rect x="0" y="0" width="1920" height="1080" fill="none"/>
|
||||
<defs>
|
||||
|
||||
<circle id='gpDot' r='0.5' stroke-width='0.5' stroke='currentColor'/>
|
||||
<path id='gpPt0' stroke-width='0.148' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
|
||||
<path id='gpPt1' stroke-width='0.148' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
|
||||
<path id='gpPt2' stroke-width='0.148' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
|
||||
<rect id='gpPt3' stroke-width='0.148' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
|
||||
<rect id='gpPt4' stroke-width='0.148' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
|
||||
<circle id='gpPt5' stroke-width='0.148' stroke='currentColor' cx='0' cy='0' r='1'/>
|
||||
<use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
|
||||
<path id='gpPt7' stroke-width='0.148' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
|
||||
<use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
|
||||
<use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
|
||||
<use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
|
||||
<use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
|
||||
<use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
|
||||
<path id='gpPt13' stroke-width='0.148' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/>
|
||||
<use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/>
|
||||
<filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
|
||||
<feFlood flood-color='white' flood-opacity='1' result='bgnd'/>
|
||||
<feComposite in='SourceGraphic' in2='bgnd' operator='atop'/>
|
||||
</filter>
|
||||
<filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
|
||||
<feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/>
|
||||
<feComposite in='SourceGraphic' in2='grey' operator='atop'/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g fill="none" color="white" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,961.21 L1737.59,961.21 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,961.21 L259.71,961.21 '/> <g transform="translate(236.99,966.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >0</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,785.17 L1737.59,785.17 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,785.17 L259.71,785.17 '/> <g transform="translate(236.99,790.37)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >1</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,609.13 L1737.59,609.13 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,609.13 L259.71,609.13 '/> <g transform="translate(236.99,614.33)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >2</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,433.09 L1737.59,433.09 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,433.09 L259.71,433.09 '/> <g transform="translate(236.99,438.29)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >3</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,257.05 L1737.59,257.05 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,257.05 L259.71,257.05 '/> <g transform="translate(236.99,262.25)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >4</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,81.01 L1737.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L259.71,81.01 '/> <g transform="translate(236.99,86.21)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,961.21 L249.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,961.21 L249.59,951.09 '/> <g transform="translate(249.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >0</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M497.59,961.21 L497.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M497.59,961.21 L497.59,951.09 '/> <g transform="translate(497.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >0.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M745.59,961.21 L745.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M745.59,961.21 L745.59,951.09 '/> <g transform="translate(745.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >1</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M993.59,961.21 L993.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M993.59,961.21 L993.59,951.09 '/> <g transform="translate(993.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >1.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1241.59,961.21 L1241.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1241.59,961.21 L1241.59,951.09 '/> <g transform="translate(1241.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >2</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1489.59,961.21 L1489.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1489.59,961.21 L1489.59,951.09 '/> <g transform="translate(1489.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >2.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1737.59,961.21 L1737.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1737.59,961.21 L1737.59,951.09 '/> <g transform="translate(1737.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >3</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L249.59,961.21 L1737.59,961.21 L1737.59,81.01 L249.59,81.01 Z '/></g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(205.01,521.11) rotate(270)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >position [m]</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(993.59,1032.29)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >time [s]</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1534.62,145.12 L1534.62,94.51 L1724.99,94.51 L1724.99,145.12 L1534.62,145.12 Z '/></g>
|
||||
<g id="gnuplot_plot_1a" ><title>gnuplot_plot_1a</title>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 0, 0)" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(216, 51, 45)' d='M249.59,961.21 L252.07,961.21 L254.55,961.21 L257.03,961.21 L259.51,961.21 L261.99,961.21 L264.47,961.20 L266.95,961.20
|
||||
L269.43,961.19 L271.91,961.18 L274.39,961.17 L276.87,961.16 L279.35,961.15 L281.83,961.13 L284.31,961.11 L286.79,961.09
|
||||
L289.27,961.06 L291.75,961.03 L294.23,961.00 L296.71,960.96 L299.19,960.92 L301.67,960.87 L304.15,960.82 L306.63,960.76
|
||||
L309.11,960.70 L311.59,960.64 L314.07,960.57 L316.55,960.49 L319.03,960.40 L321.51,960.32 L323.99,960.22 L326.47,960.12
|
||||
L328.95,960.01 L331.43,959.89 L333.91,959.77 L336.39,959.64 L338.87,959.50 L341.35,959.35 L343.83,959.20 L346.31,959.03
|
||||
L348.79,958.86 L351.27,958.68 L353.75,958.49 L356.23,958.29 L358.71,958.09 L361.19,957.87 L363.67,957.64 L366.15,957.40
|
||||
L368.63,957.15 L371.11,956.90 L373.59,956.63 L376.07,956.35 L378.55,956.05 L381.03,955.75 L383.51,955.44 L385.99,955.11
|
||||
L388.47,954.77 L390.95,954.42 L393.43,954.05 L395.91,953.68 L398.39,953.29 L400.87,952.89 L403.35,952.47 L405.83,952.04
|
||||
L408.31,951.60 L410.79,951.14 L413.27,950.67 L415.75,950.18 L418.23,949.68 L420.71,949.16 L423.19,948.63 L425.67,948.08
|
||||
L428.15,947.52 L430.63,946.94 L433.11,946.35 L435.59,945.74 L438.07,945.11 L440.55,944.47 L443.03,943.81 L445.51,943.13
|
||||
L447.99,942.43 L450.47,941.72 L452.95,940.99 L455.43,940.24 L457.91,939.47 L460.39,938.69 L462.87,937.88 L465.35,937.06
|
||||
L467.83,936.22 L470.31,935.36 L472.79,934.47 L475.27,933.57 L477.75,932.65 L480.23,931.71 L482.71,930.75 L485.19,929.77
|
||||
L487.67,928.76 L490.15,927.74 L492.63,926.69 L495.11,925.62 L497.59,924.54 L500.07,923.42 L502.55,922.29 L505.03,921.14
|
||||
L507.51,919.96 L509.99,918.76 L512.47,917.54 L514.95,916.29 L517.43,915.03 L519.91,913.74 L522.39,912.43 L524.87,911.10
|
||||
L527.35,909.75 L529.83,908.37 L532.31,906.98 L534.79,905.56 L537.27,904.11 L539.75,902.65 L542.23,901.17 L544.71,899.66
|
||||
L547.19,898.13 L549.67,896.58 L552.15,895.00 L554.63,893.41 L557.11,891.79 L559.59,890.16 L562.07,888.50 L564.55,886.82
|
||||
L567.03,885.12 L569.51,883.40 L571.99,881.66 L574.47,879.90 L576.95,878.12 L579.43,876.33 L581.91,874.51 L584.39,872.67
|
||||
L586.87,870.82 L589.35,868.94 L591.83,867.05 L594.31,865.14 L596.79,863.21 L599.27,861.27 L601.75,859.31 L604.23,857.33
|
||||
L606.71,855.33 L609.19,853.32 L611.67,851.29 L614.15,849.24 L616.63,847.18 L619.11,845.10 L621.59,843.01 L624.07,840.90
|
||||
L626.55,838.77 L629.03,836.63 L631.51,834.48 L633.99,832.31 L636.47,830.13 L638.95,827.93 L641.43,825.72 L643.91,823.50
|
||||
L646.39,821.26 L648.87,819.01 L651.35,816.74 L653.83,814.47 L656.31,812.18 L658.79,809.88 L661.27,807.56 L663.75,805.24
|
||||
L666.23,802.90 L668.71,800.55 L671.19,798.19 L673.67,795.82 L676.15,793.44 L678.63,791.04 L681.11,788.64 L683.59,786.23
|
||||
L686.07,783.81 L688.55,781.37 L691.03,778.93 L693.51,776.48 L695.99,774.02 L698.47,771.55 L700.95,769.07 L703.43,766.59
|
||||
L705.91,764.09 L708.39,761.59 L710.87,759.08 L713.35,756.57 L715.83,754.04 L718.31,751.51 L720.79,748.97 L723.27,746.43
|
||||
L725.75,743.88 L728.23,741.32 L730.71,738.76 L733.19,736.19 L735.67,733.61 L738.15,731.03 L740.63,728.45 L743.11,725.86
|
||||
L745.59,723.26 L748.07,720.66 L750.55,718.06 L753.03,715.45 L755.51,712.84 L757.99,710.23 L760.47,707.61 L762.95,704.99
|
||||
L765.43,702.37 L767.91,699.74 L770.39,697.11 L772.87,694.48 L775.35,691.85 L777.83,689.22 L780.31,686.58 L782.79,683.94
|
||||
L785.27,681.30 L787.75,678.66 L790.23,676.02 L792.71,673.38 L795.19,670.74 L797.67,668.10 L800.15,665.46 L802.63,662.82
|
||||
L805.11,660.18 L807.59,657.54 L810.07,654.90 L812.55,652.26 L815.03,649.62 L817.51,646.98 L819.99,644.34 L822.47,641.70
|
||||
L824.95,639.06 L827.43,636.42 L829.91,633.78 L832.39,631.13 L834.87,628.49 L837.35,625.85 L839.83,623.21 L842.31,620.57
|
||||
L844.79,617.93 L847.27,615.29 L849.75,612.65 L852.23,610.01 L854.71,607.37 L857.19,604.73 L859.67,602.09 L862.15,599.45
|
||||
L864.63,596.81 L867.11,594.17 L869.59,591.53 L872.07,588.89 L874.55,586.24 L877.03,583.60 L879.51,580.96 L881.99,578.32
|
||||
L884.47,575.68 L886.95,573.04 L889.43,570.40 L891.91,567.76 L894.39,565.12 L896.87,562.48 L899.35,559.84 L901.83,557.20
|
||||
L904.31,554.56 L906.79,551.92 L909.27,549.28 L911.75,546.64 L914.23,544.00 L916.71,541.35 L919.19,538.71 L921.67,536.07
|
||||
L924.15,533.43 L926.63,530.79 L929.11,528.15 L931.59,525.51 L934.07,522.87 L936.55,520.23 L939.03,517.59 L941.51,514.95
|
||||
L943.99,512.31 L946.47,509.67 L948.95,507.03 L951.43,504.39 L953.91,501.75 L956.39,499.10 L958.87,496.46 L961.35,493.82
|
||||
L963.83,491.18 L966.31,488.54 L968.79,485.90 L971.27,483.26 L973.75,480.62 L976.23,477.98 L978.71,475.34 L981.19,472.70
|
||||
L983.67,470.06 L986.15,467.42 L988.63,464.78 L991.11,462.14 L993.59,459.50 L996.07,456.86 L998.55,454.21 L1001.03,451.57
|
||||
L1003.51,448.93 L1005.99,446.29 L1008.47,443.65 L1010.95,441.01 L1013.43,438.37 L1015.91,435.73 L1018.39,433.09 L1020.87,430.45
|
||||
L1023.35,427.81 L1025.83,425.17 L1028.31,422.53 L1030.79,419.89 L1033.27,417.25 L1035.75,414.61 L1038.23,411.97 L1040.71,409.32
|
||||
L1043.19,406.68 L1045.67,404.04 L1048.15,401.40 L1050.63,398.76 L1053.11,396.12 L1055.59,393.48 L1058.07,390.84 L1060.55,388.20
|
||||
L1063.03,385.56 L1065.51,382.92 L1067.99,380.28 L1070.47,377.64 L1072.95,375.00 L1075.43,372.36 L1077.91,369.72 L1080.39,367.08
|
||||
L1082.87,364.44 L1085.35,361.80 L1087.83,359.16 L1090.31,356.52 L1092.79,353.88 L1095.27,351.25 L1097.75,348.61 L1100.23,345.98
|
||||
L1102.71,343.35 L1105.19,340.73 L1107.67,338.10 L1110.15,335.48 L1112.63,332.86 L1115.11,330.25 L1117.59,327.64 L1120.07,325.03
|
||||
L1122.55,322.42 L1125.03,319.82 L1127.51,317.23 L1129.99,314.64 L1132.47,312.05 L1134.95,309.47 L1137.43,306.89 L1139.91,304.32
|
||||
L1142.39,301.76 L1144.87,299.20 L1147.35,296.64 L1149.83,294.10 L1152.31,291.56 L1154.79,289.02 L1157.27,286.49 L1159.75,283.98
|
||||
L1162.23,281.46 L1164.71,278.96 L1167.19,276.46 L1169.67,273.97 L1172.15,271.49 L1174.63,269.02 L1177.11,266.56 L1179.59,264.10
|
||||
L1182.07,261.66 L1184.55,259.22 L1187.03,256.80 L1189.51,254.38 L1191.99,251.98 L1194.47,249.58 L1196.95,247.19 L1199.43,244.82
|
||||
L1201.91,242.46 L1204.39,240.10 L1206.87,237.76 L1209.35,235.43 L1211.83,233.11 L1214.31,230.81 L1216.79,228.52 L1219.27,226.23
|
||||
L1221.75,223.97 L1224.23,221.71 L1226.71,219.47 L1229.19,217.24 L1231.67,215.02 L1234.15,212.82 L1236.63,210.63 L1239.11,208.46
|
||||
L1241.59,206.30 L1244.07,204.16 L1246.55,202.03 L1249.03,199.91 L1251.51,197.82 L1253.99,195.73 L1256.47,193.67 L1258.95,191.61
|
||||
L1261.43,189.58 L1263.91,187.56 L1266.39,185.56 L1268.87,183.57 L1271.35,181.60 L1273.83,179.65 L1276.31,177.72 L1278.79,175.80
|
||||
L1281.27,173.91 L1283.75,172.03 L1286.23,170.16 L1288.71,168.32 L1291.19,166.50 L1293.67,164.69 L1296.15,162.91 L1298.63,161.14
|
||||
L1301.11,159.40 L1303.59,157.67 L1306.07,155.96 L1308.55,154.28 L1311.03,152.61 L1313.51,150.97 L1315.99,149.35 L1318.47,147.74
|
||||
L1320.95,146.16 L1323.43,144.61 L1325.91,143.07 L1328.39,141.55 L1330.87,140.06 L1333.35,138.59 L1335.83,137.14 L1338.31,135.72
|
||||
L1340.79,134.31 L1343.27,132.93 L1345.75,131.57 L1348.23,130.23 L1350.71,128.91 L1353.19,127.62 L1355.67,126.35 L1358.15,125.09
|
||||
L1360.63,123.87 L1363.11,122.66 L1365.59,121.47 L1368.07,120.31 L1370.55,119.17 L1373.03,118.05 L1375.51,116.96 L1377.99,115.88
|
||||
L1380.47,114.83 L1382.95,113.80 L1385.43,112.79 L1387.91,111.80 L1390.39,110.83 L1392.87,109.88 L1395.35,108.95 L1397.83,108.04
|
||||
L1400.31,107.16 L1402.79,106.29 L1405.27,105.44 L1407.75,104.61 L1410.23,103.80 L1412.71,103.01 L1415.19,102.23 L1417.67,101.48
|
||||
L1420.15,100.74 L1422.63,100.02 L1425.11,99.32 L1427.59,98.64 L1430.07,97.97 L1432.55,97.32 L1435.03,96.69 L1437.51,96.07
|
||||
L1439.99,95.47 L1442.47,94.89 L1444.95,94.32 L1447.43,93.77 L1449.91,93.23 L1452.39,92.71 L1454.87,92.21 L1457.35,91.71
|
||||
L1459.83,91.24 L1462.31,90.78 L1464.79,90.33 L1467.27,89.89 L1469.75,89.47 L1472.23,89.06 L1474.71,88.67 L1477.19,88.29
|
||||
L1479.67,87.92 L1482.15,87.57 L1484.63,87.22 L1487.11,86.89 L1489.59,86.57 L1492.07,86.27 L1494.55,85.97 L1497.03,85.69
|
||||
L1499.51,85.41 L1501.99,85.15 L1504.47,84.90 L1506.95,84.66 L1509.43,84.43 L1511.91,84.21 L1514.39,83.99 L1516.87,83.79
|
||||
L1519.35,83.60 L1521.83,83.42 L1524.31,83.24 L1526.79,83.08 L1529.27,82.92 L1531.75,82.77 L1534.23,82.63 L1536.71,82.49
|
||||
L1539.19,82.37 L1541.67,82.25 L1544.15,82.14 L1546.63,82.03 L1549.11,81.94 L1551.59,81.84 L1554.07,81.76 L1556.55,81.68
|
||||
L1559.03,81.61 L1561.51,81.54 L1563.99,81.48 L1566.47,81.42 L1568.95,81.37 L1571.43,81.32 L1573.91,81.28 L1576.39,81.24
|
||||
L1578.87,81.20 L1581.35,81.17 L1583.83,81.14 L1586.31,81.12 L1588.79,81.10 L1591.27,81.08 L1593.75,81.06 L1596.23,81.05
|
||||
L1598.71,81.04 L1601.19,81.03 L1603.67,81.02 L1606.15,81.02 L1608.63,81.02 L1611.11,81.01 L1613.59,81.01 L1616.07,81.01
|
||||
L1618.55,81.01 L1621.03,81.01 L1621.86,81.01 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_2a" ><title>gnuplot_plot_2a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 114, 178)' d='M249.59,961.21 L252.07,961.21 L254.55,961.21 L257.03,961.21 L259.51,961.21 L261.99,961.21 L264.47,961.20 L266.95,961.20
|
||||
L269.43,961.19 L271.91,961.18 L274.39,961.17 L276.87,961.16 L279.35,961.15 L281.83,961.13 L284.31,961.11 L286.79,961.09
|
||||
L289.27,961.06 L291.75,961.03 L294.23,961.00 L296.71,960.96 L299.19,960.92 L301.67,960.87 L304.15,960.82 L306.63,960.76
|
||||
L309.11,960.70 L311.59,960.64 L314.07,960.57 L316.55,960.49 L319.03,960.40 L321.51,960.32 L323.99,960.22 L326.47,960.12
|
||||
L328.95,960.01 L331.43,959.89 L333.91,959.77 L336.39,959.64 L338.87,959.50 L341.35,959.35 L343.83,959.20 L346.31,959.03
|
||||
L348.79,958.86 L351.27,958.68 L353.75,958.49 L356.23,958.29 L358.71,958.09 L361.19,957.87 L363.67,957.64 L366.15,957.40
|
||||
L368.63,957.15 L371.11,956.90 L373.59,956.63 L376.07,956.35 L378.55,956.05 L381.03,955.75 L383.51,955.44 L385.99,955.11
|
||||
L388.47,954.77 L390.95,954.42 L393.43,954.05 L395.91,953.68 L398.39,953.29 L400.87,952.89 L403.35,952.47 L405.83,952.04
|
||||
L408.31,951.60 L410.79,951.14 L413.27,950.67 L415.75,950.18 L418.23,949.68 L420.71,949.16 L423.19,948.63 L425.67,948.08
|
||||
L428.15,947.52 L430.63,946.94 L433.11,946.35 L435.59,945.74 L438.07,945.11 L440.55,944.47 L443.03,943.81 L445.51,943.13
|
||||
L447.99,942.43 L450.47,941.72 L452.95,940.99 L455.43,940.24 L457.91,939.47 L460.39,938.69 L462.87,937.88 L465.35,937.06
|
||||
L467.83,936.22 L470.31,935.36 L472.79,934.47 L475.27,933.57 L477.75,932.65 L480.23,931.71 L482.71,930.75 L485.19,929.77
|
||||
L487.67,928.76 L490.15,927.74 L492.63,926.69 L495.11,925.62 L497.59,924.54 L500.07,923.42 L502.55,922.29 L505.03,921.14
|
||||
L507.51,919.96 L509.99,918.76 L512.47,917.54 L514.95,916.29 L517.43,915.03 L519.91,913.74 L522.39,912.43 L524.87,911.10
|
||||
L527.35,909.75 L529.83,908.37 L532.31,906.98 L534.79,905.56 L537.27,904.11 L539.75,902.65 L542.23,901.17 L544.71,899.66
|
||||
L547.19,898.13 L549.67,896.58 L552.15,895.00 L554.63,893.41 L557.11,891.79 L559.59,890.16 L562.07,888.50 L564.55,886.82
|
||||
L567.03,885.12 L569.51,883.40 L571.99,881.66 L574.47,879.90 L576.95,878.12 L579.43,876.33 L581.91,874.51 L584.39,872.67
|
||||
L586.87,870.82 L589.35,868.94 L591.83,867.05 L594.31,865.14 L596.79,863.21 L599.27,861.27 L601.75,859.31 L604.23,857.33
|
||||
L606.71,855.33 L609.19,853.32 L611.67,851.29 L614.15,849.24 L616.63,847.18 L619.11,845.10 L621.59,843.01 L624.07,840.90
|
||||
L626.55,838.77 L629.03,836.63 L631.51,834.48 L633.99,832.31 L636.47,830.13 L638.95,827.93 L641.43,825.72 L643.91,823.50
|
||||
L646.39,821.26 L648.87,819.01 L651.35,816.74 L653.83,814.47 L656.31,812.18 L658.79,809.88 L661.27,807.56 L663.75,805.24
|
||||
L666.23,802.90 L668.71,800.55 L671.19,798.19 L673.67,795.82 L676.15,793.44 L678.63,791.04 L681.11,788.64 L683.59,786.23
|
||||
L686.07,783.81 L688.55,781.37 L691.03,778.93 L693.51,776.48 L695.99,774.02 L698.47,771.55 L700.95,769.07 L703.43,766.59
|
||||
L705.91,764.09 L708.39,761.59 L710.87,759.08 L713.35,756.57 L715.83,754.04 L718.31,751.51 L720.79,748.97 L723.27,746.43
|
||||
L725.75,743.88 L728.23,741.32 L730.71,738.76 L733.19,736.19 L735.67,733.61 L738.15,731.03 L740.63,728.45 L743.11,725.86
|
||||
L745.59,723.26 L748.07,720.66 L750.55,718.06 L753.03,715.45 L755.51,712.84 L757.99,710.23 L760.47,707.61 L762.95,704.99
|
||||
L765.43,702.37 L767.91,699.74 L770.39,697.11 L772.87,694.48 L775.35,691.85 L777.83,689.22 L780.31,686.58 L782.79,683.94
|
||||
L785.27,681.30 L787.75,678.66 L790.23,676.02 L792.71,673.38 L795.19,670.74 L797.67,668.10 L800.15,665.46 L802.63,662.82
|
||||
L805.11,660.18 L807.59,657.54 L810.07,654.90 L812.55,652.26 L815.03,649.62 L817.51,646.98 L819.99,644.34 L822.47,641.70
|
||||
L824.95,639.06 L827.43,636.42 L829.91,633.78 L832.39,631.13 L834.87,628.49 L837.35,625.85 L839.83,623.21 L842.31,620.57
|
||||
L844.79,617.93 L847.27,615.29 L849.75,612.65 L852.23,610.01 L854.71,607.37 L857.19,604.73 L859.67,602.09 L862.15,599.45
|
||||
L864.63,596.81 L867.11,594.17 L869.59,591.53 L872.07,588.89 L874.55,586.24 L877.03,583.60 L879.51,580.96 L881.99,578.32
|
||||
L884.47,575.68 L886.95,573.04 L889.43,570.40 L891.91,567.76 L894.39,565.12 L896.87,562.48 L899.35,559.84 L901.83,557.20
|
||||
L904.31,554.56 L906.79,551.92 L909.27,549.28 L911.75,546.64 L914.23,544.00 L916.71,541.35 L919.19,538.71 L921.67,536.07
|
||||
L924.15,533.43 L926.63,530.79 L929.11,528.15 L931.59,525.51 L934.07,522.87 L936.55,520.23 L939.03,517.59 L941.51,514.95
|
||||
L943.99,512.31 L946.47,509.67 L948.95,507.03 L951.43,504.39 L953.91,501.75 L956.39,499.10 L958.87,496.46 L961.35,493.82
|
||||
L963.83,491.18 L966.31,488.54 L968.79,485.90 L971.27,483.26 L973.75,480.62 L976.23,477.98 L978.71,475.34 L981.19,472.70
|
||||
L983.67,470.06 L986.15,467.42 L988.63,464.78 L991.11,462.14 L993.59,459.50 L996.07,456.86 L998.55,454.21 L1001.03,451.57
|
||||
L1003.51,448.93 L1005.99,446.29 L1008.47,443.65 L1010.95,441.01 L1013.43,438.37 L1015.91,435.73 L1018.39,433.09 L1020.87,430.45
|
||||
L1023.35,427.81 L1025.83,425.17 L1028.31,422.53 L1030.79,419.89 L1033.27,417.25 L1035.75,414.61 L1038.23,411.97 L1040.71,409.32
|
||||
L1043.19,406.68 L1045.67,404.04 L1048.15,401.40 L1050.63,398.76 L1053.11,396.12 L1055.59,393.48 L1058.07,390.84 L1060.55,388.20
|
||||
L1063.03,385.56 L1065.51,382.92 L1067.99,380.28 L1070.47,377.64 L1072.95,375.00 L1075.43,372.36 L1077.91,369.72 L1080.39,367.08
|
||||
L1082.87,364.44 L1085.35,361.80 L1087.83,359.17 L1090.31,356.54 L1092.79,353.91 L1095.27,351.28 L1097.75,348.65 L1100.23,346.03
|
||||
L1102.71,343.40 L1105.19,340.79 L1107.67,338.17 L1110.15,335.56 L1112.63,332.95 L1115.11,330.35 L1117.59,327.75 L1120.07,325.15
|
||||
L1122.55,322.56 L1125.03,319.98 L1127.51,317.39 L1129.99,314.82 L1132.47,312.25 L1134.95,309.68 L1137.43,307.12 L1139.91,304.57
|
||||
L1142.39,302.02 L1144.87,299.48 L1147.35,296.95 L1149.83,294.42 L1152.31,291.91 L1154.79,289.39 L1157.27,286.89 L1159.75,284.39
|
||||
L1162.23,281.91 L1164.71,279.43 L1167.19,276.95 L1169.67,274.49 L1172.15,272.04 L1174.63,269.59 L1177.11,267.16 L1179.59,264.73
|
||||
L1182.07,262.32 L1184.55,259.91 L1187.03,257.52 L1189.51,255.13 L1191.99,252.76 L1194.47,250.40 L1196.95,248.04 L1199.43,245.70
|
||||
L1201.91,243.38 L1204.39,241.06 L1206.87,238.75 L1209.35,236.46 L1211.83,234.18 L1214.31,231.91 L1216.79,229.66 L1219.27,227.42
|
||||
L1221.75,225.19 L1224.23,222.97 L1226.71,220.77 L1229.19,218.59 L1231.67,216.42 L1234.15,214.26 L1236.63,212.11 L1239.11,209.99
|
||||
L1241.59,207.87 L1244.07,205.77 L1246.55,203.69 L1249.03,201.63 L1251.51,199.58 L1253.99,197.54 L1256.47,195.52 L1258.95,193.52
|
||||
L1261.43,191.54 L1263.91,189.57 L1266.39,187.62 L1268.87,185.69 L1271.35,183.77 L1273.83,181.88 L1276.31,180.00 L1278.79,178.14
|
||||
L1281.27,176.30 L1283.75,174.48 L1286.23,172.67 L1288.71,170.89 L1291.19,169.12 L1293.67,167.38 L1296.15,165.65 L1298.63,163.95
|
||||
L1301.11,162.26 L1303.59,160.60 L1306.07,158.96 L1308.55,157.34 L1311.03,155.74 L1313.51,154.16 L1315.99,152.60 L1318.47,151.07
|
||||
L1320.95,149.55 L1323.43,148.06 L1325.91,146.59 L1328.39,145.14 L1330.87,143.72 L1333.35,142.32 L1335.83,140.93 L1338.31,139.58
|
||||
L1340.79,138.24 L1343.27,136.92 L1345.75,135.63 L1348.23,134.36 L1350.71,133.11 L1353.19,131.88 L1355.67,130.68 L1358.15,129.49
|
||||
L1360.63,128.33 L1363.11,127.18 L1365.59,126.06 L1368.07,124.96 L1370.55,123.87 L1373.03,122.81 L1375.51,121.77 L1377.99,120.75
|
||||
L1380.47,119.74 L1382.95,118.76 L1385.43,117.79 L1387.91,116.84 L1390.39,115.91 L1392.87,115.00 L1395.35,114.11 L1397.83,113.23
|
||||
L1400.31,112.37 L1402.79,111.53 L1405.27,110.71 L1407.75,109.90 L1410.23,109.11 L1412.71,108.33 L1415.19,107.57 L1417.67,106.83
|
||||
L1420.15,106.10 L1422.63,105.39 L1425.11,104.70 L1427.59,104.01 L1430.07,103.35 L1432.55,102.70 L1435.03,102.06 L1437.51,101.43
|
||||
L1439.99,100.83 L1442.47,100.23 L1444.95,99.65 L1447.43,99.08 L1449.91,98.52 L1452.39,97.98 L1454.87,97.45 L1457.35,96.93
|
||||
L1459.83,96.42 L1462.31,95.93 L1464.79,95.45 L1467.27,94.98 L1469.75,94.52 L1472.23,94.07 L1474.71,93.63 L1477.19,93.20
|
||||
L1479.67,92.79 L1482.15,92.38 L1484.63,91.98 L1487.11,91.60 L1489.59,91.22 L1492.07,90.85 L1494.55,90.49 L1497.03,90.14
|
||||
L1499.51,89.80 L1501.99,89.47 L1504.47,89.14 L1506.95,88.83 L1509.43,88.52 L1511.91,88.22 L1514.39,87.92 L1516.87,87.64
|
||||
L1519.35,87.36 L1521.83,87.08 L1524.31,86.81 L1526.79,86.55 L1529.27,86.30 L1531.75,86.05 L1534.23,85.81 L1536.71,85.57
|
||||
L1539.19,85.33 L1541.67,85.11 L1544.15,84.88 L1546.63,84.66 L1549.11,84.45 L1551.59,84.24 L1554.07,84.03 L1556.55,83.83
|
||||
L1559.03,83.63 L1561.51,83.43 L1563.99,83.24 L1566.47,83.05 L1568.95,82.86 L1571.43,82.67 L1573.91,82.49 L1576.39,82.30
|
||||
L1578.87,82.12 L1581.35,81.94 L1583.83,81.76 L1586.31,81.59 L1588.79,81.41 L1591.27,81.23 L1593.75,81.06 L1594.41,81.01
|
||||
'/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_3a" ><title>gnuplot_plot_3a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 158, 96)' d='M249.59,961.21 L252.07,961.03 L254.55,960.86 L257.03,960.68 L259.51,960.50 L261.99,960.33 L264.47,960.15 L266.95,959.97
|
||||
L269.43,959.78 L271.91,959.60 L274.39,959.41 L276.87,959.22 L279.35,959.03 L281.83,958.84 L284.31,958.64 L286.79,958.45
|
||||
L289.27,958.24 L291.75,958.04 L294.23,957.83 L296.71,957.61 L299.19,957.40 L301.67,957.17 L304.15,956.95 L306.63,956.71
|
||||
L309.11,956.48 L311.59,956.24 L314.07,955.99 L316.55,955.74 L319.03,955.48 L321.51,955.21 L323.99,954.94 L326.47,954.66
|
||||
L328.95,954.37 L331.43,954.08 L333.91,953.78 L336.39,953.48 L338.87,953.16 L341.35,952.84 L343.83,952.51 L346.31,952.17
|
||||
L348.79,951.82 L351.27,951.46 L353.75,951.10 L356.23,950.72 L358.71,950.34 L361.19,949.95 L363.67,949.54 L366.15,949.13
|
||||
L368.63,948.70 L371.11,948.27 L373.59,947.82 L376.07,947.37 L378.55,946.90 L381.03,946.42 L383.51,945.93 L385.99,945.43
|
||||
L388.47,944.91 L390.95,944.38 L393.43,943.84 L395.91,943.29 L398.39,942.73 L400.87,942.15 L403.35,941.55 L405.83,940.95
|
||||
L408.31,940.33 L410.79,939.70 L413.27,939.05 L415.75,938.38 L418.23,937.71 L420.71,937.02 L423.19,936.31 L425.67,935.58
|
||||
L428.15,934.85 L430.63,934.09 L433.11,933.32 L435.59,932.53 L438.07,931.73 L440.55,930.91 L443.03,930.07 L445.51,929.22
|
||||
L447.99,928.35 L450.47,927.46 L452.95,926.55 L455.43,925.63 L457.91,924.69 L460.39,923.72 L462.87,922.74 L465.35,921.74
|
||||
L467.83,920.73 L470.31,919.69 L472.79,918.63 L475.27,917.55 L477.75,916.46 L480.23,915.34 L482.71,914.20 L485.19,913.04
|
||||
L487.67,911.86 L490.15,910.66 L492.63,909.44 L495.11,908.20 L497.59,906.93 L500.07,905.64 L502.55,904.33 L505.03,903.00
|
||||
L507.51,901.65 L509.99,900.27 L512.47,898.88 L514.95,897.46 L517.43,896.02 L519.91,894.55 L522.39,893.07 L524.87,891.56
|
||||
L527.35,890.03 L529.83,888.48 L532.31,886.91 L534.79,885.31 L537.27,883.70 L539.75,882.06 L542.23,880.40 L544.71,878.72
|
||||
L547.19,877.02 L549.67,875.30 L552.15,873.56 L554.63,871.80 L557.11,870.03 L559.59,868.23 L562.07,866.41 L564.55,864.57
|
||||
L567.03,862.72 L569.51,860.85 L571.99,858.95 L574.47,857.04 L576.95,855.12 L579.43,853.17 L581.91,851.21 L584.39,849.23
|
||||
L586.87,847.23 L589.35,845.22 L591.83,843.19 L594.31,841.14 L596.79,839.08 L599.27,837.00 L601.75,834.91 L604.23,832.80
|
||||
L606.71,830.68 L609.19,828.54 L611.67,826.38 L614.15,824.21 L616.63,822.03 L619.11,819.83 L621.59,817.62 L624.07,815.40
|
||||
L626.55,813.16 L629.03,810.91 L631.51,808.65 L633.99,806.37 L636.47,804.08 L638.95,801.78 L641.43,799.46 L643.91,797.14
|
||||
L646.39,794.80 L648.87,792.45 L651.35,790.09 L653.83,787.72 L656.31,785.34 L658.79,782.95 L661.27,780.54 L663.75,778.13
|
||||
L666.23,775.71 L668.71,773.28 L671.19,770.83 L673.67,768.38 L676.15,765.92 L678.63,763.45 L681.11,760.98 L683.59,758.49
|
||||
L686.07,756.00 L688.55,753.49 L691.03,750.99 L693.51,748.47 L695.99,745.94 L698.47,743.41 L700.95,740.87 L703.43,738.33
|
||||
L705.91,735.78 L708.39,733.22 L710.87,730.66 L713.35,728.09 L715.83,725.51 L718.31,722.93 L720.79,720.35 L723.27,717.76
|
||||
L725.75,715.16 L728.23,712.57 L730.71,709.96 L733.19,707.36 L735.67,704.75 L738.15,702.13 L740.63,699.51 L743.11,696.89
|
||||
L745.59,694.27 L748.07,691.64 L750.55,689.02 L753.03,686.38 L755.51,683.75 L757.99,681.12 L760.47,678.48 L762.95,675.84
|
||||
L765.43,673.21 L767.91,670.57 L770.39,667.93 L772.87,665.29 L775.35,662.65 L777.83,660.01 L780.31,657.36 L782.79,654.72
|
||||
L785.27,652.08 L787.75,649.44 L790.23,646.80 L792.71,644.16 L795.19,641.52 L797.67,638.88 L800.15,636.24 L802.63,633.60
|
||||
L805.11,630.96 L807.59,628.32 L810.07,625.68 L812.55,623.04 L815.03,620.40 L817.51,617.76 L819.99,615.12 L822.47,612.47
|
||||
L824.95,609.83 L827.43,607.19 L829.91,604.55 L832.39,601.91 L834.87,599.27 L837.35,596.63 L839.83,593.99 L842.31,591.35
|
||||
L844.79,588.71 L847.27,586.07 L849.75,583.43 L852.23,580.79 L854.71,578.15 L857.19,575.51 L859.67,572.87 L862.15,570.23
|
||||
L864.63,567.58 L867.11,564.94 L869.59,562.30 L872.07,559.66 L874.55,557.02 L877.03,554.38 L879.51,551.74 L881.99,549.10
|
||||
L884.47,546.46 L886.95,543.82 L889.43,541.18 L891.91,538.54 L894.39,535.90 L896.87,533.26 L899.35,530.62 L901.83,527.98
|
||||
L904.31,525.33 L906.79,522.69 L909.27,520.05 L911.75,517.41 L914.23,514.77 L916.71,512.13 L919.19,509.49 L921.67,506.85
|
||||
L924.15,504.21 L926.63,501.57 L929.11,498.93 L931.59,496.29 L934.07,493.65 L936.55,491.01 L939.03,488.37 L941.51,485.73
|
||||
L943.99,483.09 L946.47,480.44 L948.95,477.80 L951.43,475.16 L953.91,472.52 L956.39,469.88 L958.87,467.24 L961.35,464.60
|
||||
L963.83,461.96 L966.31,459.32 L968.79,456.68 L971.27,454.04 L973.75,451.40 L976.23,448.76 L978.71,446.12 L981.19,443.48
|
||||
L983.67,440.84 L986.15,438.20 L988.63,435.55 L991.11,432.91 L993.59,430.27 L996.07,427.63 L998.55,424.99 L1001.03,422.35
|
||||
L1003.51,419.71 L1005.99,417.07 L1008.47,414.43 L1010.95,411.79 L1013.43,409.15 L1015.91,406.51 L1018.39,403.87 L1020.87,401.23
|
||||
L1023.35,398.59 L1025.83,395.95 L1028.31,393.30 L1030.79,390.66 L1033.27,388.02 L1035.75,385.38 L1038.23,382.74 L1040.71,380.10
|
||||
L1043.19,377.46 L1045.67,374.82 L1048.15,372.18 L1050.63,369.54 L1053.11,366.90 L1055.59,364.26 L1058.07,361.62 L1060.55,358.98
|
||||
L1063.03,356.34 L1065.51,353.71 L1067.99,351.07 L1070.47,348.44 L1072.95,345.81 L1075.43,343.18 L1077.91,340.55 L1080.39,337.93
|
||||
L1082.87,335.31 L1085.35,332.69 L1087.83,330.07 L1090.31,327.46 L1092.79,324.85 L1095.27,322.25 L1097.75,319.65 L1100.23,317.05
|
||||
L1102.71,314.46 L1105.19,311.88 L1107.67,309.30 L1110.15,306.72 L1112.63,304.15 L1115.11,301.58 L1117.59,299.03 L1120.07,296.47
|
||||
L1122.55,293.93 L1125.03,291.39 L1127.51,288.85 L1129.99,286.33 L1132.47,283.81 L1134.95,281.30 L1137.43,278.79 L1139.91,276.30
|
||||
L1142.39,273.81 L1144.87,271.33 L1147.35,268.86 L1149.83,266.39 L1152.31,263.94 L1154.79,261.50 L1157.27,259.06 L1159.75,256.64
|
||||
L1162.23,254.22 L1164.71,251.82 L1167.19,249.42 L1169.67,247.04 L1172.15,244.66 L1174.63,242.30 L1177.11,239.95 L1179.59,237.61
|
||||
L1182.07,235.28 L1184.55,232.96 L1187.03,230.66 L1189.51,228.36 L1191.99,226.08 L1194.47,223.82 L1196.95,221.56 L1199.43,219.32
|
||||
L1201.91,217.09 L1204.39,214.88 L1206.87,212.68 L1209.35,210.49 L1211.83,208.32 L1214.31,206.16 L1216.79,204.02 L1219.27,201.89
|
||||
L1221.75,199.77 L1224.23,197.68 L1226.71,195.59 L1229.19,193.53 L1231.67,191.48 L1234.15,189.44 L1236.63,187.43 L1239.11,185.42
|
||||
L1241.59,183.44 L1244.07,181.47 L1246.55,179.52 L1249.03,177.59 L1251.51,175.68 L1253.99,173.78 L1256.47,171.90 L1258.95,170.04
|
||||
L1261.43,168.20 L1263.91,166.38 L1266.39,164.57 L1268.87,162.79 L1271.35,161.03 L1273.83,159.28 L1276.31,157.56 L1278.79,155.85
|
||||
L1281.27,154.17 L1283.75,152.50 L1286.23,150.86 L1288.71,149.24 L1291.19,147.64 L1293.67,146.06 L1296.15,144.50 L1298.63,142.97
|
||||
L1301.11,141.45 L1303.59,139.96 L1306.07,138.49 L1308.55,137.05 L1311.03,135.62 L1313.51,134.22 L1315.99,132.84 L1318.47,131.48
|
||||
L1320.95,130.14 L1323.43,128.83 L1325.91,127.53 L1328.39,126.26 L1330.87,125.01 L1333.35,123.78 L1335.83,122.58 L1338.31,121.40
|
||||
L1340.79,120.24 L1343.27,119.10 L1345.75,117.98 L1348.23,116.88 L1350.71,115.81 L1353.19,114.76 L1355.67,113.73 L1358.15,112.72
|
||||
L1360.63,111.73 L1363.11,110.76 L1365.59,109.82 L1368.07,108.89 L1370.55,107.98 L1373.03,107.10 L1375.51,106.23 L1377.99,105.38
|
||||
L1380.47,104.56 L1382.95,103.75 L1385.43,102.96 L1387.91,102.18 L1390.39,101.43 L1392.87,100.69 L1395.35,99.98 L1397.83,99.28
|
||||
L1400.31,98.59 L1402.79,97.93 L1405.27,97.28 L1407.75,96.65 L1410.23,96.03 L1412.71,95.43 L1415.19,94.85 L1417.67,94.28
|
||||
L1420.15,93.73 L1422.63,93.20 L1425.11,92.68 L1427.59,92.17 L1430.07,91.68 L1432.55,91.21 L1435.03,90.74 L1437.51,90.30
|
||||
L1439.99,89.86 L1442.47,89.44 L1444.95,89.04 L1447.43,88.64 L1449.91,88.26 L1452.39,87.90 L1454.87,87.54 L1457.35,87.20
|
||||
L1459.83,86.87 L1462.31,86.55 L1464.79,86.25 L1467.27,85.95 L1469.75,85.67 L1472.23,85.40 L1474.71,85.13 L1477.19,84.88
|
||||
L1479.67,84.64 L1482.15,84.41 L1484.63,84.19 L1487.11,83.98 L1489.59,83.78 L1492.07,83.59 L1494.55,83.40 L1497.03,83.23
|
||||
L1499.51,83.07 L1501.99,82.91 L1504.47,82.76 L1506.95,82.62 L1509.43,82.49 L1511.91,82.36 L1514.39,82.24 L1516.87,82.13
|
||||
L1519.35,82.03 L1521.83,81.93 L1524.31,81.84 L1526.79,81.75 L1529.27,81.67 L1531.75,81.60 L1534.23,81.53 L1536.71,81.47
|
||||
L1539.19,81.41 L1541.67,81.36 L1544.15,81.32 L1546.63,81.27 L1549.11,81.23 L1551.59,81.20 L1554.07,81.17 L1556.55,81.14
|
||||
L1559.03,81.12 L1561.51,81.10 L1563.99,81.08 L1566.47,81.06 L1568.95,81.05 L1571.43,81.04 L1573.91,81.03 L1576.39,81.02
|
||||
L1578.87,81.02 L1581.35,81.02 L1583.83,81.01 L1586.31,81.01 L1588.79,81.01 L1591.27,81.01 L1593.75,81.01 L1594.41,81.01
|
||||
'/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_4a" ><title>ZeroToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_5a" ><title>ZeroToPositiveVf</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_6a" ><title>PositiveV0ToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g stroke='none' shape-rendering='crispEdges'>
|
||||
<polygon fill = 'white' points = '1534.62,145.12 1724.99,145.12 1724.99,94.51 1534.62,94.51 '/>
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="white" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1534.62,145.12 L1534.62,94.51 L1724.99,94.51 L1724.99,145.12 L1534.62,145.12 Z '/></g>
|
||||
<g id="gnuplot_plot_1a" ><title>gnuplot_plot_1a</title>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 0, 0)" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_2a" ><title>gnuplot_plot_2a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_3a" ><title>gnuplot_plot_3a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_4a" ><title>ZeroToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,106.53)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >ZeroToRest</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(216, 51, 45)' d='M1542.31,102.95 L1586.57,102.95 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_5a" ><title>ZeroToPositiveVf</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,123.40)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >ZeroToPositiveVf</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 114, 178)' d='M1542.31,119.82 L1586.57,119.82 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_6a" ><title>PositiveV0ToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,140.27)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >PositiveV0ToRest</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 158, 96)' d='M1542.31,136.69 L1586.57,136.69 '/></g>
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 158, 96)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="black" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L249.59,961.21 L1737.59,961.21 L1737.59,81.01 L249.59,81.01 Z '/></g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(993.59,47.54)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="17.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" font-weight="bold" >SCurve Position</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 100 KiB |
@ -1,544 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<svg
|
||||
width="1920" height="1080"
|
||||
viewBox="0 0 1920 1080"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
>
|
||||
|
||||
<title>Gnuplot</title>
|
||||
<desc>Produced by GNUPLOT 5.4 patchlevel 2 </desc>
|
||||
|
||||
<g id="gnuplot_canvas">
|
||||
|
||||
<rect x="0" y="0" width="1920" height="1080" fill="none"/>
|
||||
<defs>
|
||||
|
||||
<circle id='gpDot' r='0.5' stroke-width='0.5' stroke='currentColor'/>
|
||||
<path id='gpPt0' stroke-width='0.148' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
|
||||
<path id='gpPt1' stroke-width='0.148' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
|
||||
<path id='gpPt2' stroke-width='0.148' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
|
||||
<rect id='gpPt3' stroke-width='0.148' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
|
||||
<rect id='gpPt4' stroke-width='0.148' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
|
||||
<circle id='gpPt5' stroke-width='0.148' stroke='currentColor' cx='0' cy='0' r='1'/>
|
||||
<use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
|
||||
<path id='gpPt7' stroke-width='0.148' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
|
||||
<use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
|
||||
<use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
|
||||
<use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
|
||||
<use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
|
||||
<use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
|
||||
<path id='gpPt13' stroke-width='0.148' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/>
|
||||
<use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/>
|
||||
<filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
|
||||
<feFlood flood-color='white' flood-opacity='1' result='bgnd'/>
|
||||
<feComposite in='SourceGraphic' in2='bgnd' operator='atop'/>
|
||||
</filter>
|
||||
<filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
|
||||
<feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/>
|
||||
<feComposite in='SourceGraphic' in2='grey' operator='atop'/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g fill="none" color="white" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,961.21 L1737.59,961.21 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,961.21 L259.71,961.21 '/> <g transform="translate(236.99,966.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >0</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,814.51 L1737.59,814.51 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,814.51 L259.71,814.51 '/> <g transform="translate(236.99,819.71)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >0.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,667.81 L1737.59,667.81 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,667.81 L259.71,667.81 '/> <g transform="translate(236.99,673.01)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >1</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,521.11 L1737.59,521.11 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,521.11 L259.71,521.11 '/> <g transform="translate(236.99,526.31)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >1.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,374.41 L1737.59,374.41 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,374.41 L259.71,374.41 '/> <g transform="translate(236.99,379.61)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >2</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,227.71 L1737.59,227.71 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,227.71 L259.71,227.71 '/> <g transform="translate(236.99,232.91)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >2.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,81.01 L1737.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L259.71,81.01 '/> <g transform="translate(236.99,86.21)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="end">
|
||||
<text><tspan font-family="Helvetica" >3</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M249.59,961.21 L249.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,961.21 L249.59,951.09 '/> <g transform="translate(249.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >0</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M497.59,961.21 L497.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M497.59,961.21 L497.59,951.09 '/> <g transform="translate(497.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >0.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M745.59,961.21 L745.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M745.59,961.21 L745.59,951.09 '/> <g transform="translate(745.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >1</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M993.59,961.21 L993.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M993.59,961.21 L993.59,951.09 '/> <g transform="translate(993.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >1.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1241.59,961.21 L1241.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1241.59,961.21 L1241.59,951.09 '/> <g transform="translate(1241.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >2</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1489.59,961.21 L1489.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1489.59,961.21 L1489.59,951.09 '/> <g transform="translate(1489.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >2.5</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="rgb( 0, 0, 0)" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(204, 204, 255)' opacity='0.20' class="gridline" d='M1737.59,961.21 L1737.59,81.01 '/></g>
|
||||
<g fill="none" color="black" stroke="rgb(204, 204, 255)" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1737.59,961.21 L1737.59,951.09 '/> <g transform="translate(1737.59,993.41)" stroke="none" fill="rgb(38,38,38)" font-family="Helvetica" font-size="16.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >3</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L249.59,961.21 L1737.59,961.21 L1737.59,81.01 L249.59,81.01 Z '/></g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(179.81,521.11) rotate(270)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >velocity [m/s]</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(993.59,1032.29)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" >time [s]</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1534.62,145.12 L1534.62,94.51 L1724.99,94.51 L1724.99,145.12 L1534.62,145.12 Z '/></g>
|
||||
<g id="gnuplot_plot_1a" ><title>gnuplot_plot_1a</title>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 0, 0)" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(216, 51, 45)' d='M249.59,961.21 L252.07,961.17 L254.55,961.06 L257.03,960.88 L259.51,960.62 L261.99,960.29 L264.47,959.89 L266.95,959.41
|
||||
L269.43,958.86 L271.91,958.24 L274.39,957.54 L276.87,956.77 L279.35,955.93 L281.83,955.01 L284.31,954.02 L286.79,952.96
|
||||
L289.27,951.82 L291.75,950.61 L294.23,949.33 L296.71,947.97 L299.19,946.54 L301.67,945.04 L304.15,943.46 L306.63,941.81
|
||||
L309.11,940.09 L311.59,938.29 L314.07,936.42 L316.55,934.47 L319.03,932.46 L321.51,930.37 L323.99,928.20 L326.47,925.97
|
||||
L328.95,923.65 L331.43,921.27 L333.91,918.81 L336.39,916.28 L338.87,913.68 L341.35,911.00 L343.83,908.25 L346.31,905.43
|
||||
L348.79,902.53 L351.27,899.56 L353.75,896.52 L356.23,893.40 L358.71,890.21 L361.19,886.94 L363.67,883.61 L366.15,880.19
|
||||
L368.63,876.71 L371.11,873.15 L373.59,869.52 L376.07,865.82 L378.55,862.04 L381.03,858.19 L383.51,854.27 L385.99,850.27
|
||||
L388.47,846.20 L390.95,842.05 L393.43,837.84 L395.91,833.54 L398.39,829.18 L400.87,824.74 L403.35,820.23 L405.83,815.65
|
||||
L408.31,810.99 L410.79,806.26 L413.27,801.45 L415.75,796.58 L418.23,791.62 L420.71,786.60 L423.19,781.50 L425.67,776.33
|
||||
L428.15,771.09 L430.63,765.77 L433.11,760.38 L435.59,754.91 L438.07,749.38 L440.55,743.76 L443.03,738.08 L445.51,732.32
|
||||
L447.99,726.49 L450.47,720.59 L452.95,714.61 L455.43,708.56 L457.91,702.43 L460.39,696.23 L462.87,689.96 L465.35,683.62
|
||||
L467.83,677.20 L470.31,670.71 L472.79,664.14 L475.27,657.50 L477.75,650.79 L480.23,644.01 L482.71,637.15 L485.19,630.22
|
||||
L487.67,623.21 L490.15,616.13 L492.63,608.98 L495.11,601.76 L497.59,594.46 L500.07,587.12 L502.55,579.79 L505.03,572.45
|
||||
L507.51,565.12 L509.99,557.78 L512.47,550.45 L514.95,543.11 L517.43,535.78 L519.91,528.44 L522.39,521.11 L524.87,513.77
|
||||
L527.35,506.44 L529.83,499.10 L532.31,491.77 L534.79,484.43 L537.27,477.10 L539.75,469.76 L542.23,462.43 L544.71,455.09
|
||||
L547.19,447.76 L549.67,440.46 L552.15,433.24 L554.63,426.09 L557.11,419.01 L559.59,412.00 L562.07,405.07 L564.55,398.21
|
||||
L567.03,391.43 L569.51,384.72 L571.99,378.08 L574.47,371.51 L576.95,365.02 L579.43,358.60 L581.91,352.26 L584.39,345.99
|
||||
L586.87,339.79 L589.35,333.66 L591.83,327.61 L594.31,321.63 L596.79,315.73 L599.27,309.90 L601.75,304.14 L604.23,298.46
|
||||
L606.71,292.84 L609.19,287.31 L611.67,281.84 L614.15,276.45 L616.63,271.13 L619.11,265.89 L621.59,260.72 L624.07,255.62
|
||||
L626.55,250.60 L629.03,245.64 L631.51,240.77 L633.99,235.96 L636.47,231.23 L638.95,226.57 L641.43,221.99 L643.91,217.48
|
||||
L646.39,213.04 L648.87,208.68 L651.35,204.38 L653.83,200.17 L656.31,196.02 L658.79,191.95 L661.27,187.95 L663.75,184.03
|
||||
L666.23,180.18 L668.71,176.40 L671.19,172.70 L673.67,169.07 L676.15,165.51 L678.63,162.03 L681.11,158.61 L683.59,155.28
|
||||
L686.07,152.01 L688.55,148.82 L691.03,145.70 L693.51,142.66 L695.99,139.69 L698.47,136.79 L700.95,133.97 L703.43,131.22
|
||||
L705.91,128.54 L708.39,125.94 L710.87,123.41 L713.35,120.95 L715.83,118.57 L718.31,116.25 L720.79,114.02 L723.27,111.85
|
||||
L725.75,109.76 L728.23,107.75 L730.71,105.80 L733.19,103.93 L735.67,102.13 L738.15,100.41 L740.63,98.76 L743.11,97.18
|
||||
L745.59,95.68 L748.07,94.25 L750.55,92.89 L753.03,91.61 L755.51,90.40 L757.99,89.26 L760.47,88.20 L762.95,87.21
|
||||
L765.43,86.29 L767.91,85.45 L770.39,84.68 L772.87,83.98 L775.35,83.36 L777.83,82.81 L780.31,82.33 L782.79,81.93
|
||||
L785.27,81.60 L787.75,81.34 L790.23,81.16 L792.71,81.05 L795.19,81.01 L797.67,81.01 L800.15,81.01 L802.63,81.01
|
||||
L805.11,81.01 L807.59,81.01 L810.07,81.01 L812.55,81.01 L815.03,81.01 L817.51,81.01 L819.99,81.01 L822.47,81.01
|
||||
L824.95,81.01 L827.43,81.01 L829.91,81.01 L832.39,81.01 L834.87,81.01 L837.35,81.01 L839.83,81.01 L842.31,81.01
|
||||
L844.79,81.01 L847.27,81.01 L849.75,81.01 L852.23,81.01 L854.71,81.01 L857.19,81.01 L859.67,81.01 L862.15,81.01
|
||||
L864.63,81.01 L867.11,81.01 L869.59,81.01 L872.07,81.01 L874.55,81.01 L877.03,81.01 L879.51,81.01 L881.99,81.01
|
||||
L884.47,81.01 L886.95,81.01 L889.43,81.01 L891.91,81.01 L894.39,81.01 L896.87,81.01 L899.35,81.01 L901.83,81.01
|
||||
L904.31,81.01 L906.79,81.01 L909.27,81.01 L911.75,81.01 L914.23,81.01 L916.71,81.01 L919.19,81.01 L921.67,81.01
|
||||
L924.15,81.01 L926.63,81.01 L929.11,81.01 L931.59,81.01 L934.07,81.01 L936.55,81.01 L939.03,81.01 L941.51,81.01
|
||||
L943.99,81.01 L946.47,81.01 L948.95,81.01 L951.43,81.01 L953.91,81.01 L956.39,81.01 L958.87,81.01 L961.35,81.01
|
||||
L963.83,81.01 L966.31,81.01 L968.79,81.01 L971.27,81.01 L973.75,81.01 L976.23,81.01 L978.71,81.01 L981.19,81.01
|
||||
L983.67,81.01 L986.15,81.01 L988.63,81.01 L991.11,81.01 L993.59,81.01 L996.07,81.01 L998.55,81.01 L1001.03,81.01
|
||||
L1003.51,81.01 L1005.99,81.01 L1008.47,81.01 L1010.95,81.01 L1013.43,81.01 L1015.91,81.01 L1018.39,81.01 L1020.87,81.01
|
||||
L1023.35,81.01 L1025.83,81.01 L1028.31,81.01 L1030.79,81.01 L1033.27,81.01 L1035.75,81.01 L1038.23,81.01 L1040.71,81.01
|
||||
L1043.19,81.01 L1045.67,81.01 L1048.15,81.01 L1050.63,81.01 L1053.11,81.01 L1055.59,81.01 L1058.07,81.01 L1060.55,81.01
|
||||
L1063.03,81.01 L1065.51,81.01 L1067.99,81.01 L1070.47,81.01 L1072.95,81.01 L1075.43,81.01 L1077.91,81.03 L1080.39,81.11
|
||||
L1082.87,81.27 L1085.35,81.50 L1087.83,81.81 L1090.31,82.19 L1092.79,82.64 L1095.27,83.17 L1097.75,83.76 L1100.23,84.44
|
||||
L1102.71,85.18 L1105.19,86.00 L1107.67,86.89 L1110.15,87.86 L1112.63,88.90 L1115.11,90.01 L1117.59,91.20 L1120.07,92.46
|
||||
L1122.55,93.79 L1125.03,95.20 L1127.51,96.67 L1129.99,98.23 L1132.47,99.85 L1134.95,101.55 L1137.43,103.32 L1139.91,105.17
|
||||
L1142.39,107.09 L1144.87,109.08 L1147.35,111.15 L1149.83,113.29 L1152.31,115.50 L1154.79,117.79 L1157.27,120.15 L1159.75,122.58
|
||||
L1162.23,125.09 L1164.71,127.66 L1167.19,130.32 L1169.67,133.04 L1172.15,135.84 L1174.63,138.72 L1177.11,141.66 L1179.59,144.68
|
||||
L1182.07,147.77 L1184.55,150.94 L1187.03,154.18 L1189.51,157.49 L1191.99,160.88 L1194.47,164.34 L1196.95,167.87 L1199.43,171.48
|
||||
L1201.91,175.16 L1204.39,178.91 L1206.87,182.74 L1209.35,186.64 L1211.83,190.61 L1214.31,194.66 L1216.79,198.78 L1219.27,202.97
|
||||
L1221.75,207.24 L1224.23,211.58 L1226.71,215.99 L1229.19,220.48 L1231.67,225.04 L1234.15,229.67 L1236.63,234.38 L1239.11,239.16
|
||||
L1241.59,244.01 L1244.07,248.94 L1246.55,253.94 L1249.03,259.01 L1251.51,264.16 L1253.99,269.38 L1256.47,274.67 L1258.95,280.04
|
||||
L1261.43,285.48 L1263.91,290.99 L1266.39,296.58 L1268.87,302.24 L1271.35,307.97 L1273.83,313.78 L1276.31,319.66 L1278.79,325.61
|
||||
L1281.27,331.64 L1283.75,337.74 L1286.23,343.91 L1288.71,350.16 L1291.19,356.48 L1293.67,362.87 L1296.15,369.34 L1298.63,375.88
|
||||
L1301.11,382.49 L1303.59,389.18 L1306.07,395.94 L1308.55,402.78 L1311.03,409.68 L1313.51,416.66 L1315.99,423.72 L1318.47,430.84
|
||||
L1320.95,438.05 L1323.43,445.32 L1325.91,452.65 L1328.39,459.99 L1330.87,467.32 L1333.35,474.66 L1335.83,481.99 L1338.31,489.33
|
||||
L1340.79,496.66 L1343.27,504.00 L1345.75,511.33 L1348.23,518.67 L1350.71,526.00 L1353.19,533.34 L1355.67,540.67 L1358.15,548.01
|
||||
L1360.63,555.34 L1363.11,562.68 L1365.59,570.01 L1368.07,577.35 L1370.55,584.68 L1373.03,592.02 L1375.51,599.33 L1377.99,606.58
|
||||
L1380.47,613.76 L1382.95,620.86 L1385.43,627.89 L1387.91,634.85 L1390.39,641.73 L1392.87,648.54 L1395.35,655.28 L1397.83,661.94
|
||||
L1400.31,668.53 L1402.79,675.04 L1405.27,681.49 L1407.75,687.85 L1410.23,694.15 L1412.71,700.37 L1415.19,706.52 L1417.67,712.60
|
||||
L1420.15,718.60 L1422.63,724.53 L1425.11,730.39 L1427.59,736.17 L1430.07,741.88 L1432.55,747.51 L1435.03,753.08 L1437.51,758.56
|
||||
L1439.99,763.98 L1442.47,769.32 L1444.95,774.59 L1447.43,779.79 L1449.91,784.91 L1452.39,789.96 L1454.87,794.93 L1457.35,799.84
|
||||
L1459.83,804.66 L1462.31,809.42 L1464.79,814.10 L1467.27,818.71 L1469.75,823.25 L1472.23,827.71 L1474.71,832.10 L1477.19,836.41
|
||||
L1479.67,840.66 L1482.15,844.82 L1484.63,848.92 L1487.11,852.94 L1489.59,856.89 L1492.07,860.77 L1494.55,864.57 L1497.03,868.30
|
||||
L1499.51,871.95 L1501.99,875.53 L1504.47,879.04 L1506.95,882.48 L1509.43,885.84 L1511.91,889.13 L1514.39,892.34 L1516.87,895.48
|
||||
L1519.35,898.55 L1521.83,901.55 L1524.31,904.47 L1526.79,907.32 L1529.27,910.09 L1531.75,912.79 L1534.23,915.42 L1536.71,917.98
|
||||
L1539.19,920.46 L1541.67,922.87 L1544.15,925.20 L1546.63,927.46 L1549.11,929.65 L1551.59,931.77 L1554.07,933.81 L1556.55,935.78
|
||||
L1559.03,937.67 L1561.51,939.49 L1563.99,941.24 L1566.47,942.92 L1568.95,944.52 L1571.43,946.05 L1573.91,947.50 L1576.39,948.88
|
||||
L1578.87,950.19 L1581.35,951.43 L1583.83,952.59 L1586.31,953.68 L1588.79,954.69 L1591.27,955.63 L1593.75,956.50 L1596.23,957.29
|
||||
L1598.71,958.02 L1601.19,958.66 L1603.67,959.24 L1606.15,959.74 L1608.63,960.17 L1611.11,960.52 L1613.59,960.80 L1616.07,961.01
|
||||
L1618.55,961.14 L1621.03,961.21 L1621.86,961.21 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_2a" ><title>gnuplot_plot_2a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 114, 178)' d='M249.59,961.21 L252.07,961.17 L254.55,961.06 L257.03,960.88 L259.51,960.62 L261.99,960.29 L264.47,959.89 L266.95,959.41
|
||||
L269.43,958.86 L271.91,958.24 L274.39,957.54 L276.87,956.77 L279.35,955.93 L281.83,955.01 L284.31,954.02 L286.79,952.96
|
||||
L289.27,951.82 L291.75,950.61 L294.23,949.33 L296.71,947.97 L299.19,946.54 L301.67,945.04 L304.15,943.46 L306.63,941.81
|
||||
L309.11,940.09 L311.59,938.29 L314.07,936.42 L316.55,934.47 L319.03,932.46 L321.51,930.37 L323.99,928.20 L326.47,925.97
|
||||
L328.95,923.65 L331.43,921.27 L333.91,918.81 L336.39,916.28 L338.87,913.68 L341.35,911.00 L343.83,908.25 L346.31,905.43
|
||||
L348.79,902.53 L351.27,899.56 L353.75,896.52 L356.23,893.40 L358.71,890.21 L361.19,886.94 L363.67,883.61 L366.15,880.19
|
||||
L368.63,876.71 L371.11,873.15 L373.59,869.52 L376.07,865.82 L378.55,862.04 L381.03,858.19 L383.51,854.27 L385.99,850.27
|
||||
L388.47,846.20 L390.95,842.05 L393.43,837.84 L395.91,833.54 L398.39,829.18 L400.87,824.74 L403.35,820.23 L405.83,815.65
|
||||
L408.31,810.99 L410.79,806.26 L413.27,801.45 L415.75,796.58 L418.23,791.62 L420.71,786.60 L423.19,781.50 L425.67,776.33
|
||||
L428.15,771.09 L430.63,765.77 L433.11,760.38 L435.59,754.91 L438.07,749.38 L440.55,743.76 L443.03,738.08 L445.51,732.32
|
||||
L447.99,726.49 L450.47,720.59 L452.95,714.61 L455.43,708.56 L457.91,702.43 L460.39,696.23 L462.87,689.96 L465.35,683.62
|
||||
L467.83,677.20 L470.31,670.71 L472.79,664.14 L475.27,657.50 L477.75,650.79 L480.23,644.01 L482.71,637.15 L485.19,630.22
|
||||
L487.67,623.21 L490.15,616.13 L492.63,608.98 L495.11,601.76 L497.59,594.46 L500.07,587.12 L502.55,579.79 L505.03,572.45
|
||||
L507.51,565.12 L509.99,557.78 L512.47,550.45 L514.95,543.11 L517.43,535.78 L519.91,528.44 L522.39,521.11 L524.87,513.77
|
||||
L527.35,506.44 L529.83,499.10 L532.31,491.77 L534.79,484.43 L537.27,477.10 L539.75,469.76 L542.23,462.43 L544.71,455.09
|
||||
L547.19,447.76 L549.67,440.46 L552.15,433.24 L554.63,426.09 L557.11,419.01 L559.59,412.00 L562.07,405.07 L564.55,398.21
|
||||
L567.03,391.43 L569.51,384.72 L571.99,378.08 L574.47,371.51 L576.95,365.02 L579.43,358.60 L581.91,352.26 L584.39,345.99
|
||||
L586.87,339.79 L589.35,333.66 L591.83,327.61 L594.31,321.63 L596.79,315.73 L599.27,309.90 L601.75,304.14 L604.23,298.46
|
||||
L606.71,292.84 L609.19,287.31 L611.67,281.84 L614.15,276.45 L616.63,271.13 L619.11,265.89 L621.59,260.72 L624.07,255.62
|
||||
L626.55,250.60 L629.03,245.64 L631.51,240.77 L633.99,235.96 L636.47,231.23 L638.95,226.57 L641.43,221.99 L643.91,217.48
|
||||
L646.39,213.04 L648.87,208.68 L651.35,204.38 L653.83,200.17 L656.31,196.02 L658.79,191.95 L661.27,187.95 L663.75,184.03
|
||||
L666.23,180.18 L668.71,176.40 L671.19,172.70 L673.67,169.07 L676.15,165.51 L678.63,162.03 L681.11,158.61 L683.59,155.28
|
||||
L686.07,152.01 L688.55,148.82 L691.03,145.70 L693.51,142.66 L695.99,139.69 L698.47,136.79 L700.95,133.97 L703.43,131.22
|
||||
L705.91,128.54 L708.39,125.94 L710.87,123.41 L713.35,120.95 L715.83,118.57 L718.31,116.25 L720.79,114.02 L723.27,111.85
|
||||
L725.75,109.76 L728.23,107.75 L730.71,105.80 L733.19,103.93 L735.67,102.13 L738.15,100.41 L740.63,98.76 L743.11,97.18
|
||||
L745.59,95.68 L748.07,94.25 L750.55,92.89 L753.03,91.61 L755.51,90.40 L757.99,89.26 L760.47,88.20 L762.95,87.21
|
||||
L765.43,86.29 L767.91,85.45 L770.39,84.68 L772.87,83.98 L775.35,83.36 L777.83,82.81 L780.31,82.33 L782.79,81.93
|
||||
L785.27,81.60 L787.75,81.34 L790.23,81.16 L792.71,81.05 L795.19,81.01 L797.67,81.01 L800.15,81.01 L802.63,81.01
|
||||
L805.11,81.01 L807.59,81.01 L810.07,81.01 L812.55,81.01 L815.03,81.01 L817.51,81.01 L819.99,81.01 L822.47,81.01
|
||||
L824.95,81.01 L827.43,81.01 L829.91,81.01 L832.39,81.01 L834.87,81.01 L837.35,81.01 L839.83,81.01 L842.31,81.01
|
||||
L844.79,81.01 L847.27,81.01 L849.75,81.01 L852.23,81.01 L854.71,81.01 L857.19,81.01 L859.67,81.01 L862.15,81.01
|
||||
L864.63,81.01 L867.11,81.01 L869.59,81.01 L872.07,81.01 L874.55,81.01 L877.03,81.01 L879.51,81.01 L881.99,81.01
|
||||
L884.47,81.01 L886.95,81.01 L889.43,81.01 L891.91,81.01 L894.39,81.01 L896.87,81.01 L899.35,81.01 L901.83,81.01
|
||||
L904.31,81.01 L906.79,81.01 L909.27,81.01 L911.75,81.01 L914.23,81.01 L916.71,81.01 L919.19,81.01 L921.67,81.01
|
||||
L924.15,81.01 L926.63,81.01 L929.11,81.01 L931.59,81.01 L934.07,81.01 L936.55,81.01 L939.03,81.01 L941.51,81.01
|
||||
L943.99,81.01 L946.47,81.01 L948.95,81.01 L951.43,81.01 L953.91,81.01 L956.39,81.01 L958.87,81.01 L961.35,81.01
|
||||
L963.83,81.01 L966.31,81.01 L968.79,81.01 L971.27,81.01 L973.75,81.01 L976.23,81.01 L978.71,81.01 L981.19,81.01
|
||||
L983.67,81.01 L986.15,81.01 L988.63,81.01 L991.11,81.01 L993.59,81.01 L996.07,81.01 L998.55,81.01 L1001.03,81.01
|
||||
L1003.51,81.01 L1005.99,81.01 L1008.47,81.01 L1010.95,81.01 L1013.43,81.01 L1015.91,81.01 L1018.39,81.01 L1020.87,81.01
|
||||
L1023.35,81.01 L1025.83,81.01 L1028.31,81.01 L1030.79,81.01 L1033.27,81.01 L1035.75,81.01 L1038.23,81.01 L1040.71,81.01
|
||||
L1043.19,81.01 L1045.67,81.01 L1048.15,81.01 L1050.63,81.01 L1053.11,81.01 L1055.59,81.01 L1058.07,81.01 L1060.55,81.01
|
||||
L1063.03,81.01 L1065.51,81.01 L1067.99,81.01 L1070.47,81.03 L1072.95,81.12 L1075.43,81.28 L1077.91,81.52 L1080.39,81.83
|
||||
L1082.87,82.22 L1085.35,82.67 L1087.83,83.20 L1090.31,83.81 L1092.79,84.48 L1095.27,85.24 L1097.75,86.06 L1100.23,86.96
|
||||
L1102.71,87.93 L1105.19,88.97 L1107.67,90.09 L1110.15,91.28 L1112.63,92.54 L1115.11,93.88 L1117.59,95.29 L1120.07,96.78
|
||||
L1122.55,98.33 L1125.03,99.96 L1127.51,101.67 L1129.99,103.45 L1132.47,105.30 L1134.95,107.22 L1137.43,109.22 L1139.91,111.29
|
||||
L1142.39,113.43 L1144.87,115.65 L1147.35,117.94 L1149.83,120.31 L1152.31,122.74 L1154.79,125.25 L1157.27,127.84 L1159.75,130.50
|
||||
L1162.23,133.23 L1164.71,136.03 L1167.19,138.91 L1169.67,141.86 L1172.15,144.89 L1174.63,147.98 L1177.11,151.15 L1179.59,154.40
|
||||
L1182.07,157.72 L1184.55,161.11 L1187.03,164.57 L1189.51,168.11 L1191.99,171.72 L1194.47,175.41 L1196.95,179.16 L1199.43,183.00
|
||||
L1201.91,186.90 L1204.39,190.88 L1206.87,194.93 L1209.35,199.05 L1211.83,203.25 L1214.31,207.52 L1216.79,211.87 L1219.27,216.29
|
||||
L1221.75,220.78 L1224.23,225.34 L1226.71,229.98 L1229.19,234.69 L1231.67,239.48 L1234.15,244.34 L1236.63,249.27 L1239.11,254.27
|
||||
L1241.59,259.35 L1244.07,264.50 L1246.55,269.73 L1249.03,275.03 L1251.51,280.40 L1253.99,285.84 L1256.47,291.36 L1258.95,296.95
|
||||
L1261.43,302.62 L1263.91,308.36 L1266.39,314.17 L1268.87,320.05 L1271.35,326.01 L1273.83,332.04 L1276.31,338.15 L1278.79,344.33
|
||||
L1281.27,350.58 L1283.75,356.90 L1286.23,363.30 L1288.71,369.77 L1291.19,376.32 L1293.67,382.94 L1296.15,389.63 L1298.63,396.40
|
||||
L1301.11,403.23 L1303.59,410.15 L1306.07,417.13 L1308.55,424.19 L1311.03,431.32 L1313.51,438.53 L1315.99,445.81 L1318.47,453.14
|
||||
L1320.95,460.47 L1323.43,467.81 L1325.91,475.14 L1328.39,482.48 L1330.87,489.81 L1333.35,497.15 L1335.83,504.48 L1338.31,511.82
|
||||
L1340.79,519.15 L1343.27,526.49 L1345.75,533.82 L1348.23,541.14 L1350.71,548.38 L1353.19,555.55 L1355.67,562.65 L1358.15,569.68
|
||||
L1360.63,576.63 L1363.11,583.51 L1365.59,590.31 L1368.07,597.04 L1370.55,603.70 L1373.03,610.28 L1375.51,616.79 L1377.99,623.23
|
||||
L1380.47,629.60 L1382.95,635.89 L1385.43,642.11 L1387.91,648.25 L1390.39,654.32 L1392.87,660.32 L1395.35,666.24 L1397.83,672.09
|
||||
L1400.31,677.87 L1402.79,683.58 L1405.27,689.21 L1407.75,694.76 L1410.23,700.25 L1412.71,705.66 L1415.19,711.00 L1417.67,716.26
|
||||
L1420.15,721.45 L1422.63,726.57 L1425.11,731.61 L1427.59,736.58 L1430.07,741.48 L1432.55,746.30 L1435.03,751.05 L1437.51,755.73
|
||||
L1439.99,760.34 L1442.47,764.87 L1444.95,769.32 L1447.43,773.71 L1449.91,778.02 L1452.39,782.26 L1454.87,786.42 L1457.35,790.51
|
||||
L1459.83,794.53 L1462.31,798.47 L1464.79,802.34 L1467.27,806.14 L1469.75,809.86 L1472.23,813.51 L1474.71,817.09 L1477.19,820.59
|
||||
L1479.67,824.02 L1482.15,827.38 L1484.63,830.66 L1487.11,833.87 L1489.59,837.01 L1492.07,840.07 L1494.55,843.06 L1497.03,845.98
|
||||
L1499.51,848.83 L1501.99,851.60 L1504.47,854.29 L1506.95,856.92 L1509.43,859.47 L1511.91,861.94 L1514.39,864.35 L1516.87,866.68
|
||||
L1519.35,868.93 L1521.83,871.12 L1524.31,873.23 L1526.79,875.26 L1529.27,877.23 L1531.75,879.12 L1534.23,880.93 L1536.71,882.68
|
||||
L1539.19,884.35 L1541.67,885.94 L1544.15,887.47 L1546.63,888.92 L1549.11,890.29 L1551.59,891.60 L1554.07,892.83 L1556.55,893.98
|
||||
L1559.03,895.07 L1561.51,896.08 L1563.99,897.01 L1566.47,897.87 L1568.95,898.66 L1571.43,899.38 L1573.91,900.02 L1576.39,900.59
|
||||
L1578.87,901.09 L1581.35,901.51 L1583.83,901.86 L1586.31,902.14 L1588.79,902.34 L1591.27,902.47 L1593.75,902.53 L1594.41,902.53
|
||||
'/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_3a" ><title>gnuplot_plot_3a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 158, 96)' d='M249.59,902.53 L252.07,902.49 L254.55,902.38 L257.03,902.20 L259.51,901.94 L261.99,901.61 L264.47,901.21 L266.95,900.73
|
||||
L269.43,900.18 L271.91,899.56 L274.39,898.86 L276.87,898.09 L279.35,897.25 L281.83,896.33 L284.31,895.34 L286.79,894.28
|
||||
L289.27,893.14 L291.75,891.93 L294.23,890.65 L296.71,889.29 L299.19,887.86 L301.67,886.36 L304.15,884.78 L306.63,883.13
|
||||
L309.11,881.41 L311.59,879.61 L314.07,877.74 L316.55,875.79 L319.03,873.78 L321.51,871.69 L323.99,869.52 L326.47,867.29
|
||||
L328.95,864.97 L331.43,862.59 L333.91,860.13 L336.39,857.60 L338.87,855.00 L341.35,852.32 L343.83,849.57 L346.31,846.75
|
||||
L348.79,843.85 L351.27,840.88 L353.75,837.84 L356.23,834.72 L358.71,831.53 L361.19,828.26 L363.67,824.93 L366.15,821.51
|
||||
L368.63,818.03 L371.11,814.47 L373.59,810.84 L376.07,807.14 L378.55,803.36 L381.03,799.51 L383.51,795.59 L385.99,791.59
|
||||
L388.47,787.52 L390.95,783.37 L393.43,779.16 L395.91,774.86 L398.39,770.50 L400.87,766.06 L403.35,761.55 L405.83,756.97
|
||||
L408.31,752.31 L410.79,747.58 L413.27,742.77 L415.75,737.90 L418.23,732.94 L420.71,727.92 L423.19,722.82 L425.67,717.65
|
||||
L428.15,712.41 L430.63,707.09 L433.11,701.70 L435.59,696.23 L438.07,690.70 L440.55,685.08 L443.03,679.40 L445.51,673.64
|
||||
L447.99,667.81 L450.47,661.91 L452.95,655.93 L455.43,649.88 L457.91,643.75 L460.39,637.55 L462.87,631.28 L465.35,624.94
|
||||
L467.83,618.52 L470.31,612.03 L472.79,605.46 L475.27,598.82 L477.75,592.11 L480.23,585.33 L482.71,578.47 L485.19,571.54
|
||||
L487.67,564.53 L490.15,557.45 L492.63,550.30 L495.11,543.08 L497.59,535.78 L500.07,528.44 L502.55,521.11 L505.03,513.77
|
||||
L507.51,506.44 L509.99,499.10 L512.47,491.77 L514.95,484.43 L517.43,477.10 L519.91,469.76 L522.39,462.43 L524.87,455.09
|
||||
L527.35,447.76 L529.83,440.46 L532.31,433.24 L534.79,426.09 L537.27,419.01 L539.75,412.00 L542.23,405.07 L544.71,398.21
|
||||
L547.19,391.43 L549.67,384.72 L552.15,378.08 L554.63,371.51 L557.11,365.02 L559.59,358.60 L562.07,352.26 L564.55,345.99
|
||||
L567.03,339.79 L569.51,333.66 L571.99,327.61 L574.47,321.63 L576.95,315.73 L579.43,309.90 L581.91,304.14 L584.39,298.46
|
||||
L586.87,292.84 L589.35,287.31 L591.83,281.84 L594.31,276.45 L596.79,271.13 L599.27,265.89 L601.75,260.72 L604.23,255.62
|
||||
L606.71,250.60 L609.19,245.64 L611.67,240.77 L614.15,235.96 L616.63,231.23 L619.11,226.57 L621.59,221.99 L624.07,217.48
|
||||
L626.55,213.04 L629.03,208.68 L631.51,204.38 L633.99,200.17 L636.47,196.02 L638.95,191.95 L641.43,187.95 L643.91,184.03
|
||||
L646.39,180.18 L648.87,176.40 L651.35,172.70 L653.83,169.07 L656.31,165.51 L658.79,162.03 L661.27,158.61 L663.75,155.28
|
||||
L666.23,152.01 L668.71,148.82 L671.19,145.70 L673.67,142.66 L676.15,139.69 L678.63,136.79 L681.11,133.97 L683.59,131.22
|
||||
L686.07,128.54 L688.55,125.94 L691.03,123.41 L693.51,120.95 L695.99,118.57 L698.47,116.25 L700.95,114.02 L703.43,111.85
|
||||
L705.91,109.76 L708.39,107.75 L710.87,105.80 L713.35,103.93 L715.83,102.13 L718.31,100.41 L720.79,98.76 L723.27,97.18
|
||||
L725.75,95.68 L728.23,94.25 L730.71,92.89 L733.19,91.61 L735.67,90.40 L738.15,89.26 L740.63,88.20 L743.11,87.21
|
||||
L745.59,86.29 L748.07,85.45 L750.55,84.68 L753.03,83.98 L755.51,83.36 L757.99,82.81 L760.47,82.33 L762.95,81.93
|
||||
L765.43,81.60 L767.91,81.34 L770.39,81.16 L772.87,81.05 L775.35,81.01 L777.83,81.01 L780.31,81.01 L782.79,81.01
|
||||
L785.27,81.01 L787.75,81.01 L790.23,81.01 L792.71,81.01 L795.19,81.01 L797.67,81.01 L800.15,81.01 L802.63,81.01
|
||||
L805.11,81.01 L807.59,81.01 L810.07,81.01 L812.55,81.01 L815.03,81.01 L817.51,81.01 L819.99,81.01 L822.47,81.01
|
||||
L824.95,81.01 L827.43,81.01 L829.91,81.01 L832.39,81.01 L834.87,81.01 L837.35,81.01 L839.83,81.01 L842.31,81.01
|
||||
L844.79,81.01 L847.27,81.01 L849.75,81.01 L852.23,81.01 L854.71,81.01 L857.19,81.01 L859.67,81.01 L862.15,81.01
|
||||
L864.63,81.01 L867.11,81.01 L869.59,81.01 L872.07,81.01 L874.55,81.01 L877.03,81.01 L879.51,81.01 L881.99,81.01
|
||||
L884.47,81.01 L886.95,81.01 L889.43,81.01 L891.91,81.01 L894.39,81.01 L896.87,81.01 L899.35,81.01 L901.83,81.01
|
||||
L904.31,81.01 L906.79,81.01 L909.27,81.01 L911.75,81.01 L914.23,81.01 L916.71,81.01 L919.19,81.01 L921.67,81.01
|
||||
L924.15,81.01 L926.63,81.01 L929.11,81.01 L931.59,81.01 L934.07,81.01 L936.55,81.01 L939.03,81.01 L941.51,81.01
|
||||
L943.99,81.01 L946.47,81.01 L948.95,81.01 L951.43,81.01 L953.91,81.01 L956.39,81.01 L958.87,81.01 L961.35,81.01
|
||||
L963.83,81.01 L966.31,81.01 L968.79,81.01 L971.27,81.01 L973.75,81.01 L976.23,81.01 L978.71,81.01 L981.19,81.01
|
||||
L983.67,81.01 L986.15,81.01 L988.63,81.01 L991.11,81.01 L993.59,81.01 L996.07,81.01 L998.55,81.01 L1001.03,81.01
|
||||
L1003.51,81.01 L1005.99,81.01 L1008.47,81.01 L1010.95,81.01 L1013.43,81.01 L1015.91,81.01 L1018.39,81.01 L1020.87,81.01
|
||||
L1023.35,81.01 L1025.83,81.01 L1028.31,81.01 L1030.79,81.01 L1033.27,81.01 L1035.75,81.01 L1038.23,81.01 L1040.71,81.01
|
||||
L1043.19,81.01 L1045.67,81.01 L1048.15,81.01 L1050.63,81.03 L1053.11,81.12 L1055.59,81.28 L1058.07,81.52 L1060.55,81.83
|
||||
L1063.03,82.22 L1065.51,82.67 L1067.99,83.20 L1070.47,83.81 L1072.95,84.48 L1075.43,85.24 L1077.91,86.06 L1080.39,86.96
|
||||
L1082.87,87.93 L1085.35,88.97 L1087.83,90.09 L1090.31,91.28 L1092.79,92.54 L1095.27,93.88 L1097.75,95.29 L1100.23,96.78
|
||||
L1102.71,98.33 L1105.19,99.96 L1107.67,101.67 L1110.15,103.45 L1112.63,105.30 L1115.11,107.22 L1117.59,109.22 L1120.07,111.29
|
||||
L1122.55,113.43 L1125.03,115.65 L1127.51,117.94 L1129.99,120.31 L1132.47,122.74 L1134.95,125.25 L1137.43,127.84 L1139.91,130.50
|
||||
L1142.39,133.23 L1144.87,136.03 L1147.35,138.91 L1149.83,141.86 L1152.31,144.89 L1154.79,147.98 L1157.27,151.15 L1159.75,154.40
|
||||
L1162.23,157.72 L1164.71,161.11 L1167.19,164.57 L1169.67,168.11 L1172.15,171.72 L1174.63,175.41 L1177.11,179.16 L1179.59,183.00
|
||||
L1182.07,186.90 L1184.55,190.88 L1187.03,194.93 L1189.51,199.05 L1191.99,203.25 L1194.47,207.52 L1196.95,211.87 L1199.43,216.29
|
||||
L1201.91,220.78 L1204.39,225.34 L1206.87,229.98 L1209.35,234.69 L1211.83,239.48 L1214.31,244.34 L1216.79,249.27 L1219.27,254.27
|
||||
L1221.75,259.35 L1224.23,264.50 L1226.71,269.73 L1229.19,275.03 L1231.67,280.40 L1234.15,285.84 L1236.63,291.36 L1239.11,296.95
|
||||
L1241.59,302.62 L1244.07,308.36 L1246.55,314.17 L1249.03,320.05 L1251.51,326.01 L1253.99,332.04 L1256.47,338.15 L1258.95,344.33
|
||||
L1261.43,350.58 L1263.91,356.90 L1266.39,363.30 L1268.87,369.77 L1271.35,376.32 L1273.83,382.94 L1276.31,389.63 L1278.79,396.40
|
||||
L1281.27,403.23 L1283.75,410.15 L1286.23,417.13 L1288.71,424.19 L1291.19,431.32 L1293.67,438.53 L1296.15,445.81 L1298.63,453.14
|
||||
L1301.11,460.47 L1303.59,467.81 L1306.07,475.14 L1308.55,482.48 L1311.03,489.81 L1313.51,497.15 L1315.99,504.48 L1318.47,511.82
|
||||
L1320.95,519.15 L1323.43,526.49 L1325.91,533.82 L1328.39,541.16 L1330.87,548.49 L1333.35,555.83 L1335.83,563.16 L1338.31,570.50
|
||||
L1340.79,577.83 L1343.27,585.17 L1345.75,592.50 L1348.23,599.82 L1350.71,607.06 L1353.19,614.23 L1355.67,621.33 L1358.15,628.36
|
||||
L1360.63,635.31 L1363.11,642.19 L1365.59,648.99 L1368.07,655.72 L1370.55,662.38 L1373.03,668.96 L1375.51,675.47 L1377.99,681.91
|
||||
L1380.47,688.28 L1382.95,694.57 L1385.43,700.79 L1387.91,706.93 L1390.39,713.00 L1392.87,719.00 L1395.35,724.92 L1397.83,730.77
|
||||
L1400.31,736.55 L1402.79,742.26 L1405.27,747.89 L1407.75,753.44 L1410.23,758.93 L1412.71,764.34 L1415.19,769.68 L1417.67,774.94
|
||||
L1420.15,780.13 L1422.63,785.25 L1425.11,790.29 L1427.59,795.26 L1430.07,800.16 L1432.55,804.98 L1435.03,809.73 L1437.51,814.41
|
||||
L1439.99,819.02 L1442.47,823.55 L1444.95,828.00 L1447.43,832.39 L1449.91,836.70 L1452.39,840.94 L1454.87,845.10 L1457.35,849.19
|
||||
L1459.83,853.21 L1462.31,857.15 L1464.79,861.02 L1467.27,864.82 L1469.75,868.54 L1472.23,872.19 L1474.71,875.77 L1477.19,879.27
|
||||
L1479.67,882.70 L1482.15,886.06 L1484.63,889.34 L1487.11,892.55 L1489.59,895.69 L1492.07,898.75 L1494.55,901.74 L1497.03,904.66
|
||||
L1499.51,907.51 L1501.99,910.28 L1504.47,912.97 L1506.95,915.60 L1509.43,918.15 L1511.91,920.62 L1514.39,923.03 L1516.87,925.36
|
||||
L1519.35,927.61 L1521.83,929.80 L1524.31,931.91 L1526.79,933.94 L1529.27,935.91 L1531.75,937.80 L1534.23,939.61 L1536.71,941.36
|
||||
L1539.19,943.03 L1541.67,944.62 L1544.15,946.15 L1546.63,947.60 L1549.11,948.97 L1551.59,950.28 L1554.07,951.51 L1556.55,952.66
|
||||
L1559.03,953.75 L1561.51,954.76 L1563.99,955.69 L1566.47,956.55 L1568.95,957.34 L1571.43,958.06 L1573.91,958.70 L1576.39,959.27
|
||||
L1578.87,959.77 L1581.35,960.19 L1583.83,960.54 L1586.31,960.82 L1588.79,961.02 L1591.27,961.15 L1593.75,961.21 L1594.41,961.21
|
||||
'/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_4a" ><title>ZeroToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_5a" ><title>ZeroToPositiveVf</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_6a" ><title>PositiveV0ToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g stroke='none' shape-rendering='crispEdges'>
|
||||
<polygon fill = 'white' points = '1534.62,145.12 1724.99,145.12 1724.99,94.51 1534.62,94.51 '/>
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="white" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M1534.62,145.12 L1534.62,94.51 L1724.99,94.51 L1724.99,145.12 L1534.62,145.12 Z '/></g>
|
||||
<g id="gnuplot_plot_1a" ><title>gnuplot_plot_1a</title>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 0, 0)" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_2a" ><title>gnuplot_plot_2a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_3a" ><title>gnuplot_plot_3a</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_4a" ><title>ZeroToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,106.53)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >ZeroToRest</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb(216, 51, 45)' d='M1542.31,102.95 L1586.57,102.95 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_5a" ><title>ZeroToPositiveVf</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,123.40)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >ZeroToPositiveVf</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 114, 178)' d='M1542.31,119.82 L1586.57,119.82 '/></g>
|
||||
</g>
|
||||
<g id="gnuplot_plot_6a" ><title>PositiveV0ToRest</title>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(1594.26,140.27)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="11.00" text-anchor="start">
|
||||
<text><tspan font-family="Helvetica" >PositiveV0ToRest</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="3.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 158, 96)' d='M1542.31,136.69 L1586.57,136.69 '/></g>
|
||||
</g>
|
||||
<g fill="none" color="white" stroke="rgb( 0, 158, 96)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="black" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<path stroke='rgb( 0, 0, 0)' d='M249.59,81.01 L249.59,961.21 L1737.59,961.21 L1737.59,81.01 L249.59,81.01 Z '/></g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
<g transform="translate(993.59,47.54)" stroke="none" fill="rgb(0,0,0)" font-family="Helvetica" font-size="17.00" text-anchor="middle">
|
||||
<text><tspan font-family="Helvetica" font-weight="bold" >SCurve Velocity</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 48 KiB |
@ -17,7 +17,7 @@ The source paths are
|
||||
`ume/robot/ume/v6_imu/models/robot.xml`, respectively.
|
||||
|
||||
Only the model topology/dynamics parser is used. Pinocchio 3.6
|
||||
`mjcf::buildModel` and the adapter tests load these files without resolving
|
||||
`mjcf::buildModel` and the model adapter load these files without resolving
|
||||
their visual STL assets, so no geometry files are duplicated here.
|
||||
|
||||
The adapter enforces the model's structural contract. Integrations that require
|
||||
|
||||
@ -1,256 +0,0 @@
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-09-08 14:26:53 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-09-08 14:26:54 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-09-08 14:26:55 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-09-08 14:26:55 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.99486349 0.07846371 0.06395369]
|
||||
[-0.05884529 0.06577685 -0.9960977 ]
|
||||
[-0.08236419 -0.99474462 -0.06082177]]
|
||||
2025-09-08 14:26:55 - __main__ - INFO: 平移向量是:
|
||||
[[-0.00797824]
|
||||
[-0.17640328]
|
||||
[ 0.07459845]]
|
||||
2025-09-08 14:26:55 - __main__ - INFO: 四元数是:
|
||||
[ 0.00673467 0.72826199 -0.68342243 0.05022845]
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-09-08 14:29:37 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-09-08 14:29:38 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-09-08 14:29:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-09-08 14:29:53 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-09-08 14:30:52 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-09-08 14:30:53 - __main__ - INFO: 旋转矩阵是:
|
||||
[[ 0.72638143 0.22269568 -0.65021278]
|
||||
[ 0.420903 0.60375531 0.67699349]
|
||||
[ 0.54333294 -0.76543201 0.34482337]]
|
||||
2025-09-08 14:30:53 - __main__ - INFO: 平移向量是:
|
||||
[[ 0.15849038]
|
||||
[-0.26275262]
|
||||
[-0.05082269]]
|
||||
2025-09-08 14:30:53 - __main__ - INFO: 四元数是:
|
||||
[-0.44096563 -0.36488029 0.0605942 0.81776526]
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-09-08 14:32:25 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-09-08 14:32:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-09-08 14:32:27 - __main__ - INFO: 旋转矩阵是:
|
||||
[[ 0.05477568 0.03458859 0.99789942]
|
||||
[-0.99767126 0.04257346 0.0532875 ]
|
||||
[-0.04064089 -0.99849443 0.03684003]]
|
||||
2025-09-08 14:32:27 - __main__ - INFO: 平移向量是:
|
||||
[[-0.14908435]
|
||||
[-0.19737896]
|
||||
[-0.05964516]]
|
||||
2025-09-08 14:32:27 - __main__ - INFO: 四元数是:
|
||||
[-0.49380213 0.48758531 -0.48463669 0.53249159]
|
||||
2025-09-08 14:37:25 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-09-08 14:37:25 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-09-08 14:37:25 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-09-08 14:37:25 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-09-08 14:37:25 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-09-08 14:37:25 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-09-08 14:37:25 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.99486349 0.07846371 0.06395369]
|
||||
[-0.05884529 0.06577685 -0.9960977 ]
|
||||
[-0.08236419 -0.99474462 -0.06082177]]
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 平移向量是:
|
||||
[[-0.00797824]
|
||||
[-0.17640328]
|
||||
[ 0.07459845]]
|
||||
2025-09-08 14:37:26 - __main__ - INFO: 四元数是:
|
||||
[ 0.00673467 0.72826199 -0.68342243 0.05022845]
|
||||
@ -1,704 +0,0 @@
|
||||
2025-08-21 09:52:37 - __main__ - INFO: 读 eye_hand_data/data2025082010/1.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 读 eye_hand_data/data2025082009/1.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_1.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 读 eye_hand_data/data2025082009/2.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_2.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 读 eye_hand_data/data2025082009/3.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_3.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 读 eye_hand_data/data2025082009/4.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_4.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 读 eye_hand_data/data2025082009/5.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_5.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 读 eye_hand_data/data2025082009/6.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_6.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 读 eye_hand_data/data2025082009/7.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_7.jpg
|
||||
2025-08-21 09:54:46 - __main__ - INFO: 读 eye_hand_data/data2025082009/8.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_8.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/9.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_9.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/10.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_10.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/11.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_11.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/12.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_12.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/13.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_13.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/14.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_14.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/15.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_15.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/16.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_16.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/17.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_17.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/18.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_18.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/19.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_19.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 读 eye_hand_data/data2025082009/20.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_20.jpg
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.8747942 0.22946188 0.42671109]
|
||||
[-0.45426317 -0.08221912 -0.88706538]
|
||||
[-0.16846387 -0.96983878 0.17616089]]
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 平移向量是:
|
||||
[[-0.12651951]
|
||||
[-0.21061809]
|
||||
[ 0.0697177 ]]
|
||||
2025-08-21 09:54:47 - __main__ - INFO: 四元数是:
|
||||
[ 0.08840819 -0.63569139 0.73026951 -0.234066 ]
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/1.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_1.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/2.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_2.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/3.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_3.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/4.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_4.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/5.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_5.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/6.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_6.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/7.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_7.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/8.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_8.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/9.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_9.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/10.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_10.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/11.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_11.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/12.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_12.jpg
|
||||
2025-08-21 09:55:21 - __main__ - INFO: 读 eye_hand_data/data2025082009/13.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_13.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 读 eye_hand_data/data2025082009/14.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_14.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 读 eye_hand_data/data2025082009/15.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_15.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 读 eye_hand_data/data2025082009/16.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_16.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 读 eye_hand_data/data2025082009/17.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_17.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 读 eye_hand_data/data2025082009/18.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_18.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 读 eye_hand_data/data2025082009/19.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_19.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 读 eye_hand_data/data2025082009/20.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082009/corner/corner_20.jpg
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.87479368 0.22946254 0.4267118 ]
|
||||
[-0.45426401 -0.08221905 -0.88706496]
|
||||
[-0.16846434 -0.96983863 0.17616128]]
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 平移向量是:
|
||||
[[-0.12651976]
|
||||
[-0.21061824]
|
||||
[ 0.0697178 ]]
|
||||
2025-08-21 09:55:22 - __main__ - INFO: 四元数是:
|
||||
[ 0.08840828 -0.63569123 0.73026947 -0.23406652]
|
||||
2025-08-21 11:27:09 - libs.auxiliary - INFO: create folder eye_hand_data/data20250821
|
||||
2025-08-21 11:27:09 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-08-21 11:27:20 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:28:46 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:28:51 - __main__ - INFO: 当前关节角: [0.8253898778736996, 0.2562934472690343, -0.0472638845356522, 0.982365663091435, -0.811866925952772, 1.0474525818308873, 0.016616543126199347]
|
||||
2025-08-21 11:28:51 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.25318109 -0.89031678 0.37846449 0.20513955]
|
||||
[ 0.6294954 -0.44867523 -0.63437061 -0.47519781]
|
||||
[ 0.73459844 0.07763101 0.6740464 -0.14564497]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:28:51 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:28:51 - __main__ - INFO: ===采集第1次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/1.jpg
|
||||
2025-08-21 11:28:53 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:29:00 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:29:04 - __main__ - INFO: 当前关节角: [0.8917611258247912, 0.3193556252779419, 0.0663351766206834, 0.6812782681741733, -1.1216997200029486, 1.03807878215244, 0.016623187844958753]
|
||||
2025-08-21 11:29:04 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.25224294 -0.90609294 0.33966025 0.22289984]
|
||||
[ 0.8456558 -0.37703157 -0.37777436 -0.51750052]
|
||||
[ 0.47036131 0.19194474 0.8613463 -0.11653364]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:29:04 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:29:04 - __main__ - INFO: ===采集第2次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/2.jpg
|
||||
2025-08-21 11:29:05 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:29:14 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:29:18 - __main__ - INFO: 当前关节角: [1.1896438678089452, 0.30651423165262204, 0.10917083072596027, 0.6814301474601026, -1.6521096487448172, 1.0335860030255448, 0.016608949161902885]
|
||||
2025-08-21 11:29:18 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.42170444 -0.84445498 0.33024408 0.2558707 ]
|
||||
[ 0.9003429 -0.43313682 0.04213264 -0.51967065]
|
||||
[ 0.10746175 0.31510043 0.94295477 -0.04397596]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:29:18 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:29:18 - __main__ - INFO: ===采集第3次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/3.jpg
|
||||
2025-08-21 11:29:19 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:29:28 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:29:34 - __main__ - INFO: 当前关节角: [1.4559585002127002, 0.30681324399679527, 0.17970546960258804, 0.6812127702321163, -2.1080019043365628, 1.0236910675472528, 0.016632680300329335]
|
||||
2025-08-21 11:29:34 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.44997072 -0.85803562 0.24759084 0.26886029]
|
||||
[ 0.85847564 -0.33920789 0.38465255 -0.52136803]
|
||||
[-0.24606082 0.38563309 0.8892363 0.03026231]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:29:34 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:29:34 - __main__ - INFO: ===采集第4次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/4.jpg
|
||||
2025-08-21 11:29:36 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:29:46 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:29:51 - __main__ - INFO: 当前关节角: [1.6850703015280803, 0.3357206183368209, 0.14558294028196603, 0.7301084078459711, -2.380654649191254, 1.0414419590902364, 0.016624137090495813]
|
||||
2025-08-21 11:29:51 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.48372144 -0.85725737 0.17641818 0.27941969]
|
||||
[ 0.74091476 -0.29378779 0.60393216 -0.50585554]
|
||||
[-0.46589579 0.42284577 0.77726609 0.08600871]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:29:51 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:29:51 - __main__ - INFO: ===采集第5次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/5.jpg
|
||||
2025-08-21 11:29:53 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:30:03 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:30:07 - __main__ - INFO: 当前关节角: [1.9511694551949232, 0.7207327096764498, -0.06620038375442117, 0.8133790740933053, -1.3808665335126573, 0.21355366696300027, 1.1411364716197472]
|
||||
2025-08-21 11:30:07 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.21216612 -0.68156647 0.70032327 0.38204138]
|
||||
[ 0.97416126 -0.20429083 0.09630729 -0.3389997 ]
|
||||
[ 0.07742981 0.70266095 0.70729924 0.18673545]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:30:07 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:30:07 - __main__ - INFO: ===采集第6次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/6.jpg
|
||||
2025-08-21 11:30:08 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:30:17 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:30:21 - __main__ - INFO: 当前关节角: [1.8940381633015537, 0.4051379952163314, -0.12349589512570175, 0.6297399309851491, -1.2283436591092607, 0.9395015316200465, 1.0908577832583988]
|
||||
2025-08-21 11:30:21 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.4310179 -0.70629928 0.5615736 0.28826997]
|
||||
[ 0.89989504 -0.38227375 0.20989447 -0.50135244]
|
||||
[ 0.06642653 0.59582557 0.80036205 0.12584165]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:30:21 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:30:21 - __main__ - INFO: ===采集第7次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/7.jpg
|
||||
2025-08-21 11:30:22 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:30:35 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:30:42 - __main__ - INFO: 当前关节角: [1.8361265915767224, 1.1135570917860655, -0.08976350572081057, 0.5308864500014717, -1.5194516356954322, 0.07328175546087345, 0.9682465849732351]
|
||||
2025-08-21 11:30:42 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.13468827 -0.72882711 0.67131968 0.45481058]
|
||||
[ 0.98906271 -0.05778144 0.13570654 -0.23383011]
|
||||
[-0.06011679 0.68225534 0.7286382 0.15317249]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:30:42 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:30:42 - __main__ - INFO: ===采集第8次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/8.jpg
|
||||
2025-08-21 11:30:43 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:31:04 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:31:08 - __main__ - INFO: 当前关节角: [1.773997521930743, 0.605477215057948, 0.028329283807957347, 1.2173817716473154, -1.7268484961050745, 0.15453242720534835, 0.8873870023900281]
|
||||
2025-08-21 11:31:08 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.35110132 -0.76965787 0.53324913 0.36358769]
|
||||
[ 0.90927708 -0.14433419 0.39036245 -0.28723159]
|
||||
[-0.22347945 0.62192798 0.75050818 0.11913745]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:31:08 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:31:08 - __main__ - INFO: ===采集第9次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/9.jpg
|
||||
2025-08-21 11:31:09 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:31:26 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:31:30 - __main__ - INFO: 当前关节角: [1.4005130683931457, 1.4388303137420266, 0.15982067409229817, 0.8202088957324373, -1.891621384164204, -1.0446542059876405, 0.5873542192644378]
|
||||
2025-08-21 11:31:30 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.36091887 -0.80430791 0.47204487 0.44921615]
|
||||
[ 0.93025175 0.34636313 -0.12109612 -0.02012862]
|
||||
[-0.06610037 0.48282644 0.87321782 -0.00595984]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:31:30 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:31:30 - __main__ - INFO: ===采集第10次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/10.jpg
|
||||
2025-08-21 11:31:32 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:31:51 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:31:56 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:32:05 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:32:09 - __main__ - INFO: 当前关节角: [1.4349839708258678, 0.8371567255510698, -0.01699624134102253, 1.6177536050220789, -2.016514568720455, -0.8374870629979659, 0.5931132919377683]
|
||||
2025-08-21 11:32:09 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.0401021 -0.92276134 0.3832797 0.33858263]
|
||||
[ 0.95373667 0.07903515 0.29006864 -0.11724388]
|
||||
[-0.2979567 0.37718027 0.87690185 -0.01763812]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:32:09 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:32:09 - __main__ - INFO: ===采集第11次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/11.jpg
|
||||
2025-08-21 11:32:12 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:32:48 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:32:52 - __main__ - INFO: 当前关节角: [0.7093417632317545, 0.9039997485340793, 0.3698402999208317, 1.4349972602633867, -1.868800572207794, -0.677916040481914, -0.3356152520822075]
|
||||
2025-08-21 11:32:52 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 6.72744280e-03 -9.95813278e-01 9.11628002e-02 3.05739589e-01]
|
||||
[ 9.97824272e-01 7.05770400e-04 -6.59259053e-02 -1.35775630e-01]
|
||||
[ 6.55855519e-02 9.14079675e-02 9.93651407e-01 -1.75063848e-01]
|
||||
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
|
||||
2025-08-21 11:32:52 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:32:52 - __main__ - INFO: ===采集第12次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/12.jpg
|
||||
2025-08-21 11:32:53 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:34:07 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:34:12 - __main__ - INFO: 当前关节角: [0.5287221701769795, 0.9609924505790383, 0.5908911081355157, 1.1136415746388637, -2.4692230547809086, -0.6455401229494787, -0.3356162013277445]
|
||||
2025-08-21 11:34:12 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.12520332 -0.99186645 -0.02291465 0.31366201]
|
||||
[ 0.90598349 0.10488766 0.41011278 -0.19783819]
|
||||
[-0.40437364 -0.07210778 0.91174691 -0.25384818]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:34:12 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:34:12 - __main__ - INFO: ===采集第13次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/13.jpg
|
||||
2025-08-21 11:34:13 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:34:31 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 11:34:37 - __main__ - INFO: 当前关节角: [0.39919666739988574, 1.3179505393164566, 0.9448201543641821, 1.2761780402126846, -2.03749479358051, -0.385342428786525, -0.3356180998188186]
|
||||
2025-08-21 11:34:37 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.03301101 -0.99908595 0.02715761 0.313764 ]
|
||||
[ 0.83829597 0.01288215 -0.54506323 -0.0913168 ]
|
||||
[ 0.54421516 0.0407592 0.83795498 -0.18631875]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 11:34:37 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 11:34:37 - __main__ - INFO: ===采集第14次数据! pose 已保存到 eye_hand_data/data20250821/RobotToolPose.csv, 图片保存到 eye_hand_data/data20250821/14.jpg
|
||||
2025-08-21 11:34:39 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 11:35:06 - __main__ - INFO: 检测到 'q',退出程序
|
||||
2025-08-21 11:35:07 - __main__ - INFO: 相机已关闭,窗口已销毁
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/1.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_1.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/2.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_2.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/3.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_3.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/4.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_4.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/5.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_5.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/6.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_6.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/7.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_7.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/8.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_8.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/9.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_9.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/10.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_10.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/11.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_11.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/12.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_12.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/13.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_13.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 读 eye_hand_data/data20250821/14.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_14.jpg
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.99732744 0.02734315 0.0677519 ]
|
||||
[-0.06713675 0.0228221 -0.99748274]
|
||||
[-0.02882056 -0.99936555 -0.02092538]]
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 平移向量是:
|
||||
[[-0.00078482]
|
||||
[-0.17419722]
|
||||
[ 0.06796275]]
|
||||
2025-08-21 11:35:46 - __main__ - INFO: 四元数是:
|
||||
[-0.01392688 0.71433097 -0.69885263 0.03379822]
|
||||
2025-08-21 11:38:53 - __main__ - INFO: 读 eye_hand_data/data20250821/1.jpg
|
||||
2025-08-21 11:38:53 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_1.jpg
|
||||
2025-08-21 11:38:53 - __main__ - INFO: 读 eye_hand_data/data20250821/2.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_2.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/3.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_3.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/4.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_4.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/5.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_5.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/6.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_6.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/7.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_7.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/8.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_8.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/9.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_9.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/10.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_10.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/11.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_11.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/12.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_12.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/13.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_13.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 读 eye_hand_data/data20250821/14.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data20250821/corner/corner_14.jpg
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.99732744 0.02734315 0.0677519 ]
|
||||
[-0.06713675 0.0228221 -0.99748274]
|
||||
[-0.02882056 -0.99936555 -0.02092538]]
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 平移向量是:
|
||||
[[-0.00078482]
|
||||
[-0.17419722]
|
||||
[ 0.06796275]]
|
||||
2025-08-21 11:38:54 - __main__ - INFO: 四元数是:
|
||||
[-0.01392688 0.71433097 -0.69885263 0.03379822]
|
||||
2025-08-21 16:14:42 - libs.auxiliary - INFO: create folder eye_hand_data/data2025082101
|
||||
2025-08-21 16:14:42 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-08-21 16:15:03 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:15:13 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:15:27 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:16:00 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:16:07 - __main__ - INFO: 当前关节角: [0.1881774860208302, 1.5359324367098321, 2.101302129336008, 1.237947176207676, -3.239618392465156, 0.660369236729398, -0.22447188913024077]
|
||||
2025-08-21 16:16:07 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.13936557 -0.98748272 -0.0738588 0.25639562]
|
||||
[ 0.98789482 -0.13351676 -0.07897536 -0.27191259]
|
||||
[ 0.06812542 -0.08397117 0.9941367 -0.23921664]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:16:07 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:16:07 - __main__ - INFO: ===采集第1次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/1.jpg
|
||||
2025-08-21 16:16:11 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:16:20 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:16:25 - __main__ - INFO: 当前关节角: [0.1847488111409769, 1.3553365747934838, 2.1088087630430623, 1.2244802297734347, -3.265897305913068, 0.6804733079587482, -0.22435892891133088]
|
||||
2025-08-21 16:16:25 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.12214152 -0.99148995 -0.04504583 0.24935823]
|
||||
[ 0.98590508 -0.12643169 0.10957282 -0.3301866 ]
|
||||
[-0.11433557 -0.03102752 0.99295754 -0.22048319]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:16:25 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:16:25 - __main__ - INFO: ===采集第2次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/2.jpg
|
||||
2025-08-21 16:16:28 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:16:36 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:16:40 - __main__ - INFO: 当前关节角: [0.18216591403464222, 1.3093807506078976, 2.108801169078766, 1.237752580872579, -3.386807456195824, 0.674951546669682, -0.22420894811647574]
|
||||
2025-08-21 16:16:40 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.12765968 -0.99174931 0.01167535 0.24725332]
|
||||
[ 0.95778442 -0.12021331 0.26114702 -0.34440277]
|
||||
[-0.25758884 0.04452042 0.96522843 -0.21331776]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:16:40 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:16:40 - __main__ - INFO: ===采集第3次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/3.jpg
|
||||
2025-08-21 16:16:43 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:16:52 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:16:57 - __main__ - INFO: 当前关节角: [0.15805412814783334, 1.218028207858052, 2.1077446587960202, 1.3528049369461503, -3.398763203735069, 0.6851996014877597, -0.2241823692414381]
|
||||
2025-08-21 16:16:57 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.12061637 -0.99148511 -0.04908122 0.24079104]
|
||||
[ 0.90170295 -0.13010493 0.41231601 -0.36562399]
|
||||
[-0.41519089 0.00547538 0.90971784 -0.17673377]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:16:57 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:16:57 - __main__ - INFO: ===采集第4次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/4.jpg
|
||||
2025-08-21 16:16:59 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:17:08 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:17:14 - __main__ - INFO: 当前关节角: [0.15782630921893942, 1.148865228782473, 2.0802051472748952, 1.4294517678358942, -3.4739330085691504, 0.6850638593759604, -0.22417762301375282]
|
||||
2025-08-21 16:17:14 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.13323657 -0.98863605 -0.06961879 0.24168424]
|
||||
[ 0.81161017 -0.14915447 0.56483792 -0.37307124]
|
||||
[-0.56880309 0.01875375 0.8222599 -0.14946229]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:17:14 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:17:14 - __main__ - INFO: ===采集第5次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/5.jpg
|
||||
2025-08-21 16:17:21 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:17:38 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:17:43 - __main__ - INFO: 当前关节角: [0.3590416826912605, 1.1394164387065981, 2.0769226562077487, 1.5773176436344847, -2.5660726784358565, 0.5330820549286868, 0.8458689010901876]
|
||||
2025-08-21 16:17:43 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.1100018 -0.97171944 0.20895198 0.26213488]
|
||||
[ 0.9937792 -0.11120581 0.00601407 -0.35469134]
|
||||
[ 0.01739269 0.20831369 0.97790741 -0.04493756]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:17:43 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:17:43 - __main__ - INFO: ===采集第6次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/6.jpg
|
||||
2025-08-21 16:17:46 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:17:53 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:17:59 - __main__ - INFO: 当前关节角: [0.3520818144135517, 1.1556029736045101, 2.017053740185504, 1.6291274650471073, -2.566324228503177, 0.5650403044248166, 0.8458594086348171]
|
||||
2025-08-21 16:17:59 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.20049553 -0.96061353 0.19241411 0.26384736]
|
||||
[ 0.97904311 -0.18929837 0.07510466 -0.33478381]
|
||||
[-0.03572288 0.20343986 0.97843554 -0.04338287]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:17:59 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:17:59 - __main__ - INFO: ===采集第7次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/7.jpg
|
||||
2025-08-21 16:18:01 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:18:09 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:18:13 - __main__ - INFO: 当前关节角: [0.3172653866053403, 1.313845052368681, 1.8904177408232146, 1.7188083864061938, -2.6905567381656357, 0.28883548277045484, 0.8458527639160577]
|
||||
2025-08-21 16:18:13 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.09067794 -0.96156996 0.25915385 0.27763283]
|
||||
[ 0.99082305 -0.1133011 -0.0737058 -0.27031831]
|
||||
[ 0.1002357 0.25009212 0.96301959 -0.05935151]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:18:13 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:18:13 - __main__ - INFO: ===采集第8次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/8.jpg
|
||||
2025-08-21 16:18:16 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:18:25 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:18:30 - __main__ - INFO: 当前关节角: [0.3113658255925252, 1.3320734144168047, 1.7972094230484208, 1.807990953858325, -2.9523187889736606, 0.29634021798643495, 0.8458480176883724]
|
||||
2025-08-21 16:18:30 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.06182316 -0.96333913 0.26106631 0.27572117]
|
||||
[ 0.985666 -0.01779069 0.16776779 -0.23950089]
|
||||
[-0.15697273 0.26769612 0.9506305 -0.05533822]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:18:30 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:18:30 - __main__ - INFO: ===采集第9次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/9.jpg
|
||||
2025-08-21 16:18:33 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:18:44 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:18:49 - __main__ - INFO: 当前关节角: [0.3174068241903619, 1.4675260063272884, 1.5487007384287987, 1.7904982571014212, -3.2589716104746933, 0.07981446324690623, 0.8458337790053165]
|
||||
2025-08-21 16:18:49 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.00204587 -0.95045805 0.31084613 0.291817 ]
|
||||
[ 0.96975598 0.0777536 0.2313606 -0.15674434]
|
||||
[-0.24406795 0.30097156 0.92187144 -0.07498582]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:18:49 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:18:49 - __main__ - INFO: ===采集第10次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/10.jpg
|
||||
2025-08-21 16:18:52 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:19:08 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:19:14 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:19:25 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:19:30 - __main__ - INFO: 当前关节角: [0.27753946087946524, 1.6105355419582903, 1.2276915274253017, 1.6875801067280616, -3.5108406242955006, -0.6567573574608925, 0.8458072001302789]
|
||||
2025-08-21 16:19:30 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.38872691 -0.8780319 0.27919772 0.29523427]
|
||||
[ 0.91848265 0.39319638 -0.0422638 -0.05153552]
|
||||
[-0.07267057 0.27286734 0.95930308 -0.10555432]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:19:30 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:19:30 - __main__ - INFO: ===采集第11次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/11.jpg
|
||||
2025-08-21 16:19:33 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:20:00 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:20:06 - __main__ - INFO: 当前关节角: [0.19953615811726558, 1.5134979676870048, 1.3755934745543004, 1.2340486247869789, -3.235004109909517, -0.39607934505618747, -0.18381760126912305]
|
||||
2025-08-21 16:20:06 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.2004248 -0.97752505 -0.065381 0.29826073]
|
||||
[ 0.95269085 0.17889858 0.24571414 -0.11593768]
|
||||
[-0.22849516 -0.11153509 0.96713489 -0.24686201]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:20:06 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:20:06 - __main__ - INFO: ===采集第12次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/12.jpg
|
||||
2025-08-21 16:20:08 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:20:19 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:20:24 - __main__ - INFO: 当前关节角: [0.14909894575122867, 1.5289374463472523, 1.327669864370393, 1.130913097185633, -3.1925177781618777, -0.44474526525007424, -0.2899508462764979]
|
||||
2025-08-21 16:20:24 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.1795737 -0.98355917 -0.01909571 0.27480921]
|
||||
[ 0.95378635 0.16931837 0.24823956 -0.10309542]
|
||||
[-0.24092504 -0.06279052 0.96851044 -0.28676362]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:20:24 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:20:24 - __main__ - INFO: ===采集第13次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/13.jpg
|
||||
2025-08-21 16:20:26 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:20:38 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:20:43 - __main__ - INFO: 当前关节角: [0.16214537641255308, 1.3656235486785808, 1.5120835918367883, 1.2035123451053618, -2.9271913103622, -0.014777854520918107, -0.2900476693212778]
|
||||
2025-08-21 16:20:43 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.03397924 -0.99615678 -0.08072841 0.28406157]
|
||||
[ 0.99940914 0.03344943 0.00790666 -0.19681757]
|
||||
[-0.00517596 -0.08094937 0.99670478 -0.25137906]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:20:43 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:20:43 - __main__ - INFO: ===采集第14次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/14.jpg
|
||||
2025-08-21 16:20:45 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:21:17 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:21:26 - __main__ - INFO: 当前关节角: [0.23122007565318572, 1.628535135831983, 1.828089329614453, 1.4320631423083405, -3.0376977295588006, 0.19928270955887112, 0.14386290736881704]
|
||||
2025-08-21 16:21:26 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.02777164 -0.99933259 0.02373016 0.29887982]
|
||||
[ 0.98010716 0.02255505 -0.19718324 -0.18783112]
|
||||
[ 0.1965164 0.0287342 0.98007941 -0.17737878]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:21:26 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:21:26 - __main__ - INFO: ===采集第15次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/15.jpg
|
||||
2025-08-21 16:21:29 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:21:42 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:21:47 - __main__ - INFO: 当前关节角: [0.22977437470024648, 1.339187060471517, 2.1365172402697836, 1.3177511977536744, -3.033028390762013, 0.8488428873577902, 0.1439046741724476]
|
||||
2025-08-21 16:21:47 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.24782493 -0.96680534 0.06221126 0.25321104]
|
||||
[ 0.96857382 -0.24585225 0.03770167 -0.33940743]
|
||||
[-0.02115539 0.06959961 0.99735066 -0.17940936]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:21:47 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:21:47 - __main__ - INFO: ===采集第16次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/16.jpg
|
||||
2025-08-21 16:21:50 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:22:00 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:22:05 - __main__ - INFO: 当前关节角: [0.2123139522916026, 1.6156225487913838, 1.9870955510359554, 1.1415721753212567, -3.261262139955614, 0.40399890057186194, -0.2904045856432116]
|
||||
2025-08-21 16:22:05 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.02238853 -0.99787522 -0.06118662 0.27706052]
|
||||
[ 0.9941035 -0.01572528 -0.10728906 -0.21679508]
|
||||
[ 0.10609892 -0.06322787 0.99234331 -0.26052986]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:22:05 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:22:05 - __main__ - INFO: ===采集第17次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/17.jpg
|
||||
2025-08-21 16:22:08 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:22:20 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:22:25 - __main__ - INFO: 当前关节角: [0.7920960399069291, 1.588399136034099, 1.9284805883681642, 1.3829188023637766, -3.1986537013134204, 0.2975713894479991, 1.133828230229938]
|
||||
2025-08-21 16:22:25 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.02514396 -0.85857888 0.51206454 0.37379129]
|
||||
[ 0.99831944 -0.00518728 -0.05771811 -0.22146041]
|
||||
[ 0.05221177 0.51265524 0.85700556 -0.00260762]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:22:25 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:22:25 - __main__ - INFO: ===采集第18次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/18.jpg
|
||||
2025-08-21 16:22:28 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:22:38 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 16:22:42 - __main__ - INFO: 当前关节角: [0.5278507627739604, 1.75270689378007, 1.4620754384535017, 1.2688669510862645, -3.519189238793925, -0.41788541353348263, 0.5962609901386524]
|
||||
2025-08-21 16:22:42 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 0.30642283 -0.90783743 0.28624507 0.37152839]
|
||||
[ 0.94130348 0.33372329 0.05075938 -0.05876817]
|
||||
[-0.14160791 0.25388965 0.95681098 -0.11450045]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 16:22:42 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 16:22:42 - __main__ - INFO: ===采集第19次数据! pose 已保存到 eye_hand_data/data2025082101/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082101/19.jpg
|
||||
2025-08-21 16:22:45 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 16:22:51 - __main__ - INFO: 检测到 'q',退出程序
|
||||
2025-08-21 16:22:52 - __main__ - INFO: 相机已关闭,窗口已销毁
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-08-21 16:23:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 读 eye_hand_data/data2025082101/19.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_19.jpg
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.99574619 0.06505242 0.06525112]
|
||||
[-0.06118047 0.06271804 -0.9961543 ]
|
||||
[-0.06889468 -0.99590895 -0.05847131]]
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 平移向量是:
|
||||
[[-0.00932961]
|
||||
[-0.17733044]
|
||||
[ 0.07299168]]
|
||||
2025-08-21 16:23:13 - __main__ - INFO: 四元数是:
|
||||
[ 0.0013306 0.72748463 -0.68457228 0.04609919]
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-08-21 16:25:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 读 eye_hand_data/data2025082101/19.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_19.jpg
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.99574619 0.06505242 0.06525112]
|
||||
[-0.06118047 0.06271804 -0.9961543 ]
|
||||
[-0.06889468 -0.99590895 -0.05847131]]
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 平移向量是:
|
||||
[[-0.00932961]
|
||||
[-0.17733044]
|
||||
[ 0.07299168]]
|
||||
2025-08-21 16:25:47 - __main__ - INFO: 四元数是:
|
||||
[ 0.0013306 0.72748463 -0.68457228 0.04609919]
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-08-21 16:26:08 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-08-21 16:26:09 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-08-21 16:26:09 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-08-21 16:26:09 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-08-21 16:26:09 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-08-21 16:26:09 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-08-21 16:26:09 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-08-21 16:26:09 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-08-21 16:26:09 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.99486349 0.07846371 0.06395369]
|
||||
[-0.05884529 0.06577685 -0.9960977 ]
|
||||
[-0.08236419 -0.99474462 -0.06082177]]
|
||||
2025-08-21 16:26:09 - __main__ - INFO: 平移向量是:
|
||||
[[-0.00797824]
|
||||
[-0.17640328]
|
||||
[ 0.07459845]]
|
||||
2025-08-21 16:26:09 - __main__ - INFO: 四元数是:
|
||||
[ 0.00673467 0.72826199 -0.68342243 0.05022845]
|
||||
2025-08-21 17:18:15 - libs.auxiliary - INFO: create folder eye_hand_data/data2025082102
|
||||
2025-08-21 17:18:15 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-08-21 17:18:34 - __main__ - INFO: 当前关节角: [0.0020332839403781207, 1.3408007778845155, 1.0441700907637408e-05, 0.3222679105856357, 2.752812057468044e-05, 0.001749459524797795, -0.09380919019975154]
|
||||
2025-08-21 17:18:34 - __main__ - INFO: 获取位姿成功:
|
||||
[[ 9.99992854e-01 -3.77482620e-03 -2.04576300e-04 3.09996779e-02]
|
||||
[-1.98775400e-04 1.53703370e-03 -9.99998799e-01 -2.05056032e-01]
|
||||
[ 3.77513610e-03 9.99991694e-01 1.53627240e-03 -4.49243316e-01]
|
||||
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
|
||||
2025-08-21 17:18:34 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 17:18:34 - __main__ - INFO: ===采集第1次数据! pose 已保存到 eye_hand_data/data2025082102/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082102/1.jpg
|
||||
2025-08-21 17:18:36 - __main__ - INFO: 检测到 'q',退出程序
|
||||
2025-08-21 17:18:36 - __main__ - INFO: 相机已关闭,窗口已销毁
|
||||
2025-08-21 17:19:10 - libs.auxiliary - INFO: create folder eye_hand_data/data2025082103
|
||||
2025-08-21 17:19:10 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-08-21 17:19:15 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 17:19:46 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-08-21 17:19:50 - __main__ - INFO: 当前关节角: [0.8979217293602972, 1.0614919233239744, 0.02469082566441424, 0.3463407774054252, -1.1223005924279064, 0.6689039033530859, -0.09368958526208224]
|
||||
2025-08-21 17:19:50 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.17316325 -0.89563008 0.40970873 0.35893735]
|
||||
[ 0.79070696 -0.37443718 -0.48433387 -0.30959237]
|
||||
[ 0.58719417 0.24009071 0.7730197 -0.22790869]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-08-21 17:19:50 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-08-21 17:19:50 - __main__ - INFO: ===采集第1次数据! pose 已保存到 eye_hand_data/data2025082103/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025082103/1.jpg
|
||||
2025-08-21 17:19:53 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 17:21:50 - __main__ - INFO: 检测到 'q',退出程序
|
||||
2025-08-21 17:21:51 - __main__ - INFO: 相机已关闭,窗口已销毁
|
||||
2025-08-21 17:21:57 - libs.auxiliary - INFO: create folder eye_hand_data/data2025082104
|
||||
2025-08-21 17:21:57 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-08-21 17:22:07 - __main__ - INFO: robot.torqueOff
|
||||
2025-08-21 17:22:16 - __main__ - INFO: 相机已关闭,窗口已销毁
|
||||
2025-08-21 18:00:33 - libs.auxiliary - INFO: create folder eye_hand_data/data2025082105
|
||||
2025-08-21 18:00:33 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-08-21 18:00:45 - __main__ - INFO: 检测到 'q',退出程序
|
||||
2025-08-21 18:00:45 - __main__ - INFO: 相机已关闭,窗口已销毁
|
||||
2025-08-21 18:01:14 - libs.auxiliary - INFO: create folder eye_hand_data/data2025082106
|
||||
2025-08-21 18:01:14 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-08-21 18:01:32 - __main__ - INFO: 检测到 'q',退出程序
|
||||
2025-08-21 18:01:32 - __main__ - INFO: 相机已关闭,窗口已销毁
|
||||
@ -1,46 +0,0 @@
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-08-23 16:08:45 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-08-23 16:08:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-08-23 16:08:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-08-23 16:08:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-08-23 16:08:46 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-08-23 16:08:46 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-08-23 16:08:46 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.99486349 0.07846371 0.06395369]
|
||||
[-0.05884529 0.06577685 -0.9960977 ]
|
||||
[-0.08236419 -0.99474462 -0.06082177]]
|
||||
2025-08-23 16:08:46 - __main__ - INFO: 平移向量是:
|
||||
[[-0.00797824]
|
||||
[-0.17640328]
|
||||
[ 0.07459845]]
|
||||
2025-08-23 16:08:46 - __main__ - INFO: 四元数是:
|
||||
[ 0.00673467 0.72826199 -0.68342243 0.05022845]
|
||||
@ -1,167 +0,0 @@
|
||||
2025-09-05 16:02:35 - libs.auxiliary - INFO: create folder eye_hand_data/data20250905
|
||||
2025-09-05 16:04:01 - libs.auxiliary - INFO: create folder eye_hand_data/data2025090501
|
||||
2025-09-05 16:04:01 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-09-05 16:05:28 - libs.auxiliary - INFO: create folder eye_hand_data/data2025090502
|
||||
2025-09-05 16:05:28 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-09-05 16:05:42 - libs.auxiliary - INFO: create folder eye_hand_data/data2025090503
|
||||
2025-09-05 16:05:42 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-09-05 16:05:48 - __main__ - INFO: 相机已关闭,窗口已销毁
|
||||
2025-09-05 16:09:41 - libs.auxiliary - INFO: create folder eye_hand_data/data2025090504
|
||||
2025-09-05 16:09:41 - __main__ - INFO: 开始机器人数据采集程序,版本 V1.0.0
|
||||
2025-09-05 16:12:46 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-09-05 16:12:53 - __main__ - INFO: 当前关节角: [-0.020066101407867926, 1.46894512840519, 1.4589372327079881, 0.15968113499835065, 0.0808671765475035, -0.13818357132059936, -0.2431388026164853]
|
||||
2025-09-05 16:12:53 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.10992689 0.05250327 -0.99255201 -0.00608509]
|
||||
[ 0.0426073 -0.99743702 -0.0574805 -0.22011888]
|
||||
[-0.99302603 -0.04860861 0.10740812 -0.73570586]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-09-05 16:12:53 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-09-05 16:12:53 - __main__ - INFO: ===采集第1次数据! pose 已保存到 eye_hand_data/data2025090504/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025090504/1.jpg
|
||||
2025-09-05 16:12:56 - __main__ - INFO: robot.torqueOff
|
||||
2025-09-05 16:25:21 - __main__ - INFO: robot.torqueOn ,请勿触摸机器人
|
||||
2025-09-05 16:25:26 - __main__ - INFO: 当前关节角: [-0.019045662455530632, 0.14962957400644405, 1.3928232302974393, -0.07693350304193537, -1.3815034772680232, 0.03932344561816248, -0.20795691527650662]
|
||||
2025-09-05 16:25:26 - __main__ - INFO: 获取位姿成功:
|
||||
[[-0.03644065 0.99920824 0.01596754 -0.01550389]
|
||||
[-0.99665653 -0.03750756 0.07258755 -0.94854757]
|
||||
[ 0.07312898 -0.01326902 0.99723422 -0.00291912]
|
||||
[ 0. 0. 0. 1. ]]
|
||||
2025-09-05 16:25:26 - __main__ - INFO: 请按 p 失能机器人,并手动移动机器人到其他位姿
|
||||
2025-09-05 16:25:26 - __main__ - INFO: ===采集第2次数据! pose 已保存到 eye_hand_data/data2025090504/RobotToolPose.csv, 图片保存到 eye_hand_data/data2025090504/2.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-09-05 17:21:03 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-09-05 17:21:04 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-09-05 17:21:04 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-09-05 17:21:04 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-09-05 17:21:04 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-09-05 17:21:04 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-09-05 17:21:04 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-09-05 17:21:04 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-09-05 17:21:04 - __main__ - INFO: 旋转矩阵是:
|
||||
[[ 0.05477568 0.03458859 0.99789942]
|
||||
[-0.99767126 0.04257346 0.0532875 ]
|
||||
[-0.04064089 -0.99849443 0.03684003]]
|
||||
2025-09-05 17:21:04 - __main__ - INFO: 平移向量是:
|
||||
[[-0.14908435]
|
||||
[-0.19737896]
|
||||
[-0.05964516]]
|
||||
2025-09-05 17:21:04 - __main__ - INFO: 四元数是:
|
||||
[-0.49380213 0.48758531 -0.48463669 0.53249159]
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-09-05 17:26:27 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.99486349 0.07846371 0.06395369]
|
||||
[-0.05884529 0.06577685 -0.9960977 ]
|
||||
[-0.08236419 -0.99474462 -0.06082177]]
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 平移向量是:
|
||||
[[-0.00797824]
|
||||
[-0.17640328]
|
||||
[ 0.07459845]]
|
||||
2025-09-05 17:26:28 - __main__ - INFO: 四元数是:
|
||||
[ 0.00673467 0.72826199 -0.68342243 0.05022845]
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/1.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_1.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/2.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_2.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/3.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_3.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/4.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_4.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/5.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_5.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/6.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_6.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/7.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_7.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/8.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_8.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/9.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_9.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/10.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_10.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/11.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_11.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/12.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_12.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/13.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_13.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/14.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_14.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/15.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_15.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/16.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_16.jpg
|
||||
2025-09-05 17:45:12 - __main__ - INFO: 读 eye_hand_data/data2025082101/17.jpg
|
||||
2025-09-05 17:45:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_17.jpg
|
||||
2025-09-05 17:45:13 - __main__ - INFO: 读 eye_hand_data/data2025082101/18.jpg
|
||||
2025-09-05 17:45:13 - __main__ - INFO: 保存带角点的图片到: eye_hand_data/data2025082101/corner/corner_18.jpg
|
||||
2025-09-05 17:45:13 - __main__ - INFO: 旋转矩阵是:
|
||||
[[-0.99486349 0.07846371 0.06395369]
|
||||
[-0.05884529 0.06577685 -0.9960977 ]
|
||||
[-0.08236419 -0.99474462 -0.06082177]]
|
||||
2025-09-05 17:45:13 - __main__ - INFO: 平移向量是:
|
||||
[[-0.00797824]
|
||||
[-0.17640328]
|
||||
[ 0.07459845]]
|
||||
2025-09-05 17:45:13 - __main__ - INFO: 四元数是:
|
||||
[ 0.00673467 0.72826199 -0.68342243 0.05022845]
|
||||