What is the algorithm for mission flight mode

Hi,
I am reading algorithm for making desired position of PX4 source code. When we know 2 waypoint, a algorithm is generated to making many reference between them. This code is written in the position control.
Please help me explain what is mean to make pos_ff for desired position controller.
Thanks.
This is the code in the mc_pos_control_main.cpp file

                               if (curr_pos_s_len < 1.0f) {
				/* copter is closer to waypoint than unit radius */
				/* check next waypoint and use it to avoid slowing down when passing via waypoint */
				if (_pos_sp_triplet.next.valid) {
					math::Vector<3> next_sp;
					map_projection_project(&_ref_pos,
							       _pos_sp_triplet.next.lat, _pos_sp_triplet.next.lon,
							       &next_sp.data[0], &next_sp.data[1]);
					next_sp(2) = -(_pos_sp_triplet.next.alt - _ref_alt);

					if ((next_sp - curr_sp).length() > MIN_DIST) {
						math::Vector<3> next_sp_s = next_sp.emult(scale);

						/* calculate angle prev - curr - next */
						math::Vector<3> curr_next_s = next_sp_s - curr_sp_s;
						math::Vector<3> prev_curr_s_norm = prev_curr_s.normalized();

						/* cos(a) * curr_next, a = angle between current and next trajectory segments */
						float cos_a_curr_next = prev_curr_s_norm * curr_next_s;

						/* cos(b), b = angle pos - curr_sp - prev_sp */
						float cos_b = -curr_pos_s * prev_curr_s_norm / curr_pos_s_len;

						if (cos_a_curr_next > 0.0f && cos_b > 0.0f) {
							float curr_next_s_len = curr_next_s.length();

							/* if curr - next distance is larger than unit radius, limit it */
							if (curr_next_s_len > 1.0f) {
								cos_a_curr_next /= curr_next_s_len;
							}

							/* feed forward position setpoint offset */
							math::Vector<3> pos_ff = prev_curr_s_norm *
										 cos_a_curr_next * cos_b * cos_b * (1.0f - curr_pos_s_len) *
										 (1.0f - expf(-curr_pos_s_len * curr_pos_s_len * 20.0f));
							pos_sp_s += pos_ff;
						}
					}
				}

			}
1 Like