velocity layer working
This commit is contained in:
parent
db084b0c03
commit
c1041f901e
10
analyze.py
10
analyze.py
|
|
@ -107,6 +107,7 @@ class SimVisualizer:
|
||||||
# If read_json doesn't flatten automatically, we expand the dicts:
|
# If read_json doesn't flatten automatically, we expand the dicts:
|
||||||
for col in [
|
for col in [
|
||||||
"linvel_current",
|
"linvel_current",
|
||||||
|
"linvel_target",
|
||||||
"accel_current",
|
"accel_current",
|
||||||
"accel_target",
|
"accel_target",
|
||||||
"angvel_target",
|
"angvel_target",
|
||||||
|
|
@ -136,13 +137,14 @@ class SimVisualizer:
|
||||||
self.ax.clear()
|
self.ax.clear()
|
||||||
|
|
||||||
to_plot = [
|
to_plot = [
|
||||||
("rot_target", "Rot Target"),
|
# ("rot_target", "Rot Target"),
|
||||||
("rot_current", "Rot Current"),
|
# ("rot_current", "Rot Current"),
|
||||||
("angvel_current", "Angvel Current"),
|
# ("angvel_current", "Angvel Current"),
|
||||||
("angvel_target", "Angvel Target"),
|
# ("angvel_target", "Angvel Target"),
|
||||||
("accel_target", "Accel Target"),
|
("accel_target", "Accel Target"),
|
||||||
("accel_current", "Accel Current"),
|
("accel_current", "Accel Current"),
|
||||||
("linvel_current", "Linvel Current"),
|
("linvel_current", "Linvel Current"),
|
||||||
|
("linvel_target", "Linvel Target"),
|
||||||
]
|
]
|
||||||
|
|
||||||
for name, label in to_plot:
|
for name, label in to_plot:
|
||||||
|
|
|
||||||
|
|
@ -23,4 +23,16 @@ stack = { max_rate = 3.14, rotation_pid = { kp = [
|
||||||
0.0,
|
0.0,
|
||||||
0.0,
|
0.0,
|
||||||
0.0,
|
0.0,
|
||||||
], frequency = 600.0 } }
|
], frequency = 600.0 }, linvel_pid = { kp = [
|
||||||
|
4.0,
|
||||||
|
4.0,
|
||||||
|
4.0,
|
||||||
|
], ki = [
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
], kd = [
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
], frequency = 25.0 } }
|
||||||
|
|
|
||||||
|
|
@ -23,4 +23,16 @@ stack = { max_rate = 3.14, rotation_pid = { kp = [
|
||||||
0.0,
|
0.0,
|
||||||
0.0,
|
0.0,
|
||||||
0.0,
|
0.0,
|
||||||
], frequency = 600.0 } }
|
], frequency = 600.0 }, linvel_pid = { kp = [
|
||||||
|
4.0,
|
||||||
|
4.0,
|
||||||
|
4.0,
|
||||||
|
], ki = [
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
], kd = [
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
], frequency = 25.0 } }
|
||||||
|
|
|
||||||
|
|
@ -23,4 +23,16 @@ stack = { max_rate = 3.14, rotation_pid = { kp = [
|
||||||
0.0,
|
0.0,
|
||||||
0.0,
|
0.0,
|
||||||
0.0,
|
0.0,
|
||||||
], frequency = 600.0 } }
|
], frequency = 600.0 }, linvel_pid = { kp = [
|
||||||
|
4.0,
|
||||||
|
4.0,
|
||||||
|
4.0,
|
||||||
|
], ki = [
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
], kd = [
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
], frequency = 25.0 } }
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
{
|
||||||
|
"records": [
|
||||||
|
{
|
||||||
|
"input": {
|
||||||
|
"joystick": {
|
||||||
|
"throttle_input": 0,
|
||||||
|
"roll_input": 0,
|
||||||
|
"yaw_input": 0,
|
||||||
|
"pitch_input": 0
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"lat": 0,
|
||||||
|
"long": 0,
|
||||||
|
"alt": 0
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"roll": 0,
|
||||||
|
"yaw": 0,
|
||||||
|
"pitch": 0
|
||||||
|
},
|
||||||
|
"velocity": {
|
||||||
|
"x": 0.15,
|
||||||
|
"y": 0.15,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
"mode": "Velocity"
|
||||||
|
},
|
||||||
|
"time": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"input": {
|
||||||
|
"joystick": {
|
||||||
|
"throttle_input": 0,
|
||||||
|
"roll_input": 0,
|
||||||
|
"yaw_input": 0,
|
||||||
|
"pitch_input": 0
|
||||||
|
},
|
||||||
|
"velocity": {
|
||||||
|
"x": 0.3,
|
||||||
|
"y": -1.3,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
"mode": "Velocity"
|
||||||
|
},
|
||||||
|
"time": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"input": {
|
||||||
|
"joystick": {
|
||||||
|
"throttle_input": 0,
|
||||||
|
"roll_input": 0,
|
||||||
|
"yaw_input": 0,
|
||||||
|
"pitch_input": 0
|
||||||
|
},
|
||||||
|
"velocity": {
|
||||||
|
"x": 3.4,
|
||||||
|
"y": 0,
|
||||||
|
"z": 1
|
||||||
|
},
|
||||||
|
"mode": "Velocity"
|
||||||
|
},
|
||||||
|
"time": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"input": {
|
||||||
|
"joystick": {
|
||||||
|
"throttle_input": 0,
|
||||||
|
"roll_input": 0,
|
||||||
|
"yaw_input": 0,
|
||||||
|
"pitch_input": 0
|
||||||
|
},
|
||||||
|
"mode": "Velocity"
|
||||||
|
},
|
||||||
|
"time": 20
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -154,6 +154,7 @@ impl Drone {
|
||||||
self.controller
|
self.controller
|
||||||
.set_angular_velocity(rb.rotation().inverse().transform_vector(&rb.angvel()));
|
.set_angular_velocity(rb.rotation().inverse().transform_vector(&rb.angvel()));
|
||||||
self.controller.set_rotation(*rb.rotation());
|
self.controller.set_rotation(*rb.rotation());
|
||||||
|
self.controller.set_linvel(self.linvel);
|
||||||
self.target_throttles = self.controller.get_motor_throttles();
|
self.target_throttles = self.controller.get_motor_throttles();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ impl From<Vec3Serialize> for na::Vector3<f32> {
|
||||||
pub struct SimLogRow {
|
pub struct SimLogRow {
|
||||||
pub time: f32,
|
pub time: f32,
|
||||||
pub linvel_current: Vec3Serialize,
|
pub linvel_current: Vec3Serialize,
|
||||||
|
pub linvel_target: Vec3Serialize,
|
||||||
pub accel_current: Vec3Serialize,
|
pub accel_current: Vec3Serialize,
|
||||||
pub accel_target: Vec3Serialize,
|
pub accel_target: Vec3Serialize,
|
||||||
pub angvel_target: Vec3Serialize,
|
pub angvel_target: Vec3Serialize,
|
||||||
|
|
|
||||||
|
|
@ -200,10 +200,20 @@ impl Simulation {
|
||||||
] * 3.14
|
] * 3.14
|
||||||
};
|
};
|
||||||
|
|
||||||
let accel_target = na::vector![
|
let accel_target = if current_input.mode != ModeInput::Acceleration {
|
||||||
|
cont.linvel_rt.last_output.unwrap_or_default().0
|
||||||
|
} else {
|
||||||
|
na::vector![
|
||||||
current_input.acceleration.x,
|
current_input.acceleration.x,
|
||||||
current_input.acceleration.y,
|
current_input.acceleration.y,
|
||||||
current_input.acceleration.z
|
current_input.acceleration.z,
|
||||||
|
] * 3.14
|
||||||
|
};
|
||||||
|
|
||||||
|
let linvel_target = na::vector![
|
||||||
|
current_input.velocity.x,
|
||||||
|
current_input.velocity.y,
|
||||||
|
current_input.velocity.z
|
||||||
];
|
];
|
||||||
|
|
||||||
let accel = self.drone.get_accel();
|
let accel = self.drone.get_accel();
|
||||||
|
|
@ -213,6 +223,7 @@ impl Simulation {
|
||||||
.log(&SimLogRow {
|
.log(&SimLogRow {
|
||||||
time: self.world.get_time(),
|
time: self.world.get_time(),
|
||||||
linvel_current: (*self.drone.get_rb(&self.world).linvel()).into(),
|
linvel_current: (*self.drone.get_rb(&self.world).linvel()).into(),
|
||||||
|
linvel_target: linvel_target.into(),
|
||||||
accel_current: accel.into(),
|
accel_current: accel.into(),
|
||||||
accel_target: accel_target.into(),
|
accel_target: accel_target.into(),
|
||||||
angvel_target: target_angular_vel.into(),
|
angvel_target: target_angular_vel.into(),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue