10#include <gtest/gtest.h>
18namespace fs = std::filesystem;
20static constexpr double kTargetPose[7] = { 0.3, 0.5, 2.9, -2.0, 0.3, 1.2, 1.3 };
21static constexpr double kVelGain = 500.0;
22static constexpr double kKv = 2.0;
23static constexpr double kMaxVel = 0.6;
24static constexpr double kTol = 0.01;
25static constexpr double kTimeout = 5.0;
27TEST(MjcfVelCtrlTest, ConvergesInVelocityMode)
30 if (!fs::exists(arm)) GTEST_SKIP() << arm <<
" not found";
49 while (env.
data->time < kTimeout) {
52 for (
int i = 0; i < 7; ++i) {
53 const double err = kTargetPose[i] - robot.
jnt_pos_msr[i];
54 max_err = std::max(max_err, std::abs(err));
57 if (max_err < kTol)
break;
60 EXPECT_LT(max_err, kTol);
61 EXPECT_LT(env.
data->time, 2.5) <<
"measured 1.93 s";
64int main(
int argc,
char *argv[])
66 testing::InitGoogleTest(&argc, argv);
67 return RUN_ALL_TESTS();
Status init_env(Env *env, const SceneSpec *spec)
Status set_control_mode(Robot *r, CtrlMode mode)
Status init_robot_from_mjcf(Robot *r, Env *env, const char *base_body, const char *tip_body, const char *prefix="", const ToolFrameSpec *tool=nullptr)
void set_joint_pos(Robot *r, const KDL::JntArray &q)
double clamp_abs(double v, double limit)
std::string find_asset(const fs::path &relative)
KDL::JntArray home_q(unsigned n)
std::vector< double > jnt_vel_cmd
std::vector< double > jnt_pos_msr
std::vector< CtrlModeSpec > modes
std::vector< RobotSpec > robots
int main(int argc, char *argv[])
TEST(MjcfVelCtrlTest, ConvergesInVelocityMode)