13 #include <mjbots/pi3hat/pi3hat.h>
15 #include <spdlog/spdlog.h>
17 #include <Eigen/Geometry>
18 #include <condition_variable>
31 #include "vulp/actuation/moteus/protocol.h"
52 const Pi3Hat::Configuration& pi3hat_config);
61 void reset(
const Dictionary& config)
override;
67 void observe(Dictionary& observation)
const override;
79 std::function<
void(
const moteus::Output&)> callback)
final;
86 void run_can_thread();
92 moteus::Output cycle_can_thread();
99 Eigen::Quaterniond get_attitude()
const noexcept {
100 const double w = attitude_.attitude.w;
101 const double x = attitude_.attitude.x;
102 const double y = attitude_.attitude.y;
103 const double z = attitude_.attitude.z;
106 return Eigen::Quaterniond(w, x, y, z).normalized();
114 Eigen::Vector3d get_angular_velocity()
const noexcept {
115 const double omega_x = attitude_.rate_dps.x * M_PI / 180.;
116 const double omega_y = attitude_.rate_dps.y * M_PI / 180.;
117 const double omega_z = attitude_.rate_dps.z * M_PI / 180.;
118 return {omega_x, omega_y, omega_z};
126 Eigen::Vector3d get_linear_acceleration()
const noexcept {
127 const double a_x = attitude_.accel_mps2.x;
128 const double a_y = attitude_.accel_mps2.y;
129 const double a_z = attitude_.accel_mps2.z;
130 return {a_x, a_y, a_z};
138 const Pi3Hat::Configuration pi3hat_config_;
144 std::condition_variable can_wait_condition_;
147 bool ongoing_can_cycle_ =
false;
153 std::function<void(
const moteus::Output&)> callback_;
159 std::thread can_thread_;
162 std::unique_ptr<Pi3Hat> pi3hat_;
166 std::vector<::mjbots::pi3hat::CanFrame> tx_can_;
167 std::vector<::mjbots::pi3hat::CanFrame> rx_can_;
170 ::mjbots::pi3hat::Attitude attitude_;
Base class for actuation interfaces.
moteus::Data & data()
Get joint command-reply data.
Interface to moteus controllers.
~Pi3HatInterface()
Stop CAN thread.
void cycle(const moteus::Data &data, std::function< void(const moteus::Output &)> callback) final
Spin a new communication cycle.
Pi3HatInterface(const ServoLayout &layout, const int can_cpu, const Pi3Hat::Configuration &pi3hat_config)
Configure interface and spawn CAN thread.
void observe(Dictionary &observation) const override
Write actuation-interface observations to dictionary.
void reset(const Dictionary &config) override
Reset interface.
Map between servos, their busses and the joints they actuate.
Send actions to actuators or simulators.
::mjbots::pi3hat::Pi3Hat Pi3Hat