SITL: attach a string with a mass on the end to servo gripper

This commit is contained in:
Peter Barker 2016-11-23 11:50:01 +11:00
parent f8918d15b1
commit b751f836bb
4 changed files with 23 additions and 1 deletions

View File

@ -29,6 +29,8 @@ namespace SITL {
parent class for all simulator types
*/
class Aircraft {
friend class Gripper_Servo;
public:
Aircraft(const char *home_str, const char *frame_str);

View File

@ -63,3 +63,11 @@ bool Gripper_Servo::should_report()
return false;
}
float Gripper_Servo::payload_mass() const
{
if (aircraft->hagl() < string_length) {
return 0.0f;
}
return load_mass;
}

View File

@ -33,8 +33,14 @@ public:
// update Gripper state
void update(const struct Aircraft::sitl_input &input);
float payload_mass() const; // kg
void set_aircraft(Aircraft *_aircraft) { aircraft = _aircraft; }
private:
Aircraft *aircraft;
const uint32_t report_interval = 1000000; // microseconds
uint64_t last_report_us;
@ -48,6 +54,10 @@ private:
bool should_report();
bool zero_report_done = false;
// dangle load from a string:
const float string_length = 2.0f; // metres
const float load_mass = 0.0f; // kilograms
};
}

View File

@ -29,6 +29,8 @@ MultiCopter::MultiCopter(const char *home_str, const char *frame_str) :
{
mass = 1.5f;
gripper.set_aircraft(this);
frame = Frame::find_frame(frame_str);
if (frame == nullptr) {
printf("Frame '%s' not found", frame_str);
@ -81,5 +83,5 @@ void MultiCopter::update(const struct sitl_input &input)
float MultiCopter::gross_mass() const
{
return Aircraft::gross_mass() + sprayer.payload_mass();
return Aircraft::gross_mass() + sprayer.payload_mass() + gripper.payload_mass();
}