Skip to content
This repository was archived by the owner on May 11, 2025. It is now read-only.

Commit 4d73525

Browse files
authored
✨ Add hal::rmd::drc_angular_velocity_sensor (#69)
1 parent aec64d2 commit 4d73525

3 files changed

Lines changed: 50 additions & 4 deletions

File tree

conanfile.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
class libhal_rmd_conan(ConanFile):
2626
name = "libhal-rmd"
27-
version = "3.0.1"
27+
version = "3.1.0"
2828
license = "Apache-2.0"
2929
url = "https://github.com/conan-io/conan-center-index"
3030
homepage = "https://libhal.github.io/libhal-rmd"
@@ -64,7 +64,7 @@ def build_requirements(self):
6464
self.test_requires("boost-ext-ut/1.1.9")
6565

6666
def requirements(self):
67-
self.requires("libhal/[^2.0.3]", transitive_headers=True)
67+
self.requires("libhal/[^2.1.0]", transitive_headers=True)
6868
self.requires("libhal-util/[^3.0.1]")
6969
self.requires("libhal-canrouter/[^1.0.0]")
7070

include/libhal-rmd/drc.hpp

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <cstdint>
1818

1919
#include <libhal-canrouter/can_router.hpp>
20+
#include <libhal/angular_velocity_sensor.hpp>
2021
#include <libhal/can.hpp>
2122
#include <libhal/motor.hpp>
2223
#include <libhal/rotation_sensor.hpp>
@@ -336,13 +337,39 @@ class drc_servo : public hal::servo
336337
*
337338
* @param p_drc - reference to a drc driver. This object's lifetime must
338339
* exceed the lifetime of the returned object.
339-
* @param p_max_speed - maximum speed of the motor when moving to an angle
340-
* @return result<drc_servo> - motor implementation based on the drc driver
340+
* @param p_max_speed - maximum speed of the servo when moving to an angle
341+
* @return result<drc_servo> - servo implementation based on the drc driver
341342
*/
342343
result<drc_servo> make_servo(drc& p_drc, hal::rpm p_max_speed);
344+
345+
/**
346+
* @brief angular velocity sensor adaptor for DRC
347+
*
348+
*/
349+
class drc_angular_velocity_sensor : public hal::angular_velocity_sensor
350+
{
351+
private:
352+
drc_angular_velocity_sensor(drc& p_drc);
353+
result<angular_velocity_sensor::read_t> driver_read() override;
354+
friend result<drc_angular_velocity_sensor> make_angular_velocity_sensor(
355+
drc& p_drc);
356+
drc* m_drc = nullptr;
357+
};
358+
359+
/**
360+
* @brief Create a hal::angular_velocity_sensor driver using the drc driver
361+
*
362+
* @param p_drc - reference to a drc driver. This object's lifetime must exceed
363+
* the lifetime of the returned object
364+
* @return result<angular_velocity_sensor> - angular_velocity_sensor
365+
* implementation based on the drc driver
366+
*/
367+
result<drc_angular_velocity_sensor> make_angular_velocity_sensor(drc& p_drc);
368+
343369
} // namespace hal::rmd
344370

345371
namespace hal {
372+
using rmd::make_angular_velocity_sensor;
346373
using rmd::make_motor;
347374
using rmd::make_rotation_sensor;
348375
using rmd::make_servo;

src/drc_adaptors.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,23 @@ result<int> make_servo(hal::rpm p_max_speed)
9494
{
9595
return static_cast<int>(5 * p_max_speed);
9696
}
97+
98+
drc_angular_velocity_sensor::drc_angular_velocity_sensor(drc& p_drc)
99+
: m_drc(&p_drc)
100+
{
101+
}
102+
103+
result<angular_velocity_sensor::read_t>
104+
drc_angular_velocity_sensor::driver_read()
105+
{
106+
HAL_CHECK(m_drc->feedback_request(drc::read::status_2));
107+
108+
return angular_velocity_sensor::read_t{ .angular_velocity =
109+
m_drc->feedback().speed() };
110+
}
111+
112+
result<drc_angular_velocity_sensor> make_angular_velocity_sensor(drc& p_drc)
113+
{
114+
return drc_angular_velocity_sensor(p_drc);
115+
}
97116
} // namespace hal::rmd

0 commit comments

Comments
 (0)