46 _heading_in_node =
fgGetNode(
"/orientation/heading-deg",
true);
48 SGPropertyNode *node =
fgGetNode(branch,
true );
49 if( NULL == (_offset_node = node->getChild(
"offset-deg", 0,
false)) ) {
50 _offset_node = node->getChild(
"offset-deg", 0,
true);
51 _offset_node->setDoubleValue( -
fgGetDouble(
"/environment/magnetic-variation-deg") );
53 _error_node = node->getChild(
"heading-bug-error-deg", 0,
true);
54 _nav1_error_node = node->getChild(
"nav1-course-error-deg", 0,
true);
55 _heading_out_node = node->getChild(
"indicated-heading-deg", 0,
true);
56 _off_node = node->getChild(
"off-flag", 0,
true);
57 _spin_node = node->getChild(
"spin", 0,
true);
78 double spin = _gyro.get_spin_norm();
79 _spin_node->setDoubleValue( spin );
82 _off_node->setBoolValue(
false);
84 _off_node->setBoolValue(
true);
90 double offset = _offset_node->getDoubleValue();
96 double factor = 100 * (spin * spin * spin * spin * spin * spin);
97 double heading = _heading_in_node->getDoubleValue();
102 if ((heading - _last_heading_deg) > 180)
103 _last_heading_deg += 360;
104 if ((heading - _last_heading_deg) < -180)
105 _last_heading_deg -= 360;
107 heading =
fgGetLowPass(_last_heading_deg, heading, dt * factor);
108 _last_heading_deg = heading;
117 _heading_out_node->setDoubleValue(heading);
121 SGPropertyNode *bnode
122 =
fgGetNode(
"/autopilot/settings/heading-bug-deg",
false );
125 diff = bnode->getDoubleValue() - heading;
126 if ( diff < -180.0 ) { diff += 360.0; }
127 if ( diff > 180.0 ) { diff -= 360.0; }
128 _error_node->setDoubleValue( diff );
132 SGPropertyNode *nnode
133 =
fgGetNode(
"/instrumentation/nav/radials/selected-deg",
true );
136 ndiff = nnode->getDoubleValue() - heading;
137 if ( ndiff < -180.0 ) { ndiff += 360.0; }
138 if ( ndiff > 180.0 ) { ndiff -= 360.0; }
139 _nav1_error_node->setDoubleValue( ndiff );