37 getParameter<uint8_t>(17, param_buffer,
emg_speed);
51 qbSoftHandResearch::qbSoftHandResearch(std::shared_ptr<Communication> communication, std::string name, std::string serial_port, uint8_t
id,
bool init_params, std::unique_ptr<Device::Params> params)
52 :
Device(
std::move(communication),
std::move(name),
std::move(serial_port), id, init_params,
std::move(params)) {}
55 std::vector<int8_t> data_in;
56 const std::vector<int8_t> data_out = Communication::vectorSwapAndCast<int8_t, uint16_t>({speed, cycles});
64 std::vector<int8_t> data_in;
68 emg_values = Communication::vectorCastAndSwap<int16_t>(data_in);
73 std::vector<int8_t> data_in;
77 joystick_values = Communication::vectorCastAndSwap<int16_t>(data_in);
86 std::vector<int8_t> param_buffer;
90 Params::getParameter<uint8_t>(14, param_buffer, use_emg_calibration);
99 std::vector<int8_t> param_buffer;
103 Params::getParameter<uint16_t>(15, param_buffer, emg_thresholds);
108 return getParamEMGMaxValues(std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->emg_max_value);
112 std::vector<int8_t> param_buffer;
116 Params::getParameter<uint32_t>(16, param_buffer, emg_max_value);
121 return getParamEMGSpeed(std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->emg_speed);
125 std::vector<int8_t> param_buffer;
129 Params::getParameter<uint8_t>(17, param_buffer, emg_speed);
138 std::vector<int8_t> param_buffer;
142 Params::getParameter<uint8_t>(18, param_buffer, use_double_encoder);
147 return getParamHandleRatio(std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->handle_ratio);
151 std::vector<int8_t> param_buffer;
155 Params::getParameter<int8_t>(19, param_buffer, handle_ratio);
164 std::vector<int8_t> param_buffer;
168 Params::getParameter<uint8_t>(20, param_buffer, use_pwm_rescaling);
177 std::vector<int8_t> param_buffer;
181 Params::getParameter<float>(21, param_buffer, current_lookup_table);
190 std::vector<int8_t> param_buffer;
194 Params::getParameter<uint8_t>(22, param_buffer, rate_limiter);
199 int set_fail =
setParameter(14, Communication::vectorSwapAndCast<int8_t, uint8_t>({use_emg_calibration}));
201 std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->use_emg_calibration = use_emg_calibration;
207 int set_fail =
setParameter(15, Communication::vectorSwapAndCast<int8_t, uint16_t>(emg_thresholds));
209 std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->emg_thresholds = emg_thresholds;
215 int set_fail =
setParameter(16, Communication::vectorSwapAndCast<int8_t, uint32_t>(emg_max_value));
217 std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->emg_max_value = emg_max_value;
223 int set_fail =
setParameter(17, Communication::vectorSwapAndCast<int8_t, uint8_t>({emg_speed}));
225 std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->emg_speed = emg_speed;
231 int set_fail =
setParameter(18, Communication::vectorSwapAndCast<int8_t, uint8_t>({use_double_encoder}));
233 std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->use_double_encoder = use_double_encoder;
239 int set_fail =
setParameter(19, Communication::vectorSwapAndCast<int8_t, int8_t>({handle_ratio}));
241 std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->handle_ratio = handle_ratio;
247 int set_fail =
setParameter(20, Communication::vectorSwapAndCast<int8_t, uint8_t>({use_pwm_rescaling}));
249 std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->use_pwm_rescaling = use_pwm_rescaling;
255 int set_fail =
setParameter(21, Communication::vectorSwapAndCast<int8_t, float>(current_lookup_table));
257 std::dynamic_pointer_cast<qbrobotics_research_api::qbSoftHandResearch::Params>(
params_)->current_lookup_table = current_lookup_table;
263 int set_fail =
setParameter(22, Communication::vectorSwapAndCast<int8_t, uint8_t>({rate_limiter}));
265 params_->rate_limiter = rate_limiter;
285 std::this_thread::sleep_for(std::chrono::milliseconds(1));
291 if (!set_fail && param_type != 1) {
298 uint8_t previous_id =
params_->id;
309 std::vector<int16_t> positions;
313 std::vector<int16_t> offsets;
317 std::transform(offsets.begin(), offsets.end(), positions.begin(), offsets.begin(), std::minus<int16_t>());