今天還是主要看ig_active_reconstruction
昨天看了幾個通訊介面的檔案,今天看其他的
getig
communit
useinformationgain
world_representation_raycaster.hpp
world_representation_pinhole_cam_raycaster.cpp
namespace ig_active_reconstruction 下有乙個基類 utilitycalculator
只有乙個純虛函式
是根據傳入的完整的viewspace和可以考慮的views集合 返回最佳view的id
virtual views::view::idtype getnbv
( views::viewspace::idset& id_set, boost::shared_ptr viewspace )=0
;
namespace ig_active_reconstruction 繼承了上面的基類 utilitycalculator 有乙個子類weightedlinearutility
// 兩個通訊介面 分別是環境和機械人的通訊介面
boost::shared_ptr world_comm_unit_;
//! inte***ce to world representation.
boost::shared_ptr robot_comm_unit_;
//! inte***ce to robot.
//ig計算的檢索配置
world_representation::communicationinte***ce::igretrievalconfig ig_retrieval_config_;
//! will be used for ig retrieval.
// 要用的ig的name和對應的weight
std::vector< std::string > information_gains_;
//! name of the information gains to use.
std::vector<
double
> ig_weights_;
//! weight of the information gains.
double cost_weight_;
這是繼承基類的那個函式,應該也是最重要的
virtual views::view::idtype getnbv
( views::viewspace::idset& id_set, boost::shared_ptr viewspace )
;
具體實現看檔案吧,有單執行緒和多執行緒兩種
用到的是world_comm_unit_->computeviewig(command,information_gains);
這個函式,這個函式在word_comm_unit裡只有乙個純虛函式,需要去子類裡面看
根據執行緒數(設定的是8
把views分成幾個batch
對每個執行緒呼叫weightedlinearutility::getig
這個函式,下面看
是對每個batch
void
getig
(std::vector<
double
>
& ig_vector,
double
& total_ig, world_representation::communicationinte***ce::igretrievalcommand command, views::viewspace::idset& id_set, boost::shared_ptr viewspace,
unsigned
int base_index,
unsigned
int batch_size )
;
這個是為多執行緒服務的
void weightedlinearutility::
useinformationgain
( std::string name,
double weight)
是新增乙個名稱為name
的ig,權重預設為1.0
namespace ig_active_reconstruction 下的namespace world_representation
裡的乙個基類raycaster
成員變數裡有乙個類ray 主要是起點和方向
typedef eigen::vector3d rayorigin;
typedef eigen::vector3d raydirection;
/*! defines a ray.
*/struct ray
;
還有幾個純虛函式
namespace ig_active_reconstruction 下的namespace world_representation 繼承了基類raycaster,子類是pinholecamraycaster
有兩個struct
之後用到再細看吧
SynchronousQueue原始碼閱讀心得
synchronousqueue 簡寫為sq 同步佇列中,讀執行緒與寫執行緒只有相互匹配時才能完成一次完整的讀寫操作。而讀與寫的匹配依賴於transferqueue或transferstack中的transfer sq中重要的資料結構有transferqueue和transferstack,還有qn...
Vector和Hashtable原始碼閱讀與理解
vector是執行緒安全的arraylist public synchronized void insertelementat e obj,int index ensurecapacityhelper elementcount 1 system.arraycopy elementdata,index...
seata xid是什麼 seata原始碼閱讀筆記
seata原始碼閱讀筆記 本文基於v0.8.0版本,本文沒貼 seata中的三個重要部分 tc 事務協調器,維護全域性事務和分支事務的狀態,驅動全域性提交或回滾,就是seata的服務端。tm 事務管理器,開始全域性事務,提交或回滾全域性事務。rm 資源管理器,管理正在處理的分支事務的資源,向tc註冊...