树莓派4B(ubuntu mate系统)使用d435i运行vins
提示本文为随手笔记,并不严谨,可参考:博客和博客进行配置 树莓派 ubuntu mate 20系统安装ros的步骤可以参考博客来完成
有一个树莓派4B,运行了ubuntu mate20的系统,现在需要基于ros运行realsense的d435i摄像头,并运行vins-fusion实现定位。 已经在台式机ubuntu18运行成功了历程,精度还算可以 参考:
- 前提需要
需要安装好ros、完成工作空间的创建,xtdrone代码的下载(方便复制vins代码)
- realsense-sdk的安装(非必须)
realsense-sdk的安装非必须,并且树莓派使用常规安装会报错,需要参考其他,我按照该博客完成了一半,后来发现无需也可以运行ros代码 sdk的作用是在电脑端运行官方界面,然后实现建图和定点的作用 但是我们只需要使用到ros代码,所以非必要安装
- realsense-ros安装
参考github即可。 安装驱动,maybe这样的叫法
# sudo apt-get install ros-$ROS_DISTRO-realsense2-camera
# 我们使用的是noetic的ros,因此是
sudo apt-get install ros-noetic-realsense2-camera
创建工作空间并编译包,按需复制代码
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/
# git clone https://github.com/IntelRealSense/realsense-ros.git
# 使用gitee代理
git clone https://gitee.com/olderking/realsense-ros.git
cd realsense-ros/
git checkout `git tag | sort -V | grep -P "^2.\d+\.\d+" | tail -1`
cd ..
catkin_init_workspace
cd ..
catkin_make clean
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install
添加源,按需
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
运行测试
# 运行
roslaunch realsense2_camera rs_camera.launch
查看数据和图像
rostopic list
rqt_image_view
- 安装vins-ros
同样参考github 创建工作空间
cd ~/catkin_ws/src
# git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
# gitee
git clone https://gitee.com/stancy_sun/vins_fusion.git
cd ../
catkin_make
source ~/catkin_ws/devel/setup.bash
- 继续运行,开始泡桐
虽说运行上述两个launch即可,但是需要根据d435i的参考,修改一些内容,参考:博客和博客 修改Realsense文件:复制修改~/catkin_ws/src/realsense/realsense2_camera/launch/目录下的rs_camera.launch,重命名为rs_camera_vins.launch,并修改让其发布双目灰度图像数据(实际是一样的数据)。参考第一个博客,有提供修改后的文件 修改VINS文件:目的是提供摄像头参数,并告知是一个imu+假双目的方式,同样参考第一篇博客 运行:
roslaunch realsense2_camera rs_camera_vins.launch
roslaunch vins vins_rviz.launch # 用于启动界面,应该可以不用
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_imu_config.yaml
- 由于运行realsense一直报错,或其他原因,导致vins无法正常工作。【吐槽:奇了怪了,读取图像和imu数据,要多少性能啊,就读取不了】,最后修改realsens_ros中的文件为以下,才勉强运行了一点点,但是巨卡,CPU占用95%以上(包括了px4、realsense和vins)。修改主要为:帧数降低,去除同步和深度对齐,但是一段时间后会显示无imu数据。
<launch>
<arg name="serial_no" default=""/>
<arg name="usb_port_id" default=""/>
<arg name="device_type" default=""/>
<arg name="json_file_path" default=""/>
<arg name="camera" default="camera"/>
<arg name="tf_prefix" default="$(arg camera)"/>
<arg name="external_manager" default="false"/>
<arg name="manager" default="realsense2_camera_manager"/>
<arg name="fisheye_width" default="640"/>
<arg name="fisheye_height" default="480"/>
<arg name="enable_fisheye" default="false"/>
<arg name="depth_width" default="640"/>
<arg name="depth_height" default="480"/>
<arg name="enable_depth" default="true"/>
<arg name="infra_width" default="640"/>
<arg name="infra_height" default="480"/>
<arg name="enable_infra1" default="true"/>
<arg name="enable_infra2" default="true"/>
<arg name="color_width" default="640"/>
<arg name="color_height" default="480"/>
<arg name="enable_color" default="true"/>
<arg name="fisheye_fps" default="15"/>
<arg name="depth_fps" default="15"/>
<arg name="infra_fps" default="15"/>
<arg name="color_fps" default="15"/>
<arg name="gyro_fps" default="200"/>
<arg name="accel_fps" default="250"/>
<arg name="enable_gyro" default="true"/>
<arg name="enable_accel" default="true"/>
<arg name="enable_pointcloud" default="false"/>
<arg name="pointcloud_texture_stream" default="RS2_STREAM_COLOR"/>
<arg name="pointcloud_texture_index" default="0"/>
<arg name="enable_sync" default="false"/>
<arg name="align_depth" default="false"/>
<arg name="publish_tf" default="true"/>
<arg name="tf_publish_rate" default="0"/>
<arg name="filters" default=""/>
<arg name="clip_distance" default="-2"/>
<arg name="linear_accel_cov" default="0.01"/>
<arg name="initial_reset" default="false"/>
<arg name="unite_imu_method" default="linear_interpolation"/>
<arg name="topic_odom_in" default="odom_in"/>
<arg name="calib_odom_file" default=""/>
<arg name="publish_odom_tf" default="true"/>
<arg name="allow_no_texture_points" default="false"/>
<arg name="emitter_enable" default="false"/>
<group ns="$(arg camera)">
<include file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg name="tf_prefix" value="$(arg tf_prefix)"/>
<arg name="external_manager" value="$(arg external_manager)"/>
<arg name="manager" value="$(arg manager)"/>
<arg name="serial_no" value="$(arg serial_no)"/>
<arg name="usb_port_id" value="$(arg usb_port_id)"/>
<arg name="device_type" value="$(arg device_type)"/>
<arg name="json_file_path" value="$(arg json_file_path)"/>
<arg name="enable_pointcloud" value="$(arg enable_pointcloud)"/>
<arg name="pointcloud_texture_stream" value="$(arg pointcloud_texture_stream)"/>
<arg name="pointcloud_texture_index" value="$(arg pointcloud_texture_index)"/>
<arg name="enable_sync" value="$(arg enable_sync)"/>
<arg name="align_depth" value="$(arg align_depth)"/>
<arg name="fisheye_width" value="$(arg fisheye_width)"/>
<arg name="fisheye_height" value="$(arg fisheye_height)"/>
<arg name="enable_fisheye" value="$(arg enable_fisheye)"/>
<arg name="depth_width" value="$(arg depth_width)"/>
<arg name="depth_height" value="$(arg depth_height)"/>
<arg name="enable_depth" value="$(arg enable_depth)"/>
<arg name="color_width" value="$(arg color_width)"/>
<arg name="color_height" value="$(arg color_height)"/>
<arg name="enable_color" value="$(arg enable_color)"/>
<arg name="infra_width" value="$(arg infra_width)"/>
<arg name="infra_height" value="$(arg infra_height)"/>
<arg name="enable_infra1" value="$(arg enable_infra1)"/>
<arg name="enable_infra2" value="$(arg enable_infra2)"/>
<arg name="fisheye_fps" value="$(arg fisheye_fps)"/>
<arg name="depth_fps" value="$(arg depth_fps)"/>
<arg name="infra_fps" value="$(arg infra_fps)"/>
<arg name="color_fps" value="$(arg color_fps)"/>
<arg name="gyro_fps" value="$(arg gyro_fps)"/>
<arg name="accel_fps" value="$(arg accel_fps)"/>
<arg name="enable_gyro" value="$(arg enable_gyro)"/>
<arg name="enable_accel" value="$(arg enable_accel)"/>
<arg name="publish_tf" value="$(arg publish_tf)"/>
<arg name="tf_publish_rate" value="$(arg tf_publish_rate)"/>
<arg name="filters" value="$(arg filters)"/>
<arg name="clip_distance" value="$(arg clip_distance)"/>
<arg name="linear_accel_cov" value="$(arg linear_accel_cov)"/>
<arg name="initial_reset" value="$(arg initial_reset)"/>
<arg name="unite_imu_method" value="$(arg unite_imu_method)"/>
<arg name="topic_odom_in" value="$(arg topic_odom_in)"/>
<arg name="calib_odom_file" value="$(arg calib_odom_file)"/>
<arg name="publish_odom_tf" value="$(arg publish_odom_tf)"/>
<arg name="allow_no_texture_points" value="$(arg allow_no_texture_points)"/>
</include>
</group>
</launch>
|