前期准备工作已经完成,接下来我们就准备VINS在NX的落地。
1.下载源码编译
首先VINS_gpu版本需要引入OpenCV CUDA版本的加速,由于我们的NX镜像已经安装好CUDA,这里就不在赘叙,需要的自行google查找资料。下面开始安装VINS源码。
mkdir -p vins_gpu/src
cd vins_gpu/src
git clone https://github.com/pjrambo/VINS-Fusion-gpu.git
下载完之后,需要更改vins_estimator/CMakeLists.txt,20行左右需要把OpenCV路径改成你自己的路径。还需要更改的有 loop_fusion/CMakeLists.txt,同样也需要更改路径。更改完之后,开始编译。
cd ..
catkin_make
如果OpenCV CUDA环境安装不对,这里就会报错。
2.更改配置参数

注意官方提供的参数里面没有D435i的配置参数,需要自己依葫芦画瓢。
1代表打开,0表示关闭。
那我就以我配置的yaml文件为例
需要更改自己实际订阅IMU以及双目图像发布话题以及输出路径。

这里的矩阵涉及IMU和相机的相对变换。可以由之前的联合标定得到。注意左右目的顺序。


IMU的数据可以由之前的标定得到。

下面的参数意思是在线估计IMU的相机之间的时间差,虽然说Intel说D435i已经做好硬件同步,但是用Kalibr标定出来还是有0.0015左右的时间误差。

3.启动VINS
前期的参数配置工作完成后,我们就可以启动VINS
3.1启动 D435i
需要修改一下D435i的发布频率,建议为15HZ,这样NX上不会有较大的延迟。路径还是你自己安装realsense_ros的路径。比如我自己是安装在桌面上。

roslaunch realsense2_camera rs_camera.launch //启动D435i
需要查看下D435i是否发布IMU数据,这里主要是XYZ三个轴的线速度。
rostopic echo /camera/imu
3.2启动VINS
rosrun vins vins_node +这里是你自己的D435i配置文件的路径
比如我自己是
rosrun vins vins_node
/home/amov/vins_gpu/src/VINS-Fusion-gpu-master/config/realsense/realsense1.yaml
可以显示出当前位姿信息。

roslaunch vins vins_rviz.launch //启动RVIZ
启动完之后,我们可以拿着飞机跑一圈,看看定位精度以及延时。如果没有问题我们就可以接入Prometheus。
4.接入Prometheus
4.1在Prometheus/Modules/control/src文件夹中修改px4_pos_estimator.cpp,主要修改内容如下:
回调函数中,主要是VINS发布数据格式为YXZ,而Prometheus需要ENU,所以这里做一个变换。VINS的四元数虚部在前,这里也需要调整下。

4.2修改Amov_lab/src/P450_expriments/launch_basic 中的p450_vio_onboard.launch的启动文件。 这里主要是修改位姿数据来源,我们不再依赖T265。

4.3最后我们修改主函数里面的订阅话题

5.启动VINS和Prometheus
roslaunch realsense2_camera rs_camera.launch
rosrun vins vins_node + (配置文件路径,即我们放D435i配置文件的路径,具体应该是在VINS 包下面)
roslaunch p230_expriments p230_vio_onboard.launch
我们查看下rqt_graph,可以看到VINS发布的位姿已经被px4_pos_estimator订阅,类似于之前的T265发布的 odom/sample,通信链路正常。

并且我们可以看到终端可以正确打印位姿数据,即代表VINS接入Prometheus成功。


至此,我们已经成功把VINS接入到Prometheus中,那就开启我们的飞行之旅吧。
阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!
网友评论