问题标签 [ceres-solver]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 架构 x86_64 的未定义符号 - 如何查找丢失的文件
我正在尝试使用 ceres-solver 包。使用自制软件安装后,我添加了创建的 CMakeLists.txt 文件,如下所示:
但是,当我尝试使用 Ceres 包时,出现链接错误。作为一个非常简单的测试用例,我使用以下代码:
这会引发以下错误:
通过查看stackoverflow,我现在知道我可能从CMakeLists.txt 中遗漏了一些东西,但无论我尝试什么,我似乎都无法摆脱错误。关于如何解决这个问题的任何建议?
我目前在 OS 10.12.6 上使用 CLion for Mac 工作。
发布解决方案编辑
根据 PureVision 的建议,我将 CMakeLists.txt 更改为以下内容,一切都很好
c++ - 特征矩阵 ros/cols 不正确
我无法编译:
这两个错误(每个大约 1000 行)最终得出结论,*
and-
运算符不能“重载”(他们的术语,不是我的)。
a_
属于这种类型:typedef Eigen::Map<Eigen::Matrix<double, ROWS, COLS>> EA;
b_
属于这种类型:typedef Eigen::Map<Eigen::Matrix<double, ROWS, 1>> EB;
T
是 Ceres Solver Jet 类型。这些错误似乎表明列/行不匹配,而不是类型问题。不过,我可能是错的;输出太冗长了。我是否误解了行和列如何与 Eigen 矩阵运算符一起使用?
更新:我遵循了“致命错误”的建议:
optimization - ceres求解器分析导数不起作用
我要优化的参数是pose = [x,y,theta]
我的目标函数是最小化姿势和激光点的占用值。在这里我将它们手动添加到residuals[0]
我有 3 个参数[x,y,theta]
,所以我的雅可比有 3 个维度jocobians[0]
但是当我运行程序时,报告如下:
既然我设置了雅可比,怎么能说梯度范数这么小呢?
camera-calibration - Ceres Solver:捆绑调整
我想通过捆绑调整找到每个帧的外部相机。
匹配使用 cv::findHomography(RANSAC) 去除异常值。结果几乎是完美的。
找到匹配点后,我使用google的ceres求解器进行捆绑调整。
如果只有两帧,结果是好的。我已经重新投影了点云。他们看起来是正确的。
但是,我未能在多个框架上进行 BA。我尝试了几种策略:(我必须保持比例因子不变)
初始化世界坐标中 (0, 0, 100) 处的所有点。以零旋转初始化 (0, 0, 0) 中的所有相机。修复第一个视图外部。开始做BA..
BA几次。第 1 帧和第 2 帧的第一次迭代。第 2 帧和第 3 帧的第二次迭代。每次迭代我在相机空间中的 (0, 0, 100) 上放置新的观察点。(重投影函数无法处理相机后面的点)
第一种方法不好。第二个更好。但是不允许有恒定的比例因子..
eigen3 - 在谷神星的双阵列的一部分上进行 AngleAxisToRotationMatirx?
现在我正在与 Ceres 和 Eigen 合作。我有一个6x3 = 18 -d 双数组,我们称之为xs,它定义为:
基本上xs包含以角度轴格式表示的 6 个旋转。并且我需要将所有 6 的每个旋转转换为旋转矩阵格式,然后进行矩阵乘法。
在示例代码中,我通过Eigen::Map提取xs的前 3 个元素,然后在其上应用AngleAxisToRotationMatrix。但我不断收到这样的错误:
有人可以在这里帮帮我吗?我对 Ceres 和 Eigen 还很陌生,这真的把我逼疯了。
谢谢!
c++ - Ceres-Solver 成本函数继承错误:模板可能不是虚拟的
我已经使用ceres-solver很长时间了,它是一个了不起的工具。到目前为止,我的使用不是基于可重用代码,我正在努力改进这一点。Ceres 使用具有特定模板化方法的特定结构作为其自动微分的接口. 在我试图解决的问题中,继承是有意义的,因为我需要拥有的不同成本函数彼此非常相似。我创建了一个类似的示例(但没有意义,抱歉)。想象一下,我们希望能够找到具有给定面积的多边形。在我的示例中,多边形可以是三角形或矩形。考虑到这一点,有一个实现所有内容的基类和实现每个特定多边形的面积计算的特定类是有意义的:
形状成本函数
矩形成本函数
三角成本函数
区域图书馆
主要的
这样做的问题是模板函数不能是虚拟的,正如在stackoverflow(here和here)中多次解释的那样。但是,似乎有一些使用boost::any
. 我试图在我的示例中使用它但没有成功。我也尝试将模板从类方法移动到类,类似于这里,但 ceres 不接受它作为成本函数。
我的问题是(请记住,我只能使用该方法,template<typename T> bool operator()(...)const
否则我无法与 ceres 交互):
- 拥有这样的继承系统是否有意义(想象这是一个比示例复杂得多的问题)?
- 有没有办法保持这个继承系统并使代码工作,或者我应该将所有内容移动到单独的函数并从每个
template<typename T> bool operator()(...)const
类方法中调用正确的函数?
先感谢您。
ios - 在 iOS 上安装 ceres-solver
跑步cmake -DCMAKE_TOOLCHAIN_FILE=ceres-solver/cmake/iOS.cmake -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DEIGEN_INCLUDE_DIR=/usr/local/Cellar/eigen -DIOS_PLATFORM=OS ceres-solver
给了我这些错误
即使我将 CXX11 设置为 ON,我也会得到同样的错误。我应该怎么办?
假设我得到这个工作,我只是跑来make install
获取libceres.a
文件吗?
很多帮助表示赞赏。
optimization - 如何在 Ceres Solver 中动态移除残差块或减小残差块大小
我可以在优化迭代之间添加或删除残差块吗?我正在尝试使用自动区分。
我正在使用 Ceres-Solver 解决相机跟踪问题。我想通过最小化特征点的光度误差来找到最佳的相对姿势。然而,当我更新姿势时,每次迭代,一些重投影点都会落在相机视图之外,因此不能用于优化。到目前为止,每个特征点都是一个残差块。
ios - 使用 Xcode 9 为 iOS 构建 Ceres 的问题
我正在尝试使用 Xcode 9.2 (9C40b) 和 CMake 3.11.0-rc3 为 iOS 10+构建Ceres 1.13.0 。似乎 CMake 无法识别 Xcode 9 提供的 clang 版本。这是怎么回事?看起来不像,因为以前版本的 Ceres 构建得很好。
这个问题似乎表明 CMake 不支持 AppleClang,这对我来说似乎很可笑。这里的另一个团队在 macOS 上使用 CMake 构建了我们的大量代码,仅使用 Xcode 提供的 clang。
我还尝试修改 Ceres iOS.cmake 文件以按照该 SO 答案的建议设置 CMP0025 策略,但这没有任何区别。
更新
我注意到了一些事情。当 CMake 适用于其他构建时,它会将编译器正确标识为AppleClang 9.0.0.9000039
. 当它失败时,您可以看到下面的消息(它称之为“Clang”)。在这两种情况下,它都将 CXX 编译器标识为/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
. 下面的输出显示了无法识别编译器的情况
Xcode 版本:
非常感谢您的指导。
ceres-solver - Ceres:计算参数的不确定性
我正在使用 Ceres 进行拟合,并希望获得拟合参数的不确定性。有人建议使用该Covariance
课程,但我不确定我是否正确阅读了文档。这是我尝试与文档类比以获得简单线性拟合的不确定性的方法:
它编译并产生输出,但结果与我得到的结果相差甚远,scipy
所以我一定犯了一个错误。