一.Vins-fusion参考这篇
NVIDIA Jetson Xavier NX部署VINS-fusion-GPU-CSDN博客
二.参考时候遇到的问题
1.在第四步安装opencv的cmake命令遇到报错CMake Error: The source directory "/home/jetson/opencv-3.4.1/build/WITH_TBB=ON" does not exist.
解决方法:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D CUDA_ARCH_BIN=7.2 \
-D CUDA_ARCH_PTX="" \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON \
-D WITH_LIBV4L=ON \
-D WITH_GSTREAMER=ON \
-D WITH_GSTREAMER_0_10=OFF \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" \
-D WITH_TBB=ON \
..
原因是空格出现问题以及最后的 .. 忘记加了
2.第四步安装opencv的make 命令太慢了
解决方法:
改成 make -j4,报错的话再换回make
3.git的时候显示error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: The remote end hung up unexpectedly
解决办法:
直接网页端打开,Download zip就可以了
三.数据集上的使用
太大了,不下了
四.安装D435i的驱动
参考这篇
实测(一) NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图_d435i slam-CSDN博客
但是这里的v2.5太旧不支持现在使用的内核,进那个sh文件里改一下支持的版本就可以了
五.对配置文件的一些修改
1.~/realsense_ws/src/realsense-ros-2.3.2/realsense2_camera/launch/rs_camera.launch
<arg name="enable_gyro" default="true"/>
<arg name="enable_accel" default="true"/>
这两个由false改成true
<arg name="unite_imu_method" default="linear_interpolation"/>
这个的default原本是"",改为"linear_interpolation"
这样就有imu话题了
<arg name="enable_infra" default="true"/>
<arg name="enable_infra1" default="true"/>
<arg name="enable_infra2" default="true"/>
这仨改成true,就有infra1和infra2话题了
添加以下内容:
<arg name="emitter_enable" default="false"/>
<!-- rosparam set /camera/stereo_module/emitter_enabled false -->
<rosparam>
/camera/stereo_module/emitter_enabled: false
</rosparam>
<rosparam if="$(arg emitter_enable)">
/camera/stereo_module/emitter_enabled: true
</rosparam>
这样就可以关闭结构光了
如果不行
roslaunch realsense2_camera rs_camera.launch
rosrun rqt_reconfigure rqt_reconfigure
打开后将camera->stereo_module中的emitter_enabled设置为off(0)
2.~/offboard_ws/src/VINS-Fusion-gpu-master/config/realsense_d435i/realsense_stereo_imu_config.yaml
output_path: "/home/jetson/output/"
这是结果输出的位置,改成自己的
rostopic echo /camera/infra1/camera_info
根据这个改 left.yaml和right.yaml
六.相机校准
https://blog.csdn.net/u010196944/article/details/127240169
1.标定相机内参
棋盘格文件缩放到25%,经测量边到边是0.029m
所以配置文件改为
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.029 #size of apriltag, edge to edge [m]
tagSpacing: 0.3 #ratio of space between tags to tagSize
装好了,提示importing libraries 非法指令 (核心已转储)
解决方法:python版本的问题,deactivate conda
又提示没有权限
sudo su
source devel/setup.bash
命令有问题,少了个空格,应该改成
rosrun kalibr kalibr_calibrate_cameras --target src/kalibr/data/checkerboard.yaml --bag src/kalibr/data/d435i_infra_left.bag --models pinhole-radtan --topics /left --bag-from -10 100 --show-extractio
rosrun kalibr kalibr_calibrate_cameras --target src/kalibr/data/checkerboard.yaml --bag src/kalibr/data/d435i_infra_right.bag --models pinhole-radtan --topics /right --bag-from -10 100 --show-extractio
2.imu随机游走标定
3.标定相机外参
run.sh有点问题,我修改了一下(roslaunch应该改成rosrun)
roslaunch vins vins_rviz.launch & sleep 5;
rosbag play shfiles/bag/IndoorScene.bag & sleep 5;
rosrun vins vins_node src/VINS-Fusion-gpu-master/config/realsense_d435i/realsense_stereo_imu_config.yaml & sleep 3;
rosrun loop_fusion loop_fusion_node src/VINS-Fusion-gpu-master/config/realsense_d435i/realsense_stereo_imu_config.yaml;
wait;
在外参输出结果路径,将extrinsic_parameter.txt中数据替换掉realsense_stereo_imu_config.yaml中外参数据
这句话的意思是,在 realsense_stereo_imu_config.yaml设置的输出路径里去找extrinsic_parameter.csv文件(不知道是不是VINS版本不一样)
七.桥接程序
将slam程序发布的ros话题,接收下来转换成mavros的话题格式,再传输给px4
https://blog.csdn.net/u010196944/article/details/134466325
八.Vins-Fusion 延迟十几秒
/home/jetson/offboard_ws/src/VINS-Fusion-gpu-master/vins_estimator/src/rosNodeTest.cpp
在此文件中第31行,修改为
bool x = true;//!
bool y = true;//!
void img0_callback(const sensor_msgs::ImageConstPtr &img_msg)
{
//!
if(x){
x = false;
}else{
m_buf.lock();
img0_buf.push(img_msg);
x = true;
m_buf.unlock();
}
//!
//m_buf.lock();
//img0_buf.push(img_msg);
//m_buf.unlock();
}
void img1_callback(const sensor_msgs::ImageConstPtr &img_msg)
{
//!
if(y){
y = false;
}else{
m_buf.lock();
img1_buf.push(img_msg);
y = true;
m_buf.unlock();
}
//!
//m_buf.lock();
//img1_buf.push(img_msg);
//m_buf.unlock();
}
修改了话题接收的频率(主要没找到D435i发布话题的频率在哪里修改)
九.高度数据的来源
参考的博客里没提,实际要把高度信息来源给改了
十.飞控连不上
roslaunch mavros px4.launch结果显示xxxstarted
原因是新的飞控的telem2口需要接地,不接地rx灯不亮,见鬼