Skip to content

Commit

Permalink
feat: get velocity and effort limits (#75)
Browse files Browse the repository at this point in the history
  • Loading branch information
HiroIshida authored Jun 9, 2024
1 parent 6efef02 commit ec042d6
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
6 changes: 6 additions & 0 deletions include/tinyfk.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,12 @@ class KinematicModel {
std::vector<Bound>
get_joint_position_limits(const std::vector<size_t> &joint_ids) const;

std::vector<double>
get_joint_velocity_limits(const std::vector<size_t> &joint_ids) const;

std::vector<double>
get_joint_effort_limits(const std::vector<size_t> &joint_ids) const;

std::vector<std::string> get_joint_names() const {
std::vector<std::string> joint_names;
for (auto &joint : joints_) {
Expand Down
22 changes: 22 additions & 0 deletions src/tinyfk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,28 @@ std::vector<Bound> KinematicModel::get_joint_position_limits(
return limits;
}

std::vector<double> KinematicModel::get_joint_velocity_limits(
const std::vector<size_t> &joint_ids) const {
const size_t n_joint = joint_ids.size();
std::vector<double> limits(n_joint);
for (size_t i = 0; i < n_joint; i++) {
const auto &joint = joints_[joint_ids[i]];
limits[i] = joint->limits->velocity;
}
return limits;
}

std::vector<double> KinematicModel::get_joint_effort_limits(
const std::vector<size_t> &joint_ids) const {
const size_t n_joint = joint_ids.size();
std::vector<double> limits(n_joint);
for (size_t i = 0; i < n_joint; i++) {
const auto &joint = joints_[joint_ids[i]];
limits[i] = joint->limits->effort;
}
return limits;
}

std::vector<size_t>
KinematicModel::get_link_ids(std::vector<std::string> link_names) const {
int n_link = link_names.size();
Expand Down
9 changes: 9 additions & 0 deletions test/test_parse.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,31 @@ TEST(TEST_PARSE, AllTest) {
auto ids = kin.get_joint_ids(
{"r_forearm_roll_joint", "r_shoulder_pan_joint", "torso_lift_joint"});
auto pos_limits = kin.get_joint_position_limits(ids);
auto vel_limits = kin.get_joint_velocity_limits(ids);
auto eff_limits = kin.get_joint_effort_limits(ids);

// check that limit of r_forearm_roll_joint is continuous
// <limit effort="30" velocity="3.6"/>
EXPECT_EQ(pos_limits[0].first, -std::numeric_limits<double>::infinity());
EXPECT_EQ(pos_limits[0].second, std::numeric_limits<double>::infinity());
EXPECT_EQ(vel_limits[0], 3.6);
EXPECT_EQ(eff_limits[0], 30);

// check that limit of r_shoulder_pan_joint is
// <limit effort="30" lower="-2.2853981634" upper="0.714601836603"
// velocity="2.088"/>
EXPECT_EQ(pos_limits[1].first, -2.2853981634);
EXPECT_EQ(pos_limits[1].second, 0.714601836603);
EXPECT_EQ(pos_limits[1].second, 0.714601836603);
EXPECT_EQ(vel_limits[1], 2.088);
EXPECT_EQ(eff_limits[1], 30);

// check that limit of torso_lift_joint is
// <limit effort="10000" lower="0.0" upper="0.33" velocity="0.013"/>
EXPECT_EQ(pos_limits[2].first, 0.0);
EXPECT_EQ(pos_limits[2].second, 0.33);
EXPECT_EQ(vel_limits[2], 0.013);
EXPECT_EQ(eff_limits[2], 10000);
}

int main(int argc, char **argv) {
Expand Down

0 comments on commit ec042d6

Please sign in to comment.