Rosbag回放时间戳问题
Rosbag回放时间戳问题为了避免rosbag录制记录的时间戳和使用时相差过大,可以把ros的时间设置为模拟时间
方法为:
(1)首先启动roscore,然后设置参数 /use_sim_time
1rosparam set /use_sim_time true
(2)然后再启动 rosbag play 节点,加上参数 —clock以同时发布时钟信息, -l 用于循环播放
1rosbag play XXX.bag --clock -l
Ceres优化库—自动求导与解析求导的实现
Ceres优化库—自动求导与解析求导的实现Ceres提供了三种求导方式:自动求导、解析求导、数值求导。
1.自动求导(1) 自动求导是通过定义一个仿函数,然后传给AutoDiffCostFunction, 只要给出残差和待优化变量的表达式,Ceres就能自动地求出导数。
(2) 所谓仿函数,其实是一个类,只不过这个类的作用像函数,所以叫仿函数。原理就是类实现了operator()函数。
(3) operator()函数必须是模板函数,因为Ceres内部求导要用到。
1234567891011121314// 自动求导 构造仿函数struct MyAutoCostFunction { MyAutoCostFunction(double x, double y) : _x(x), _y(y) {} // 残差的计算 template<typename T> bool operator()(const T *const abcd, T *residual) const { residual[0] = T(_y) - (po ...
三维旋转变换可视化
三维旋转变换可视化最近做一个项目,机器人上有四个相机,如图所示放置,要求各个相机相对于车身中心的外参
关于Camera系和Body系之间的转换,Camera系Z轴超前,X轴朝右,Y轴朝下;Body系,X轴朝前,Y轴朝左,Z轴朝上。$\ R_{cb}$可由两步旋转得到。
为了验证旋转的正确性,我简单写了个可视化程序。以相机1为例,先绕$x_c$轴旋转$\ +\frac{\pi}{2}$,再绕$y_c$轴旋转$\ -\frac{3\pi}{4}$,就旋转成了Body系
完整代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115#include <iost ...
利用OpenVino部署yolov5模型
利用OpenVino部署yolov5模型训练好的yolov5模型想部署在NUC小电脑的Ubuntu环境上,这里我们选择OpenVINO工具进行部署。OpenVINO是英特尔推出的一款全面的工具套件,用于快速部署应用和解决方案。
1. OpenVINO的安装首先进入OpenVINO官网下载安装包【下载地址】,按如下选择版本。你可能会问为什么不选择2022的最新版本呢?因为2022.1的安装方式和之前有所变化,现在网上对于新版的博客资源较少,这里我们选择2021.4.2是较为稳妥的方式,有问题一般都可以在前人的博客中找到答案(bushi,其实就是我太菜…)。
Step1 下载完成后,解压安装包,12#在终端中打开, 使用带安装界面的安装脚本sudo ./install_GUI.sh
依次勾选接收协议,拒绝收集信息,继续安装。安装过程中可能会提示没找到显卡,发现另一个OpenCV等信息,不用管它。
Step2 安装依赖12cd /opt/intel/openvino_2021.4.752/install_dependenciessudo -E ./install_openvino_depe ...
【CMake】target_include_directories和include_directories
【CMake】target_include_directories和include_directories最近做项目遇到了一个问题,一个功能包里有两个节点文件,A节点依赖于Opencv3,B节点依赖于Opencv4,想让两个节点分别找到对应版本的OpenCV,这时候就要对CMakeLists.txt做一些改动。
使用target_include_directories替换include_directories,这篇博客很好的解决了我的问题,这里转载一下,表示感谢:
版权声明:本文转载自CSDN博主「夜空紫色」的原创文章原文链接:https://blog.csdn.net/qq_33726635/article/details/121896441
1.作用给源文件添加头文件搜索路径:将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径
2.区别:2.1 include_directories:当前CMakeList.txt中的所有目标以及所有在其调用点之后添加的子目录中的所有目标将具有此头文件搜索路径。
2.2 target_include_direc ...
利用OpenCV从一段视频中提取图片
利用OpenCV从一段视频中提取图片最近在做一个目标检测的小项目,需要自己做点数据集,手里适合做数据集的资源是mp4视频的格式,于是想用C++写个脚本从视频里提取图片保存,并且可以自定义抽取频率。
123456789101112131415161718192021222324252627282930313233343536373839404142434445#include <iostream> #include <stdio.h>#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv/cv.h> using namespace cv;using namespace std; int main(int argc, char **argv){ Mat srcImg; //视频文件路径 string filen ...
段错误怎么办?快来试试这个,backward-cpp,一款强大的C++堆栈跟踪打印器
段错误怎么办?快来试试这个,backward-cpp,一款强大的C++堆栈跟踪打印器
本文参考于:
【简书】一个漂亮的C ++堆栈跟踪打印器-backward-cpp https://www.jianshu.com/p/b8e684ae5d88
【知乎】Backward-cpp 妈妈再也不用担心segmentation fault! https://zhuanlan.zhihu.com/p/397148839
在进行C/C++相关开发时候,经常会遇到段错误,这个时候比较无语的一点就是Linux Shell终端下几乎不会输出太多有用的信息,大多数情况下打印信息如下:Segmentation fault (core dumped)
有大佬专门开发了一款工具,叫做backward-cpp用来解决这个问题,其Github仓库地址为:https://github.com/bombela/backward-cpp
配置方法:
如果你的项目使用Cmake构建的,官方提供了两种方式,这里我选择第一种方式
首先安装用来打印debug信息的第三方库,官方推荐了三个库,这里我们选择libdw from ...
SLAM问题中的李群和李代数
SLAM问题中的李群和李代数0.动机在探讨李群李代数之前,我们先思考一个问题。为什么要在SLAM中引入李群和李代数?答:为了优化过程中的求导。
先来看一下最简单的最小二乘问题:
\min _{x} \frac{1}{2}\|f(x)\|_{2}^{2}简单来说,我们要找到一个 $x$,使函数达到极值,换成SLAM的情景,就是我们要找到一个位姿,让它最“合理”,我们一般定义观测与实际数据的误差,尽量使其最小化。
还是先从简单的例子开始考虑,如果函数是像 $f(x)=x^2$ 这种很简单的形式,那么很容易通过求导数为0点,通过解析形式求出结果。然而一旦函数变得复杂,无法以解析形式求解,就需要用迭代的方式进行求解了:
先给定一个初始值 $x_0$
寻找一个增量 $\Delta x$,使$ \left|f\left(x_{i}+\Delta x\right)\right|_{2}^{2}<\left|f\left(x_{i}\right)\right|_{2}^{2}$ (其实就是寻找函数降低的方向)
若 $\Delta x$ 足够小,则停止迭代
否则令 $x_{i+1}=x_ ...
自动驾驶定位与感知研究方向调研
本文参考以下资料:
【深蓝学院】自动驾驶算法岗的招聘现状与未来 https://www.zhihu.com/zvideo/1425502087878328320
自主无人系统的定位与感知是让机器人走向智能化的重要一环,并且已经在移动机器人、自动驾驶等场景下有了许多落地的应用。
移动机器人主要应用为:扫地机;送餐服务机器人;AGV;物流搬运机器人等室内场景。
自动驾驶主要面向大型室外场景,具体可分为:定位、高精地图、感知、决策规划、控制 几个子模块。
二者的技术栈大部分相通,本身来说,自动驾驶也是属于机器人的一个范畴。现在,随着各种应用落地,它们的相同之处在于都具有自主移动和感知环境的能力,但是因为它们的场景不一样,实现的功能也不一样,自动驾驶主要基于道路等开放场景,而机器人主要以室内的封闭场景为主,因此软件和底盘在内的硬件都会有一定差异。另一个是由于环境不同,所需要协同的对象也不同,自动驾驶时车辆需要与道路标志、红绿灯等进行协同,而服务机器人需要在室内场景与电梯进行交互等。
下面针对定位与感知两个方向进行调研分析:
一、定位(SLAM)1 ...