⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amcl.h

📁 机器人仿真软件
💻 H
字号:
/* *  Player - One Hell of a Robot Server *  Copyright (C) 2000  Brian Gerkey   &  Kasper Stoy *                      gerkey@usc.edu    kaspers@robotics.usc.edu * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * *//////////////////////////////////////////////////////////////////////////////// Desc: Adaptive Monte-Carlo localization// Author: Andrew Howard// Date: 6 Feb 2003// CVS: $Id: amcl.h,v 1.13.2.2 2006/07/13 17:59:43 gerkey Exp $//// Theory of operation://  TODO//// Requires: position (odometry), laser, sonar, gps// Provides: localization/////////////////////////////////////////////////////////////////////////////#ifndef AMCL_H#define AMCL_H#include <pthread.h>#ifdef INCLUDE_RTKGUI#include "rtk.h"#endif#include <libplayercore/playercore.h>#include "pf/pf.h"//#include "amcl_sensor.h"class AMCLSensor;class AMCLSensorData;// Pose hypothesistypedef struct{  // Total weight (weights sum to 1)  double weight;  // Mean of pose esimate  pf_vector_t pf_pose_mean;  // Covariance of pose estimate  pf_matrix_t pf_pose_cov;} amcl_hyp_t;// Incremental navigation driverclass AdaptiveMCL : public Driver{  ///////////////////////////////////////////////////////////////////////////  // Top half methods; these methods run in the server thread (except for  // the sensor Init and Update functions, which run in the driver thread).  ///////////////////////////////////////////////////////////////////////////  // Constructor  public: AdaptiveMCL(ConfigFile* cf, int section);  // Destructor  public: virtual ~AdaptiveMCL(void);  // Setup/shutdown routines.  public: virtual int Setup(void);  public: virtual int Shutdown(void);  ///////////////////////////////////////////////////////////////////////////  // Middle methods: these methods facilitate communication between the top  // and bottom halfs.  ///////////////////////////////////////////////////////////////////////////  ///////////////////////////////////////////////////////////////////////////  // Bottom half methods; these methods run in the device thread  ///////////////////////////////////////////////////////////////////////////  // Push data onto the queue  public: void Push(AMCLSensorData *data);  // Take a peek at the queue  private: AMCLSensorData *Peek(void);  // Pop data from the queue  private: AMCLSensorData *Pop(void);  // MessageHandler  public: virtual int ProcessMessage(MessageQueue * resp_queue,                                     player_msghdr * hdr,                                     void * data);  // Check for updated sensor data  public: virtual void UpdateSensorData(void);  // Main function for device thread.  private: virtual void Main(void);  // Device thread finalization  private: virtual void MainQuit();  // Initialize the filter  private: void InitFilter(void);  // Update/initialize the filter with new sensor data  private: bool UpdateFilter();  // Put new localization data  private: void PutDataLocalize(double time);  // Put new position data  private: void PutDataPosition(pf_vector_t delta);  // Send back geometry data  private: void ProcessGeom(MessageQueue* resp_queue, player_msghdr_t* hdr);#ifdef INCLUDE_RTKGUI  // Set up the GUI  private: int SetupGUI(void);  // Shut down the GUI  private: int ShutdownGUI(void);  // Update the GUI  private: void UpdateGUI(void);  // Draw the current best pose estimate  private: void DrawPoseEst();#endif  ///////////////////////////////////////////////////////////////////////////  // Properties  ///////////////////////////////////////////////////////////////////////////  // interfaces we might be using  private: player_devaddr_t position_addr;  private: player_devaddr_t localize_addr;  // List of all sensors  private: int sensor_count;  private: AMCLSensor *sensors[16];  // Index of sensor providing initialization model  private: int init_sensor;  // Index of sensor providing action model  private: int action_sensor;  // Particle filter  private: pf_t *pf;  private: int pf_min_samples, pf_max_samples;  private: double pf_err, pf_z;  // Sensor data queue  private: int q_size, q_start, q_len;  private: AMCLSensorData **q_data;  // Current particle filter pose estimates  private: int hyp_count;  private: amcl_hyp_t hyps[PLAYER_LOCALIZE_MAX_HYPOTHS];  private: pf_vector_t best_hyp;  private: pthread_mutex_t best_hyp_lock;  // Has the filter been initialized?  private: bool pf_init;  // Initial pose estimate; used for filter initialization  private: pf_vector_t pf_init_pose_mean;  private: pf_matrix_t pf_init_pose_cov;  // Last odometric pose value used to update filter  private: pf_vector_t pf_odom_pose;  // Minimum update distances  private: double min_dr, min_da;#ifdef INCLUDE_RTKGUI  // RTK stuff; for testing only  private: int enable_gui;  private: rtk_app_t *app;  private: rtk_canvas_t *canvas;  private: rtk_fig_t *map_fig;  private: rtk_fig_t *pf_fig;  private: rtk_fig_t *robot_fig;#endif#ifdef INCLUDE_OUTFILE  private: FILE *outfile;#endif};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -