實際變成操作中,需要對ardupilot代碼進行修改并添加對應的調試參數,這樣,可以通過地面站很友善的進行修改參數。
目前修改代碼在parameter.h中的G2類,表示為全局的參數清單。
參數類型需要是以下幾種
AP_PARAMDEF(float, Float, AP_PARAM_FLOAT); // defines AP_Float
AP_PARAMDEF(int8_t, Int8, AP_PARAM_INT8); // defines AP_Int8
AP_PARAMDEF(int16_t, Int16, AP_PARAM_INT16); // defines AP_Int16
AP_PARAMDEF(int32_t, Int32, AP_PARAM_INT32); // defines AP_Int32
然後在對應的cpp檔案中,g2中添加對應的groupinfo, 如下圖所示。其中第一個參數為地面站顯示的名稱,第二個參數為序号,需要依次排列下來,第三個參數為類名稱,這裡為全局的parametersG2, 第四個為變量的名稱,第五個參數為預設的參數值。
這樣,該參數就可以在copter.cpp中進行指派和修改了,如下圖所示
對參數的讀取部分,個人猜測是在ardupilot中,參數的設定在gcs_mavlink.cpp中handle_common_message(msg)函數中,-> handle_common_param_message(msg); 進去之後,會有message_set, message_read, list等參數
由于此處一般不需要進行修改,故不再進行展開操作。
但是上述操作是在copter對象中,如果對其他對象進行操作,則需要轉到對應的參數表中完成。
如下圖所示情況,是針對直升機的對象,又有一個參數表。
那麼其修改方式,和上面的類似,是在類的私有變量中進行修改,跳轉過去即可發現
當然,這種情況的調用方式,是在該類下的公有函數中可以直接調用。
經過嘗試,如果變量是定義在全局g2上的,通過指針,或者引用的方式,無法正常傳遞給其他類函數中的局部變量。其指針對應的位址會進行部分的改變(有人說是資料類型強制轉換的鍋)