Skip to content
This repository was archived by the owner on Dec 1, 2020. It is now read-only.

Commit b537910

Browse files
author
Olav de Haas
committed
Add transmission variable for incremental encoders to calculate radians
1 parent cfc9847 commit b537910

24 files changed

+50
-20
lines changed

march_hardware/include/march_hardware/Joint.h

-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ class Joint
7979

8080
void setName(const std::string& name);
8181
void setAllowActuation(bool allowActuation);
82-
void setIMotionCube(const IMotionCube& iMotionCube);
8382
void setTemperatureGes(const TemperatureGES& temperatureGes);
8483
void setNetNumber(int netNumber);
8584
};

march_hardware/include/march_hardware/encoder/IncrementalEncoder.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace march
1111
class IncrementalEncoder : public Encoder
1212
{
1313
public:
14-
explicit IncrementalEncoder(size_t number_of_bits);
14+
IncrementalEncoder(size_t number_of_bits, double transmission);
1515

1616
double getAngleRad(uint8_t byte_offset);
1717

@@ -28,6 +28,9 @@ class IncrementalEncoder : public Encoder
2828
return os << "slaveIndex: " << encoder.getSlaveIndex() << ", "
2929
<< "totalPositions: " << encoder.getTotalPositions();
3030
}
31+
32+
private:
33+
const double transmission_;
3134
};
3235
} // namespace march
3336

march_hardware/src/Joint.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,7 @@ void Joint::setAllowActuation(bool allowActuation)
150150
{
151151
Joint::allowActuation = allowActuation;
152152
}
153-
void Joint::setIMotionCube(const IMotionCube& iMotionCube)
154-
{
155-
Joint::iMotionCube = iMotionCube;
156-
}
153+
157154
void Joint::setTemperatureGes(const TemperatureGES& temperatureGes)
158155
{
159156
temperatureGES = temperatureGes;

march_hardware/src/encoder/IncrementalEncoder.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
namespace march
77
{
8-
IncrementalEncoder::IncrementalEncoder(size_t number_of_bits) : Encoder(number_of_bits)
8+
IncrementalEncoder::IncrementalEncoder(size_t number_of_bits, double transmission)
9+
: Encoder(number_of_bits), transmission_(transmission)
910
{
1011
}
1112

@@ -16,6 +17,6 @@ double IncrementalEncoder::getAngleRad(uint8_t byte_offset)
1617

1718
double IncrementalEncoder::toRad(int32_t iu)
1819
{
19-
return iu * 2 * M_PI / Encoder::getTotalPositions();
20+
return iu * this->transmission_ * 2 * M_PI / Encoder::getTotalPositions();
2021
}
2122
} // namespace march

march_hardware/test/encoder/TestIncrementalEncoder.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ class TestIncrementalEncoder : public testing::Test
99
{
1010
protected:
1111
const size_t resolution = 12;
12-
march::IncrementalEncoder encoder = march::IncrementalEncoder(this->resolution);
12+
const double transmission = 100;
13+
march::IncrementalEncoder encoder = march::IncrementalEncoder(this->resolution, this->transmission);
1314
};
1415

1516
TEST_F(TestIncrementalEncoder, ZeroIUToRad)
@@ -20,6 +21,6 @@ TEST_F(TestIncrementalEncoder, ZeroIUToRad)
2021
TEST_F(TestIncrementalEncoder, CorrectToRad)
2122
{
2223
const int32_t iu = 1000;
23-
const double expected = iu * 2.0 * M_PI / std::pow(2, this->resolution);
24+
const double expected = iu * this->transmission * 2.0 * M_PI / std::pow(2, this->resolution);
2425
ASSERT_EQ(expected, this->encoder.toRad(iu));
2526
}

march_hardware/test/mocks/MockIncrementalEncoder.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
class MockIncrementalEncoder : public march::IncrementalEncoder
66
{
77
public:
8-
MockIncrementalEncoder() : IncrementalEncoder(10)
8+
MockIncrementalEncoder() : IncrementalEncoder(10, 100.0)
99
{
1010
}
1111

march_hardware_builder/robots/march4.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ march4:
1515
maxPositionIU: 4091
1616
incrementalEncoder:
1717
resolution: 13
18+
transmission: 200
1819

1920
- left_hip_aa:
2021
actuationMode: torque
@@ -29,6 +30,7 @@ march4:
2930
maxPositionIU: 1426
3031
incrementalEncoder:
3132
resolution: 13
33+
transmission: 200
3234

3335
- right_hip_fe:
3436
actuationMode: torque
@@ -43,6 +45,7 @@ march4:
4345
maxPositionIU: 45617
4446
incrementalEncoder:
4547
resolution: 12
48+
transmission: 101
4649

4750
- left_hip_fe:
4851
actuationMode: torque
@@ -57,6 +60,7 @@ march4:
5760
maxPositionIU: 40270
5861
incrementalEncoder:
5962
resolution: 12
63+
transmission: 101
6064

6165
- right_knee:
6266
actuationMode: torque
@@ -71,6 +75,7 @@ march4:
7175
maxPositionIU: 68874
7276
incrementalEncoder:
7377
resolution: 12
78+
transmission: 101
7479

7580
- left_knee:
7681
actuationMode: torque
@@ -85,6 +90,7 @@ march4:
8590
maxPositionIU: 63543
8691
incrementalEncoder:
8792
resolution: 12
93+
transmission: 101
8894

8995
- right_ankle:
9096
actuationMode: torque
@@ -99,6 +105,7 @@ march4:
99105
maxPositionIU: 1210
100106
incrementalEncoder:
101107
resolution: 13
108+
transmission: 200
102109

103110
- left_ankle:
104111
actuationMode: torque
@@ -113,3 +120,4 @@ march4:
113120
maxPositionIU: 4082
114121
incrementalEncoder:
115122
resolution: 13
123+
transmission: 200

march_hardware_builder/robots/test_joint_linear.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ testjoint_linear:
1313
maxPositionIU: 445
1414
incrementalEncoder:
1515
resolution: 13
16+
transmission: 200

march_hardware_builder/robots/test_joint_rotational.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ testsetup:
1313
maxPositionIU: 102499
1414
incrementalEncoder:
1515
resolution: 12
16+
transmission: 101

march_hardware_builder/src/hardware_builder.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const std::vector<std::string> HardwareBuilder::ABSOLUTE_ENCODER_REQUIRED_KEYS =
1212
{
1313
"resolution", "minPositionIU", "maxPositionIU"
1414
};
15-
const std::vector<std::string> HardwareBuilder::INCREMENTAL_ENCODER_REQUIRED_KEYS = { "resolution" };
15+
const std::vector<std::string> HardwareBuilder::INCREMENTAL_ENCODER_REQUIRED_KEYS = { "resolution", "transmission" };
1616
const std::vector<std::string> HardwareBuilder::IMOTIONCUBE_REQUIRED_KEYS =
1717
{
1818
"slaveIndex", "incrementalEncoder", "absoluteEncoder"
@@ -168,7 +168,8 @@ march::IncrementalEncoder HardwareBuilder::createIncrementalEncoder(const YAML::
168168
HardwareBuilder::INCREMENTAL_ENCODER_REQUIRED_KEYS, "incrementalEncoder");
169169

170170
auto resolution = incremental_encoder_config["resolution"].as<size_t>();
171-
return march::IncrementalEncoder(resolution);
171+
auto transmission = incremental_encoder_config["transmission"].as<double>();
172+
return { resolution, transmission };
172173
}
173174

174175
march::TemperatureGES HardwareBuilder::createTemperatureGES(const YAML::Node& temperature_ges_config)

march_hardware_builder/test/imc_builder_test.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ TEST_F(IMotionCubeTest, ValidIMotionCubeHip)
4545
march::AbsoluteEncoder absolute_encoder =
4646
march::AbsoluteEncoder(16, 22134, 43436, this->joint->limits->lower, this->joint->limits->upper,
4747
this->joint->safety->soft_lower_limit, this->joint->safety->soft_upper_limit);
48-
march::IncrementalEncoder incremental_encoder = march::IncrementalEncoder(12);
48+
march::IncrementalEncoder incremental_encoder = march::IncrementalEncoder(12, 101.0);
4949
march::IMotionCube expected =
5050
march::IMotionCube(2, absolute_encoder, incremental_encoder, march::ActuationMode::unknown);
5151

march_hardware_builder/test/incremental_encoder_builder_test.cpp

+9-2
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,21 @@ TEST_F(TestIncrementalEncoderBuilder, ValidIncrementalEncoder)
2929
{
3030
YAML::Node config = this->loadTestYaml("/incremental_encoder_correct.yaml");
3131

32-
march::IncrementalEncoder expected = march::IncrementalEncoder(12);
32+
march::IncrementalEncoder expected = march::IncrementalEncoder(12, 45.5);
3333
march::IncrementalEncoder created = HardwareBuilder::createIncrementalEncoder(config);
3434
ASSERT_EQ(expected, created);
3535
}
3636

3737
TEST_F(TestIncrementalEncoderBuilder, NoResolution)
3838
{
39-
YAML::Node config;
39+
YAML::Node config = this->loadTestYaml("/incremental_encoder_no_resolution.yaml");
40+
41+
ASSERT_THROW(HardwareBuilder::createIncrementalEncoder(config), MissingKeyException);
42+
}
43+
44+
TEST_F(TestIncrementalEncoderBuilder, NoTransmission)
45+
{
46+
YAML::Node config = this->loadTestYaml("/incremental_encoder_no_transmission.yaml");
4047

4148
ASSERT_THROW(HardwareBuilder::createIncrementalEncoder(config), MissingKeyException);
4249
}

march_hardware_builder/test/joint_builder_test.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ TEST_F(JointTest, ValidJointHip)
4545
march::AbsoluteEncoder absolute_encoder =
4646
march::AbsoluteEncoder(16, 22134, 43436, this->joint->limits->lower, this->joint->limits->upper,
4747
this->joint->safety->soft_lower_limit, this->joint->safety->soft_upper_limit);
48-
march::IncrementalEncoder incremental_encoder = march::IncrementalEncoder(12);
48+
march::IncrementalEncoder incremental_encoder = march::IncrementalEncoder(12, 50.0);
4949
march::IMotionCube imc = march::IMotionCube(2, absolute_encoder, incremental_encoder, march::ActuationMode::unknown);
5050
march::TemperatureGES ges = march::TemperatureGES(1, 2);
5151
march::Joint expected(imc);
@@ -70,7 +70,7 @@ TEST_F(JointTest, ValidNotActuated)
7070
march::AbsoluteEncoder absolute_encoder =
7171
march::AbsoluteEncoder(16, 22134, 43436, this->joint->limits->lower, this->joint->limits->upper,
7272
this->joint->safety->soft_lower_limit, this->joint->safety->soft_upper_limit);
73-
march::IncrementalEncoder incremental_encoder = march::IncrementalEncoder(12);
73+
march::IncrementalEncoder incremental_encoder = march::IncrementalEncoder(12, 50.0);
7474
march::IMotionCube imc = march::IMotionCube(2, absolute_encoder, incremental_encoder, march::ActuationMode::unknown);
7575
march::TemperatureGES ges = march::TemperatureGES(1, 2);
7676
march::Joint expected(imc);
@@ -122,7 +122,7 @@ TEST_F(JointTest, ValidActuationMode)
122122
1,
123123
march::AbsoluteEncoder(16, 22134, 43436, this->joint->limits->lower, this->joint->limits->upper,
124124
this->joint->safety->soft_lower_limit, this->joint->safety->soft_upper_limit),
125-
march::IncrementalEncoder(12), march::ActuationMode::position));
125+
march::IncrementalEncoder(12, 50.0), march::ActuationMode::position));
126126
expected.setName("test_joint_hip");
127127

128128
ASSERT_EQ("test_joint_hip", expected.getName());
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
resolution: 12
1+
resolution: 12
2+
transmission: 45.5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
transmission: 45.5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
resolution: 13

march_hardware_builder/test/yaml/imotioncube/imotioncube_correct.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ absoluteEncoder:
77
safetyMarginRad: 0.05
88
incrementalEncoder:
99
resolution: 12
10+
transmission: 101
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
slaveIndex: 2
22
incrementalEncoder:
33
resolution: 12
4+
transmission: 100

march_hardware_builder/test/yaml/imotioncube/imotioncube_no_slave_index.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ absoluteEncoder:
44
maxPositionIU: 43436
55
incrementalEncoder:
66
resolution: 12
7+
transmission: 75.1

march_hardware_builder/test/yaml/joint/joint_correct.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ imotioncube:
77
maxPositionIU: 43436
88
incrementalEncoder:
99
resolution: 12
10+
transmission: 50.0
1011
temperatureges:
1112
slaveIndex: 1
1213
byteOffset: 2

march_hardware_builder/test/yaml/joint/joint_correct_not_actuated.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ imotioncube:
77
maxPositionIU: 43436
88
incrementalEncoder:
99
resolution: 12
10+
transmission: 50.0
1011
temperatureges:
1112
slaveIndex: 1
1213
byteOffset: 2

march_hardware_builder/test/yaml/joint/joint_correct_position_mode.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ imotioncube:
88
maxPositionIU: 43436
99
incrementalEncoder:
1010
resolution: 12
11+
transmission: 50.0

march_hardware_builder/test/yaml/joint/joint_no_actuate.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ imotioncube:
66
maxPositionIU: 43436
77
incrementalEncoder:
88
resolution: 12
9+
transmission: 14.0
910
temperatureges:
1011
slaveIndex: 1
1112
byteOffset: 2

march_hardware_builder/test/yaml/joint/joint_no_temperature_ges.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ imotioncube:
77
maxPositionIU: 40000
88
incrementalEncoder:
99
resolution: 12
10+
transmission: 45.0

0 commit comments

Comments
 (0)