当前位置: 首页 > news >正文

网站开发人员工具种类w7自己做网站

网站开发人员工具种类,w7自己做网站,滨海新区做网站,长春市住房城乡建设厅网站之前用过Ceres#xff0c;但是只是跑例程#xff0c;现在来着重学习一下使用流程。 1. 解决的问题 主要解决非线性优化问题。Ceres是一个较为通用的库。 参考链接 2. 如何使用 这个是求解的函数#xff0c;主要关注这三个参数 CERES_EXPORT void Solve(const Solver::O…之前用过Ceres但是只是跑例程现在来着重学习一下使用流程。 1. 解决的问题 主要解决非线性优化问题。Ceres是一个较为通用的库。 参考链接 2. 如何使用 这个是求解的函数主要关注这三个参数 CERES_EXPORT void Solve(const Solver::Options options, Problem* problem, Solver::Summary* summary);1. options 与优化相关的一些参数配置 2. problem 定义problem 重要的函数 ResidualBlockId AddResidualBlock(CostFunction* cost_function,LossFunction* loss_function,const std::vectordouble* parameter_blocks);其中cost_function是需要我们自己定义的代价函数拿SLAM14讲中的CURVE_FITTING_COST为例 添加残差项 ceres::Problem problem;for(int i0; iN; i){ //100个点句添加100个误差项//使用自动求导problem.AddResidualBlock(new ceres::AutoDiffCostFunctionCURVE_FITTING_COST, 1, 3(new CURVE_FITTING_COST(x_data[i], y_data[i])),nullptr,abc //待估计参数可在此处给初值);}其中AddResidualBlock param1ceres::AutoDiffCostFunction是用自动求导的方式是一个类模板需要传入参数类型实例化为模板类类名输出维度标量误差维度1输入维度abc三个参数维度3然后传入实际参数来实例化出一个类也可以自己求雅克比传给ceres这里不多说 param2 核函数一般不用传nullptr param3 待估计参数由于非线性优化对初值敏感所以可以从这里传入待优化变量的初值 关于残差项的构建 using namespace std; struct CURVE_FITTING_COST{CURVE_FITTING_COST(double x, double y):_x(x), _y(y){} //构造函数需要传入的对象templatetypename Tbool operator()(const T *const abc, T *residual) const {residual[0] T(_y) - ceres::exp(abc[0] * T(_x) * T(_x) abc[1] * T(_x) abc[2]);return true;}const double _x, _y; };重载operator() param1 输入参数三维待估计参数。 param2 输出参数一维误差。 这个函数就是用输入的参数通过计算算出残差用于求导。 3. summary 用于保存优化log日志 3. 求导方式 3.1 自行求导 求导方式有自行求导和Autodiff 自行求导需要继承ceres::SizedCostFunction并重载Evaluate()函数自行推导导数计算jacobiansparameters传入的即为待优化参数 调用 CameraLidarFactor *f new CameraLidarFactor(Rl1_l2, tl1_l2, _z); //求导方式problem.AddResidualBlock(f, new ceres::HuberLoss(1e-6), _phi, _t); //第三部分为待优化参数可赋初值具体实现 class CameraLidarFactor : public ceres::SizedCostFunction2, 1, 2 { //第一个是输出维度phi和t一个1维一个2维 public:CameraLidarFactor(Matrix2d Rl1_l2, Vector2d tl1_l2, Vector2d z) : // 待优化的philidar系下的平移Rl1_l2(Rl1_l2), tl1_l2(tl1_l2), z_(z) {}virtual bool Evaluate(double const *const *parameters, double *residuals, double **jacobians) const {double phi_l_lc parameters[0][0];Matrix2d Rl_lc; // rot2d_from_yawRl_lc cos(phi_l_lc), -sin(phi_l_lc),sin(phi_l_lc), cos(phi_l_lc);Vector2d tl_lc(parameters[1][0], parameters[1][1]);Vector2d thc1_hc2 (-tl_lc tl1_l2 Rl1_l2 * tl_lc); // -(l1)tl1_lc1 (l1)tl1_l2 Rl1_l2 * (l2)tl2_lc2MapVector2d residual(residuals);residual Rl_lc.inverse() * thc1_hc2 - z_; //(hc1)thc1_hc2 - (hc1)thc1_hc2if (jacobians) {if (jacobians[0]) {Matrix2d Rl_hc_inverse_prime;Rl_hc_inverse_prime -sin(phi_l_lc), cos(phi_l_lc), //逆求导-cos(phi_l_lc), -sin(phi_l_lc);MapMatrixdouble, 2, 1 jacobian_phi(jacobians[0]);jacobian_phi Rl_hc_inverse_prime * thc1_hc2;}if (jacobians[1]) {MapMatrixdouble, 2, 2, RowMajor jacobian_t(jacobians[1]);jacobian_t Rl_lc.inverse() * (Rl1_l2 - Matrix2d::Identity());}}return true;}Matrix2d Rl1_l2;Vector2d tl1_l2, z_; };3.2 Autodiff自动求导 在定义costfunction时选择ceres::AutoDiffCostFunction使用自动求导求数值导数需要重载operator()。 **注意**这里重载operator需要是函数模板里面所有的数据都要使用模板的数据类型。 调用 ceres::CostFunction *cost_function NULL;cost_function CamTiltFactor::Create(init_z, image_poses_[i].second.translation());problem.AddResidualBlock(cost_function, new ceres::HuberLoss(1e-5), para_qic);实现 struct CamTiltFactor {CamTiltFactor(const double init_z, const Eigen::Vector3d trans) :init_z_(init_z), trans_(trans) {}static ceres::CostFunction *Create(const double init_z, Eigen::Vector3d trans) {return new ceres::AutoDiffCostFunctionCamTiltFactor, 1, 4(new CamTiltFactor(init_z, trans));}templatetypename _T2bool operator()(const _T2 *const para_qic, _T2 *residuals) const {//计算residualspara_qic[0]Eigen::Quaternion_T2 _quat{para_qic[0], para_qic[1], para_qic[2], para_qic[3]};Eigen::Matrix_T2, 3, 1 tmp_trans_(_T2(trans_.x()), _T2(trans_.y()), _T2(trans_.z()));Eigen::Matrix_T2, 3, 1 _t_rotated _quat * tmp_trans_; //使用重载的乘法residuals[0] _T2(_t_rotated.z()) - _T2(init_z_); //残差return true;}Vector3d trans_;double init_z_; };另外当四元数为优化的对象时需要调用ceres::QuaternionParameterization来消除自由度冗余 double para_qic[4] {1, 0, 0, 0};problem.AddParameterBlock(para_qic, 4, new ceres::QuaternionParameterization);
http://www.hkea.cn/news/14272311/

相关文章:

  • 深圳建设厅网站首页网上商店建设前准备
  • 南浔建设网站百度制作的wordpress工具
  • 企业网站建设的文章怎么搜索整个网站内容
  • 网站建设公司包括哪些内容建设论坛网站用什么cms
  • 网站方案讲解技巧网页美工兼职
  • 怎么把在微企点做响应式网站网站建设的重要性与价值
  • 青岛如何做网站seowordpress 标签特效
  • 设计网站推荐 zoo我想网
  • 软件服务网站设计费如何做分录wordpress自动排版的编辑器
  • 东莞建设网官方网站首页wordpress男同
  • 湖北网站建设公司哪家好关键词优化seo公司
  • 旅社网站建设手机网站可以做英文版本吗
  • 公司网站建设计划阳明拍卖公司网站
  • 商丘网站制作的流程吉林省住房建设安厅网站
  • 环保设计院的网站建设建网站提供下载
  • 哪个网站做头像比较好开发公司项目下半年计划
  • 前端学习网站建设教程微信嵌入网站开发
  • 电子商务网站建设的知识点制作网站的公司
  • 手表网站欧米茄报价网站建设实训教程
  • 新建网站seo优化怎么做电子商务网站后台模板
  • 建设银行招标网站中煤矿山建设集团网站
  • 网络公司产品关键词优化推广公司哪家好
  • 织梦增加网站英文名称最新的网站建设软件有哪些
  • 中山网站建设文化策划书汽车之家如何做团购网站
  • 江门网站推广优化平面设计的网站有哪些
  • 四川网站排名wordpress标签搜索
  • 餐饮商城网站建设南阳网站排名优化
  • 做请帖网站上海人才招聘哪个网站好
  • 网站开发中点赞怎么做到的网站敏感词汇
  • 设计手机网站页面尺寸大小中国行业数据分析网