gusimplewhiteboard
HAL_LegTarget.hpp
Go to the documentation of this file.
1
11#ifndef HalLegTarget_DEFINED
12#define HalLegTarget_DEFINED
13
14#include "wb_hal_legtarget.h"
15//#include <cmath>
16#include <sstream>
17
18//#ifndef M_PIF
19//#define M_PIF static_cast<float>(M_PI)
20//#endif // M_PIF
21
22namespace guWhiteboard
23{
55 {
56
57 public:
61// HalLegTarget(const uint8_t &target_leg = LEFT_LEG): wb_hal_legtarget(target_leg) {}
62
70 const float hipyawpitch = 0,
71 const float hiproll = 0,
72 const float hippitch = 0,
73 const float kneepitch = 0,
74 const float anklepitch = 0,
75 const float ankleroll = 0,
76 const float hipyawpitchstiffness = 0,
77 const float hiprollstiffness = 0,
78 const float hippitchstiffness = 0,
79 const float kneepitchstiffness = 0,
80 const float anklepitchstiffness = 0,
81 const float anklerollstiffness = 0,
82 const bool hipyawpitch_active = true,
83 const bool hiproll_active = true,
84 const bool hippitch_active = true,
85 const bool kneepitch_active = true,
86 const bool anklepitch_active = true,
87 const bool ankleroll_active = true,
88 const int32_t movement_time = 1000000,
89 const uint8_t pliability = 10,
90 const bool leg_stop = false,
91 const bool inRadians = false)
93 {
94 if (inRadians) {
98 } else {
102 }
104 set_target_leg_stop(leg_stop);
114 }
115
116
117//MARK: Leg - General
126 void tieToLeg(uint8_t leg)
127 {
128 set_target_leg(leg);
129 }
130
131//MARK: Leg - Movements
132
145 float hiproll,
146 float hippitch,
147 float kneepitch,
148 float anklepitch,
149 float ankleroll,
150 int32_t time = INT_MAX)
151 {
156 }
157
170 float hiproll,
171 float hippitch,
172 float kneepitch,
173 float anklepitch,
174 float ankleroll,
175 int32_t time = INT_MAX)
176 {
181 }
182
189 void stop() {
191 }
192
193
199 void ready() {
200 set_target_leg_stop(false);
201 }
202
203
214 void isAtGoal(bool goalReached)
215 {
216 set_target_leg_at_goal(goalReached);
217 }
218
231 bool atGoal()
232 {
233 return target_leg_at_goal();
234 }
235
249 {
250 int16_t hipyawpitchMargin = static_cast<int16_t>(abs(target_hipyawpitch() - status.target_hipyawpitch()));
251 int16_t hiprollMargin = static_cast<int16_t>(abs(target_hiproll() - status.target_hiproll()));
252 int16_t hippitchMargin = static_cast<int16_t>(abs(target_hippitch() - status.target_hippitch()));
253 int16_t kneepitchMargin = static_cast<int16_t>(abs(target_kneepitch() - status.target_kneepitch()));
254 int16_t anklepitchMargin = static_cast<int16_t>(abs(target_anklepitch() - status.target_anklepitch()));
255 int16_t anklerollMargin = static_cast<int16_t>(abs(target_ankleroll() - status.target_ankleroll()));
256 if ( (hipyawpitchMargin <= tolerance.target_hipyawpitch())
257 && (hiprollMargin <= tolerance.target_hiproll())
258 && (hippitchMargin <= tolerance.target_hippitch())
259 && (kneepitchMargin <= tolerance.target_kneepitch())
260 && (anklepitchMargin <= tolerance.target_anklepitch())
261 && (anklerollMargin <= tolerance.target_ankleroll())
262 )
263 {
264 return true;
265 }
266 return false;
267 }
268
269//MARK: Leg - Pose
270
282 float hiproll,
283 float hippitch,
284 float kneepitch,
285 float anklepitch,
286 float ankleroll)
287 {
294 }
295
307 float hiproll,
308 float hippitch,
309 float kneepitch,
310 float anklepitch,
311 float ankleroll)
312 {
319 }
320
321
328 void mirrorLeg(const HalLegTarget &other)
329 {
330 // Roll and Yaw angles need to be mirrored, others just copied.
351 }
352
359 void copyPose(const HalLegTarget &other)
360 {
367 }
368
375 void mirrorPose(const HalLegTarget &other)
376 {
377 // Roll and Yaw angles need to be mirrored, others just copied.
384 }
385
394 bool hasSamePose(const HalLegTarget &other)
395 {
396 if (
398 && target_hiproll() == other.target_hiproll()
399 && target_hippitch() == other.target_hippitch()
400 && target_kneepitch() == other.target_kneepitch()
402 && target_ankleroll() == other.target_ankleroll()
403 )
404 {
405 return true;
406 }
407 return false;
408 }
409
419 {
420 if (
422 && target_hiproll() == -other.target_hiproll()
423 && target_hippitch() == other.target_hippitch()
424 && target_kneepitch() == other.target_kneepitch()
426 && target_ankleroll() == -other.target_ankleroll()
427 )
428 {
429 return true;
430 }
431 return false;
432 }
433
434//MARK: Leg - Stiffness
435
442 {
449 }
450
458 {
465 }
466
474 void setLegStiffness(float stiffness)
475 {
476 if ((stiffness <= 1.0f) && (stiffness >=0.0f)) {
477 set_hipyawpitchstiffness(stiffness);
478 set_hiprollstiffness(stiffness);
479 set_hippitchstiffness(stiffness);
480 set_kneepitchstiffness(stiffness);
481 set_anklepitchstiffness(stiffness);
482 set_anklerollstiffness(stiffness);
483 }
484 }
485
492 {
499 }
500
501
508 void copyStiffness(const HalLegTarget &other)
509 {
516 }
517
518
519
528 {
529 if (
536 )
537 {
538 return true;
539 }
540 return false;
541 }
542
543//MARK: Leg - Pliability
544
555 {
562 }
563
577 {
584 }
585
586
593 bool kneepitch, bool anklepitch, bool ankleroll)
594 {
601 }
602
609 }
610
617 }
618
625 }
626
627//MARK: CUSTOM SETTERS (Converting floats into Integer representations)
629 void set_hipyawpitch_DEG(float setting) {
630 set_target_hipyawpitch(static_cast<int16_t>(setting * 10.0f));
631 }
632
633 void set_hiproll_DEG(float setting) {
634 set_target_hiproll(static_cast<int16_t>(setting * 10.0f));
635 }
636
637 void set_hippitch_DEG(float setting) {
638 set_target_hippitch(static_cast<int16_t>(setting * 10.0f));
639 }
640
641 void set_kneepitch_DEG(float setting) {
642 set_target_kneepitch(static_cast<int16_t>(setting * 10.0f));
643 }
644
645 void set_anklepitch_DEG(float setting) {
646 set_target_anklepitch(static_cast<int16_t>(setting * 10.0f));
647 }
648
649 void set_ankleroll_DEG(float setting) {
650 set_target_ankleroll(static_cast<int16_t>(setting * 10.0f));
651 }
652
653
655 void set_hipyawpitch_RAD(float setting) {
656 set_target_hipyawpitch(static_cast<int16_t>(setting* DEG_OVER_RAD_10));
657 }
658
659 void set_hiproll_RAD(float setting) {
660 set_target_hiproll(static_cast<int16_t>(setting * DEG_OVER_RAD_10));
661 }
662
663 void set_hippitch_RAD(float setting) {
664 set_target_hippitch(static_cast<int16_t>(setting * DEG_OVER_RAD_10));
665 }
666
667 void set_kneepitch_RAD(float setting) {
668 set_target_kneepitch(static_cast<int16_t>(setting * DEG_OVER_RAD_10));
669 }
670
671 void set_anklepitch_RAD(float setting) {
672 set_target_anklepitch(static_cast<int16_t>(setting * DEG_OVER_RAD_10));
673 }
674
675 void set_ankleroll_RAD(float setting) {
676 set_target_ankleroll(static_cast<int16_t>(setting * DEG_OVER_RAD_10));
677 }
678
680 void set_hipyawpitchstiffness(float setting) {
681 set_target_hipyawpitchstiffness(static_cast<uint8_t>(setting * 100.0f));
682 }
683
684 void set_hiprollstiffness(float setting) {
685 set_target_hiprollstiffness(static_cast<uint8_t>(setting * 100.0f));
686 }
687
688 void set_hippitchstiffness(float setting) {
689 set_target_hippitchstiffness(static_cast<uint8_t>(setting * 100.0f));
690 }
691
692 void set_kneepitchstiffness(float setting) {
693 set_target_kneepitchstiffness(static_cast<uint8_t>(setting * 100.0f));
694 }
695
696 void set_anklepitchstiffness(float setting) {
697 set_target_anklepitchstiffness(static_cast<uint8_t>(setting * 100.0f));
698 }
699
700 void set_anklerollstiffness(float setting) {
701 set_target_anklerollstiffness(static_cast<uint8_t>(setting * 100.0f));
702 }
703
704
706// void set_movement_time(int32_t time) {
707// set_target_movement_time(time);
708// }
709
710//MARK: CUSTOM GETTERS (Converting Integer representations back to floats)
713 return static_cast<float>(target_hipyawpitch() * 0.1f);
714 }
715
717 return static_cast<float>(target_hiproll() * 0.1f);
718 }
719
721 return static_cast<float>(target_hippitch() * 0.1f);
722 }
723
725 return static_cast<float>(target_kneepitch() * 0.1f);
726 }
727
729 return static_cast<float>(target_anklepitch() * 0.1f);
730 }
731
733 return static_cast<float>(target_ankleroll() * 0.1f);
734 }
735
736
739 return static_cast<float>(target_hipyawpitch()) * RAD_OVER_DEG_10;
740 }
741
743 return static_cast<float>(target_hiproll()) * RAD_OVER_DEG_10;
744 }
745
747 return static_cast<float>(target_hippitch()) * RAD_OVER_DEG_10;
748 }
749
751 return static_cast<float>(target_kneepitch()) * RAD_OVER_DEG_10;
752 }
753
755 return static_cast<float>(target_anklepitch()) * RAD_OVER_DEG_10;
756 }
757
759 return static_cast<float>(target_ankleroll()) * RAD_OVER_DEG_10;
760 }
761
764 return static_cast<float>(target_hipyawpitchstiffness()) * 0.01f;
765 }
766
768 return static_cast<float>(target_hiprollstiffness()) * 0.01f;
769 }
770
772 return static_cast<float>(target_hippitchstiffness()) * 0.01f;
773 }
774
776 return static_cast<float>(target_kneepitchstiffness()) * 0.01f;
777 }
778
780 return static_cast<float>(target_anklepitchstiffness()) * 0.01f;
781 }
782
784 return static_cast<float>(target_anklerollstiffness()) * 0.01f;
785 }
786
787//MARK: WHITEBOAR POSTER STRING CONVERSION & Description
788
792 std::string description() const
793 {
794 std::stringstream ss;
795 ss << static_cast<int>(target_hipyawpitch()) << " | "
796 << static_cast<int>(target_hiproll()) << " | "
797 << static_cast<int>(target_hippitch()) << " | "
798 << static_cast<int>(target_kneepitch()) << " | "
799 << static_cast<int>(target_anklepitch()) << " | "
800 << static_cast<int>(target_ankleroll()) << " | "
801 << static_cast<int>(target_hipyawpitchstiffness()) << " | "
802 << static_cast<int>(target_hiprollstiffness()) << " | "
803 << static_cast<int>(target_hippitchstiffness()) << " | "
804 << static_cast<int>(target_kneepitchstiffness()) << " | "
805 << static_cast<int>(target_anklepitchstiffness()) << " | "
806 << static_cast<int>(target_anklerollstiffness()) << " | "
807 << static_cast<int>(target_hipyawpitch_active()) << " | "
808 << static_cast<int>(target_hiproll_active()) << " | "
809 << static_cast<int>(target_hippitch_active()) << " | "
810 << static_cast<int>(target_kneepitch_active()) << " | "
811 << static_cast<int>(target_anklepitch_active()) << " | "
812 << static_cast<int>(target_ankleroll_active()) << " | "
813 << static_cast<int>(target_movement_time()) << " | "
814 << static_cast<int>(target_pliability()) << " | "
815 << static_cast<int>(target_leg_at_goal()) << " | "
816 << static_cast<int>(target_leg_stop());
817 return ss.str();
818 }
819
820
821#ifdef WHITEBOARD_POSTER_STRING_CONVERSION
826 HalLegTarget(const std::string &str) { from_string(str); }
827
832 void from_string(const std::string &str)
833 {
834 fprintf(stderr, "NYI - Have it back: %s\n", const_cast<char *>(str.c_str()));
835 }
836
841#endif // WHITEBOARD_POSTER_STRING_CONVERSION
842 };
843}
844
845#endif //HalLegTarget_DEFINED
Class for moving a SINGLE robotic leg with up to 6 degrees of freedom using local coords of each join...
void isAtGoal(bool goalReached)
Leg at Goal Setter Clients/Machines should not use this method.
void setLegPliability(bool hipyawpitch, bool hiproll, bool hippitch, bool kneepitch, bool anklepitch, bool ankleroll)
Individually set the active/passive state of each joint.
void setLegStiffnessMax()
Convenience function to set the stiffness of all the leg's joints to the maximum (1....
void set_target_ankleroll_active(const unsigned int &t_newValue)
uint8_t & target_hipyawpitchstiffness()
bool hasSameMirroredPose(const HalLegTarget &other)
Tests if this HalLegTarget object has the same mirrored pose settings as the other HalLegTarget objec...
void mirrorLeg(const HalLegTarget &other)
Convenience function to mirror leg settings about the XZ plane from one HalLegTarget object to anothe...
void set_anklepitch_DEG(float setting)
void set_target_leg_stop(const unsigned int &t_newValue)
void set_target_hipyawpitch_active(const unsigned int &t_newValue)
void set_hipyawpitchstiffness(float setting)
Stiffness Setters.
void set_hippitch_RAD(float setting)
HalLegTarget(const uint8_t &target_leg=0, const float hipyawpitch=0, const float hiproll=0, const float hippitch=0, const float kneepitch=0, const float anklepitch=0, const float ankleroll=0, const float hipyawpitchstiffness=0, const float hiprollstiffness=0, const float hippitchstiffness=0, const float kneepitchstiffness=0, const float anklepitchstiffness=0, const float anklerollstiffness=0, const bool hipyawpitch_active=true, const bool hiproll_active=true, const bool hippitch_active=true, const bool kneepitch_active=true, const bool anklepitch_active=true, const bool ankleroll_active=true, const int32_t movement_time=1000000, const uint8_t pliability=10, const bool leg_stop=false, const bool inRadians=false)
Constructor, defaults to LEFT_LEG.
bool isLegAllPassive()
Are all of the legs's joints set to passive.
bool isLegPassive()
Are any of the leg's joints set to passive.
void setPose_Rad(float hipyawpitch, float hiproll, float hippitch, float kneepitch, float anklepitch, float ankleroll)
Set Pose in radians.
std::string description() const
Description function.
unsigned int target_hiproll_active() const
void set_hiproll_RAD(float setting)
uint8_t & target_kneepitchstiffness()
void set_hippitchstiffness(float setting)
void set_kneepitchstiffness(float setting)
void set_ankleroll_RAD(float setting)
bool hasSamePose(const HalLegTarget &other)
Tests if this HalLegTarget object has the same pose settings as the other HalLegTarget object.
HalLegTarget(const std::string &str)
String constructor (NYI)
void goToWithTime_Rad(float hipyawpitch, float hiproll, float hippitch, float kneepitch, float anklepitch, float ankleroll, int32_t time=INT_MAX)
move to position in radians over a given time
void set_target_anklepitch_active(const unsigned int &t_newValue)
void set_anklepitchstiffness(float setting)
void ready()
Set leg to ready state (Default) The leg will act on motion commands.
uint8_t & target_anklerollstiffness()
unsigned int target_hipyawpitch_active() const
void set_hippitch_DEG(float setting)
void set_target_hiproll_active(const unsigned int &t_newValue)
float get_hipyawpitch_DEG()
Movement Getters (Degrees)
void tieToLeg(uint8_t leg)
Specify which leg this instance manages.
unsigned int target_hippitch_active() const
unsigned int target_kneepitch_active() const
void set_target_movement_time(const int32_t &t_newValue)
void setLegStiffnessNormal()
Convenience function to set the stiffness of all the leg's joints to what Aldebaran considers 'normal...
void set_hipyawpitch_DEG(float setting)
Movement Setters (Degrees)
uint8_t & target_hippitchstiffness()
void set_kneepitch_DEG(float setting)
void set_target_hipyawpitch(const int16_t &t_newValue)
void from_string(const std::string &str)
Parser for recreating this class (NYI)
void set_kneepitch_RAD(float setting)
void set_target_ankleroll(const int16_t &t_newValue)
bool atTargetLocation(HalLegTarget status, HalLegTarget tolerance)
Client side test to determine if leg is at the target location, allowing for specified tolerances.
unsigned int target_anklepitch_active() const
void set_target_hiproll(const int16_t &t_newValue)
void set_target_leg(const uint8_t &t_newValue)
void mirrorPose(const HalLegTarget &other)
Convenience function to mirror pose settings about the XZ plane from one HalLegTarget object to anoth...
void set_target_kneepitch_active(const unsigned int &t_newValue)
void set_target_kneepitch(const int16_t &t_newValue)
void set_anklerollstiffness(float setting)
uint8_t & target_anklepitchstiffness()
void copyStiffness(const HalLegTarget &other)
Convenience function to copy stiffness settings from one HalLegTarget object to another.
void set_target_anklerollstiffness(const uint8_t &t_newValue)
void set_target_hipyawpitchstiffness(const uint8_t &t_newValue)
void goToWithTime_Deg(float hipyawpitch, float hiproll, float hippitch, float kneepitch, float anklepitch, float ankleroll, int32_t time=INT_MAX)
move to position in degrees over a given time
void copyPose(const HalLegTarget &other)
Convenience function to copy pose settings from one HalLegTarget object to another.
void setLegStiffness(float stiffness)
Convenience function to set uniform stiffness on all leg joints to a custom value.
void set_hiproll_DEG(float setting)
void set_target_hippitchstiffness(const uint8_t &t_newValue)
void set_target_hippitch_active(const unsigned int &t_newValue)
bool hasSameStiffness(const HalLegTarget &other)
Tests if this HalLegTarget object has the same stiffness settings as the other HalLegTarget object.
void setPose_Deg(float hipyawpitch, float hiproll, float hippitch, float kneepitch, float anklepitch, float ankleroll)
Set Pose in degrees.
bool isLegAllActive()
Are all of the leg's joints set to active.
void set_ankleroll_DEG(float setting)
void stop()
Command the leg to stop at its current location and not act on motion commands until ready() is calle...
void set_target_hippitch(const int16_t &t_newValue)
void setLegActive()
Set leg to be Active (DEDAULT DCM state) The leg is active and manual movements will be resisted,...
void set_anklepitch_RAD(float setting)
void setLegStiffnessOff()
Convenience function to turn off stiffness in all the leg's joints (0.0f).
void set_target_kneepitchstiffness(const uint8_t &t_newValue)
void set_hiprollstiffness(float setting)
void setLegPassive()
Set leg to be Passive Manually moving the leg causes the leg to stay in the new position.
unsigned int target_leg_at_goal() const
float get_hipyawpitchstiffness()
Stiffness Getters.
void set_target_leg_at_goal(const unsigned int &t_newValue)
float get_hipyawpitch_RAD()
Movement Getters (Radians)
void set_target_pliability(const uint8_t &t_newValue)
void set_target_anklepitchstiffness(const uint8_t &t_newValue)
bool atGoal()
Leg at Goal Getter Clients/Machines should use this getter to test if the DCM has reported that the l...
unsigned int target_leg_stop() const
void set_target_anklepitch(const int16_t &t_newValue)
void set_hipyawpitch_RAD(float setting)
Movement Setters (Radians)
void set_target_hiprollstiffness(const uint8_t &t_newValue)
unsigned int target_ankleroll_active() const
/file APM_Interface.h
HalLegTarget c struct.
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t uint8_t uint8_t bool hipyawpitch_active
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t anklepitch
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t uint8_t uint8_t bool bool bool bool bool bool int32_t uint8_t pliability
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t kneepitch
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t uint8_t uint8_t bool bool bool bool bool anklepitch_active
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t uint8_t anklepitchstiffness
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t uint8_t uint8_t bool bool bool bool bool bool int32_t movement_time
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t uint8_t uint8_t bool bool bool hippitch_active
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t uint8_t uint8_t bool bool bool bool kneepitch_active
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t uint8_t uint8_t anklerollstiffness
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t hiprollstiffness
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t uint8_t uint8_t bool bool hiproll_active
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t hippitch
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t hiproll
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t hipyawpitch
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t ankleroll
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t hipyawpitchstiffness
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t uint8_t uint8_t bool bool bool bool bool bool ankleroll_active
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t uint8_t kneepitchstiffness
target_hipyawpitch target_hippitch target_anklepitch target_leg target_hiprollstiffness target_kneepitchstiffness target_anklerollstiffness int16_t int16_t int16_t int16_t int16_t int16_t uint8_t uint8_t uint8_t hippitchstiffness
#define LEFT_LEG