Aruna
ActuatorSet.cpp
Go to the documentation of this file.
1 //
2 // Created by noeel on 30-07-19.
3 //
4 
5 #include "aruna/arunaTypes.h"
7 #include <math.h>
8 
9 using namespace aruna::movement;
10 namespace aruna {
11  namespace movement {
12  log::channel_t ActuatorSet::log("ActuatorSet");
13  ActuatorSet::ActuatorSet(transform_t *transform, size_t transform_size) : Actuator(axis_mask_t::NONE), transform(transform),
14  transform_size(transform_size){
15 
18  }
19 
21  err_t err = err_t::OK;
22  err_t last_failure = err;
23  for (int i = 0; i < transform_size; ++i) {
24  if ((uint8_t) transform[i].transform_to & (uint8_t) axisMask) {
25  int32_t adjusted_speed = ((float) speed * (transform[i].speed_percentage / (float) 100.0));
26  adjusted_speed = transform[i].flip_direction ? adjusted_speed * -1: adjusted_speed;
27  adjusted_speed = fmax(adjusted_speed, INT16_MIN);
28  adjusted_speed = fmin(adjusted_speed, INT16_MAX);
29  log.verbose("setting driver transformed: %i, axis: 0x%X, speed:%i", i, transform[i].axis,
30  adjusted_speed);
31  err = transform[i].driver->set(transform[i].axis, (int16_t) adjusted_speed);
32  } else {
33  log.verbose("setting driver: %i, axis: 0x%X, speed:%i", i, axisMask, speed);
34  err = transform[i].driver->set(axisMask, speed);
35  }
36  if ((uint8_t) err) {
37  last_failure = err;
38  }
39  }
40  return last_failure;
41  }
42 
45  for (int i = 0; i < transform_size; ++i) {
46  axis = (axis_mask_t) ((uint8_t) axis | (uint8_t) transform[i].driver->get_axis() |
47  (uint8_t) transform[i].transform_to);
48  }
49  return axis;
50  }
51 
52 
54  err_t err = err_t::OK;
55  err_t last_failure = err;
56  for (int i = 0; i < transform_size; ++i) {
57  err = transform[i].driver->startup_error;
58  if ((uint8_t) err) {
59  last_failure = err;
60  }
61  }
62  return last_failure;
63  }
64 
65  }
66 }
static aruna::log::channel_t log
Definition: ActuatorSet.h:57
Definition: comm.cpp:14
err_t _set(axis_mask_t axisMask, int16_t speed) override
Implementation of axis movement, this function is called from set(...).
Definition: ActuatorSet.cpp:20
err_t set(axis_mask_t axisMask, int16_t speed)
Set the speed of the motors directly.
Definition: Actuator.cpp:20
Actuator * driver
pointer to driver
Definition: ActuatorSet.h:21
err_t set_axis(axis_mask_t new_axis)
Set the axis that this Actuator is capable in moving in.
Definition: Actuator.cpp:40
Link * driver
stores the driver.
Definition: comm.cpp:45
int verbose(const char *format,...)
log verbose message
Definition: log.cpp:38
ActuatorSet(transform_t *transform, size_t transform_size)
put diffrent drivers in a driver set to allow them to cooperate and transform into a different axis w...
Definition: ActuatorSet.cpp:13
axis_mask_t compute_axis()
Get alle the axis from all inside the set and put them together.
Definition: ActuatorSet.cpp:43
err_t startup_error
error when constructing gets put here, read before usage.
Definition: Actuator.h:45
bool flip_direction
flip direction on transform?
Definition: ActuatorSet.h:31