Browse Source

GPS中增加天线偏移计算,写入日志,从参数获取偏移量调整

mission-4.1.18
nagezeng 3 years ago
parent
commit
2f77adc86f
  1. 8
      ArduCopter/version.h
  2. 23
      all.sh
  3. 2
      d100.sh
  4. 2
      hrs100h.sh
  5. 35
      libraries/AP_GPS/AP_GPS_NMEA.cpp
  6. 6
      libraries/AP_GPS/AP_GPS_NMEA.h
  7. 2
      libraries/AP_Logger/AP_Logger.h
  8. 11
      libraries/AP_Logger/LogFile.cpp
  9. 11
      libraries/AP_Logger/LogStructure.h

8
ArduCopter/version.h

@ -5,15 +5,15 @@ @@ -5,15 +5,15 @@
#endif
#include "ap_version.h"
#define GIT_VERSION "1"
#define THISFIRMWARE "ZRUAV v4.1.17" //"ArduCopter V4.0.0"
#define GIT_VERSION "2"
#define THISFIRMWARE "ZRUAV v4.1.18" //"ArduCopter V4.0.0"
// the following line is parsed by the autotest scripts
#define FIRMWARE_VERSION 4,1,17,FIRMWARE_VERSION_TYPE_OFFICIAL
#define FIRMWARE_VERSION 4,1,18,FIRMWARE_VERSION_TYPE_OFFICIAL
#define FW_MAJOR 4
#define FW_MINOR 1
#define FW_PATCH 17
#define FW_PATCH 18
#define FW_TYPE FIRMWARE_VERSION_TYPE_OFFICIAL
/**
* AVDv6: avoid.get_zr_mode() = 3Loiter模式测试自动避障

23
all.sh

@ -4,32 +4,37 @@ starttime=`date +'%Y-%m-%d %H:%M:%S'` @@ -4,32 +4,37 @@ starttime=`date +'%Y-%m-%d %H:%M:%S'`
./waf configure --board rs100 > build_log.txt
# ./waf clean >> build_log.txt
./waf clean >> build_log.txt
./waf copter >> build_log.txt
cp ./build/rs100/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/致睿rs100-v4.0.17-RC8.px4
cp ./build/rs100/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/致睿rs100-v4.1.18.px4
echo "finish build rs100 "
./waf configure --board rs100h >> build_log.txt
# ./waf clean >> build_log.txt
./waf clean >> build_log.txt
./waf copter >> build_log.txt
cp ./build/rs100h/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/致睿rs100h-v4.0.17-RC8.px4
cp ./build/rs100h/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/致睿rs100h-v4.1.18.px4
echo "finish build rs100h "
./waf configure --board d100 >> build_log.txt
# ./waf clean >> build_log.txt
./waf clean >> build_log.txt
./waf copter >> build_log.txt
cp ./build/d100/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/中海达d100-v4.0.17-RC8.px4
cp ./build/d100/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/中海达d100-v4.1.18.px4
echo "finish build d100 "
./waf configure --board d100h >> build_log.txt
# ./waf clean >> build_log.txt
./waf clean >> build_log.txt
./waf copter >> build_log.txt
cp ./build/d100h/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/中海达d100h-v4.0.17-RC8.px4
cp ./build/d100h/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/中海达d100h-v4.1.18.px4
echo "finish build d100h "
./waf configure --board E300 >> build_log.txt
./waf clean >> build_log.txt
./waf copter >> build_log.txt
cp ./build/E300/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/Sino-E300-v4.1.18.px4
echo "finish build E300 "
# ./waf configure --board zr-hexa >> build_log.txt
# ./waf clean >> build_log.txt
# ./waf copter >> build_log.txt
# cp ./build/zr-hexa/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/六轴m66-v4.0.17-RC8.px4
# cp ./build/zr-hexa/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/六轴m66-v4.1.18.px4
# echo "finish build zr-hexa "
endtime=`date +'%Y-%m-%d %H:%M:%S'`

2
d100.sh

@ -1,3 +1,3 @@ @@ -1,3 +1,3 @@
./waf configure --board d100
./waf copter
cp ./build/d100/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/zr-v4/wsl/d100-v4.0.16-AVDv6.px4
cp ./build/d100/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/中海达d100-v4.1.18.px4

2
hrs100h.sh

@ -1,3 +1,3 @@ @@ -1,3 +1,3 @@
./waf configure --board rs100h
./waf copter
cp ./build/rs100h/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/rs100h-v4.0.16.px4
cp ./build/rs100h/bin/arducopter.apj /mnt/f/_01-work/100\=data/固件/编译/rs100h-v4.1.18.px4

35
libraries/AP_GPS/AP_GPS_NMEA.cpp

@ -296,6 +296,7 @@ bool AP_GPS_NMEA::_term_complete() @@ -296,6 +296,7 @@ bool AP_GPS_NMEA::_term_complete()
#if HAL_WITH_UAVCAN
uint8_t can_num_drivers = AP::can().get_num_drivers();
for (uint8_t i = 0; i < can_num_drivers; i++)
{
AP_UAVCAN *uavcan = AP_UAVCAN::get_uavcan(i);
@ -321,16 +322,20 @@ bool AP_GPS_NMEA::_term_complete() @@ -321,16 +322,20 @@ bool AP_GPS_NMEA::_term_complete()
if (logger != nullptr)
{
// uint32_t tk1 = AP_HAL::micros();
Vector3f cam_pos_ned = camera_pos_rotation();
// uint32_t tk2 = AP_HAL::micros();
Vector3d llh = Vector3d(gps_mark.lat, gps_mark.lon, gps_mark.hgt);
Vector3f sigma = Vector3f(gps_mark.lat_sigma, gps_mark.lon_sigma, gps_mark.hgt_sigma);
AP::logger().Write_RTK_Mark_Pos(
gps_mark.week,
gps_mark.second,
llh,
gps_mark.undulation,
sigma,
gps_mark.diff_age,
gps_mark.sol_age);
cam_pos_ned,
state.status);
// gcs().send_text(MAV_SEVERITY_INFO, "mrk:%d, %d, %d, %d", gps_mark.week, gps_mark.second, (int32_t)(gps_mark.lat * (int32_t)10000000UL), (int32_t)(gps_mark.lon * (int32_t)10000000UL));
// gcs().send_text(MAV_SEVERITY_INFO,"rot:%dus,%.3f,%.3f,%.3f",(uint16_t)(tk2 - tk1),cam_pos_ned.x,cam_pos_ned.y,cam_pos_ned.z);
}
}
}
@ -675,6 +680,30 @@ AP_GPS_NMEA::_detect(struct NMEA_detect_state &state, uint8_t data) @@ -675,6 +680,30 @@ AP_GPS_NMEA::_detect(struct NMEA_detect_state &state, uint8_t data)
return false;
}
bool AP_GPS_NMEA::get_offset_param()
{
const Vector3f &off = gps._antenna_offset[1].get();
_cam_offset.x = off.x;
_cam_offset.y = off.y;
_cam_offset.z = off.z;
gcs().send_text(MAV_SEVERITY_INFO,"ant offset:%.3f,%.3f,%.3f",_cam_offset.x,_cam_offset.y,_cam_offset.z);
return true;
}
Vector3f AP_GPS_NMEA::camera_pos_rotation()
{
Matrix3f Tbn; // dcm rotation matrix to rotate body frame to north
Vector3f target_vec_unit_body;
Vector3f cam_pos_ned = {-0.02,-0.225,0.17};
if(!get_param){
get_param = get_offset_param();
return cam_pos_ned;
}
const AP_AHRS &ahrs = AP::ahrs();
Tbn = ahrs.get_rotation_body_to_ned();
cam_pos_ned = Tbn * (_cam_offset);
return cam_pos_ned;
}
// Calculate and return the CRC for usA binary buffer
// unsigned long CalculateCRC32(u_char *szBuf, int iSize)

6
libraries/AP_GPS/AP_GPS_NMEA.h

@ -66,6 +66,8 @@ public: @@ -66,6 +66,8 @@ public:
const char *name() const override { return "NMEA"; }
static void send_init_blob(uint8_t instance, AP_GPS &gps);
Vector3f camera_pos_rotation();
private:
/// Coding for the GPS sentences that the parser handles
enum _sentence_types { //there are some more than 10 fields in some sentences , thus we have to increase these value.
@ -225,6 +227,10 @@ private: @@ -225,6 +227,10 @@ private:
0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, 0x5d681b02UL,0x2a6f2b94UL,
0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, 0x2d02ef8dUL
};
Vector3f _cam_offset;
bool get_offset_param();
bool get_param;
Vector3f euler,euler_deg;
};
#define AP_GPS_NMEA_HEMISPHERE_INIT_STRING \

2
libraries/AP_Logger/AP_Logger.h

@ -288,7 +288,7 @@ public: @@ -288,7 +288,7 @@ public:
void Write_OABendyRuler(bool active, float target_yaw, float margin, const Location &final_dest, const Location &oa_dest);
void Write_OADijkstra(uint8_t state, uint8_t error_id, uint8_t curr_point, uint8_t tot_points, const Location &final_dest, const Location &oa_dest);
void Write_Camera_Feedback(uint16_t index,uint16_t cam1,uint16_t cam2,uint16_t cam3,uint16_t cam4,uint16_t cam5,uint8_t flag);
void Write_RTK_Mark_Pos(uint16_t week, uint32_t second,const Vector3d& llh,float undulation,const Vector3f& sigma,float diff_age,float sol_age);
void Write_RTK_Mark_Pos(uint16_t week, uint32_t second,const Vector3d& llh,const Vector3f& sigma,const Vector3f& offset,uint8_t fix_type);
void Write(const char *name, const char *labels, const char *fmt, ...);
void Write(const char *name, const char *labels, const char *units, const char *mults, const char *fmt, ...);

11
libraries/AP_Logger/LogFile.cpp

@ -1029,7 +1029,7 @@ void AP_Logger::Write_Camera_Feedback(uint16_t index,uint16_t cam1,uint16_t cam2 @@ -1029,7 +1029,7 @@ void AP_Logger::Write_Camera_Feedback(uint16_t index,uint16_t cam1,uint16_t cam2
WriteBlock(&pkt, sizeof(pkt));
}
void AP_Logger::Write_RTK_Mark_Pos(uint16_t week, uint32_t second,const Vector3d& llh,float undulation,const Vector3f& sigma,float diff_age,float sol_age)
void AP_Logger::Write_RTK_Mark_Pos(uint16_t week, uint32_t second,const Vector3d& llh,const Vector3f& sigma,const Vector3f& offset,uint8_t fix_type)
{
const AP_AHRS &ahrs = AP::ahrs();
@ -1045,14 +1045,13 @@ void AP_Logger::Write_RTK_Mark_Pos(uint16_t week, uint32_t second,const Vector3d @@ -1045,14 +1045,13 @@ void AP_Logger::Write_RTK_Mark_Pos(uint16_t week, uint32_t second,const Vector3d
lat :llh.x,
lon :llh.y ,
hgt :llh.z ,
undulation :undulation ,
lat_sigma :sigma.x ,
lon_sigma :sigma.y ,
hgt_sigma :sigma.z ,
diff_age :diff_age ,
sol_age :sol_age ,
SVs :0 ,
solnSVs : 0
n_offset :offset.x ,
e_offset :offset.y ,
d_offset :offset.z ,
fix_type :fix_type
};
WriteBlock(&pkt, sizeof(pkt));
}

11
libraries/AP_Logger/LogStructure.h

@ -1230,14 +1230,13 @@ struct PACKED log_rtk_mark_pos @@ -1230,14 +1230,13 @@ struct PACKED log_rtk_mark_pos
double lat;
double lon;
double hgt;
float undulation;
float lat_sigma;
float lon_sigma;
float hgt_sigma;
float diff_age;
float sol_age;
uint8_t SVs;
uint8_t solnSVs;
float n_offset;
float e_offset;
float d_offset;
uint8_t fix_type;
};
@ -1440,7 +1439,7 @@ struct PACKED log_rtk_mark_pos @@ -1440,7 +1439,7 @@ struct PACKED log_rtk_mark_pos
{ LOG_CAM_FEEDBACK_MSG, sizeof(log_Camera_FeedBack), \
"CAMF","QHHHHHHB","TimeUS,Index,CAM1,CAM2,CAM3,CAM4,CAM5,FLAG", "s-------", "F-------" },\
{ LOG_RTK_MARK_POS, sizeof(log_rtk_mark_pos), \
"MARK","QhhHHIdddffffffBB","TimeUS,R,P,Y,Week,Secms,Lat,Lon,Hgt,Undu,Lat_s,Lon_s,Hgt_s,D_age,S_age,SVs,SoSVs", "sddh-------------", "F----------------" }
"MARK","QhhHHIdddffffffB","TimeUS,R,P,Y,Wk,ms,Lat,Lon,Hgt,sx,sy,sz,Ns,Es,Ds,Fix", "sddh------------", "F---------------" }
// messages for more advanced boards
#define LOG_EXTRA_STRUCTURES \
{ LOG_IMU2_MSG, sizeof(log_IMU), \

Loading…
Cancel
Save