0.设备、环境和说明
笔记本电脑i5-8300H、GTX 1060、32GRAM
因为后面要测试Vins-Fusion和ORB-SLAM3,所以推荐安装Ubuntu 18.04(或者Ubuntu 20.04) + ROS 1(不建议用比Ubuntu18更低的版本)
ROS一键安装命令:
wget http://fishros.com/install -O fishros && . fishros
ZED 2i:双目相机配有9轴IMU
此前电脑已经配置好:Ubuntu 18.04,ROS 1,Vins-Fusion,OpenCV 3.2.0,ceres-solver 1.14.0,CMake 3.12,Eigen 3.3.3,g2o(20年版本),Pangolin-0.6,Kalibr,imu_code等。
相机的usb接口要插在电脑的usb3.0协议的插口中。
1.安装ZED SDK3.8.2
官方手册Linux版本: https://www.stereolabs.com/docs/installation/linux/
选择静默安装即可,跳过CUDA检查。ZED相机依赖CUDA加速,所以电脑必须要安装CUDA!
The installer can be launched in silent mode with the – silent option (with a space between – and silent).
其中关于CUDA的解释:
CUDA 是 ZED SDK 用来在显卡上运行快速 AI 和计算机视觉任务的 NVIDIA® 库。在 ZED SDK 安装过程中,如果您的计算机上未检测到 CUDA,ZED SDK会自动下载并安装 CUDA。
建议跳过CUDA检查,然后根据自己显卡版本手动安装CUDA,速度会快一些。
CUDA官网:https://developer.nvidia.com/cuda-toolkit-archive
所以,最后的安装SDK指令最后应该是加上: – silent skip_cuda
安装完成后重启系统。安装全程不要加sudo。
z@h:~/zed/tools$ tree
.
├── ZED_Calibration
├── ZED_Depth_Viewer
├── ZED_Diagnostic
├── ZED_Explorer
├── ZEDfu
├── ZED_Sensor_Viewer
└── ZED_SVO_Editor
tools里面有一些小工具,可以检查相机原件是否正常。
例如打开
2.安装ZED-ROS
上一步相当于是安装了相机驱动,保证了相机能够运行,下面是安装ZED相机的ROS节点,使用ROS来控制相机的话题和指令:https://www.stereolabs.com/docs/ros/
先创建一个zed的专属工作空间:
mkdir -p ~/zed_ws/src
cd zed_ws/src/
catkin_init_workspace
zed-ros-wrapper是一个catkin包,github下载链接:https://github.com/stereolabs/zed-ros-wrapper
下载完成后,将zed-ros-wrapper改成zed_ros_wrapper。
找准自己安装的SDK对应的版本,在右侧的release中查找,手动下载压缩包,解压缩后放到src文件夹下。然后安装github中的命令开始编译:
cd ..
rosdep install --from-paths src --ignore-src -r -y
报错:
错误原因比较清楚,是没有找到zed_interfaces这个依赖项。依然是找到对应的版本v1.2:https://github.com/stereolabs/zed-ros-interfaces/releases/tag/v1.2,依然是改名为zed_ros_interfaces,解压缩后直接放到src文件夹下:
z@h:~/zed_ws$ tree -L 2
.
└── src├── CMakeLists.txt -> /opt/ros/melodic/share/catkin/cmake/toplevel.cmake├── zed_ros_interfaces└── zed_ros_wrapper
继续重新上面的操作:
rosdep install --from-paths src --ignore-src -r -y
cd ..
catkin_make -DCMAKE_BUILD_TYPE=Release
安装完成!
为了后续启动方便,可以编辑环境变量将节点添加进去:
gedit ~/.bashrc
## 添加:
source ~/zed_ws/devel/setup.bash
ZED 2i附加驱动、功能很丰富,不需要的例如zed-ros-examle可以不安装。
3.ROS相关命令
ROS是一个负责通讯的机器人控制系统,其信号连接是通过节点之间的发布和接收。
正常来说,如果没有启动roscore打开ros是没有任何话题和节点的。
所以我们在终端中输入,打开相机,观察相机正面Logo旁边会亮起蓝色指示灯:
roslaunch zed_wrapper zed2i.launch
a.查看节点,负责通信
rosnode list
b.查看话题
rostopic list
c.查看节点关系图(两端是节点,中间用话题传输)
rosrun rqt_graph rqt_graph
d.查看话题信息
例如打开相机后查看imu这个话题下的信息,确实就是查看imu实时工作状态。
rostopic echo /zed2i/zed_node/imu/data
e.查看话题频率
rostopic hz /zed2i/zed_node/imu/data
f.用rqt来看(rostopic list的可视化形式)
rosrun rqt_topic rqt_topic
勾选前面的对号,可以查看传输带宽和频率
g.修改话题频率
rosrun topic_tools throttle messages {topic1} {想要修改的频率} {topic2}
举例:
rosrun topic_tools throttle messages /zed2i/zed_node/imu/data 20.0 /zed2i/zed_node/imu/data_20
再次rostopic hz这个话题/zed2i/zed_node/imu/data_20
rostopic hz /zed2i/zed_node/imu/data_20
这些是后续运行SLAM常用的几个查看、修改指令,因为在标定过程中需要降低相机频率实现稳定等情况。
所有强烈建议使用X-超级终端窗口,不要使用Ubuntu自带的了。
sudo apt-get install terminator
Ctrl+Shift+O 和 Ctrl+Shift+E 实现一个窗口纵向和横向分栏。
可能遇到的小问题:
1.可能遇到Ctrl+Shift+E在terminator中失效的情况,这是因为安装的搜狗输入法快捷键冲突了。
2.有时候快捷键打不开terminator或者直接失灵了,检查一下你的Python版本是不是更换了,因为安装的时候默认绑定到了你的当前Python上。
h.录制rosbag
## 录制所有话题
rosbag record -a
#为文件命名
rosbag record -O bag_name.bag /topics..
#为文件名字做前缀
rosbag record -o bag_name /topics..
关于rosbag的录制和播放命令很多,详细可以查看官网或者参考博客:rosbag数据记录工具命令详解
4.双目相机标定
4.1 说明
像之前的介绍INDEMIND相机标定的博客一样,依然使用kalibr工具箱来标定。
Kalibr工具箱安装参考博客:【INDEMIND相机运行SLAM】
首先相机标定对稳定性很高,所以要对相机降频为4hz(官方推荐);其次要打开一个可视化窗口rviz来观察是否保证整个标定板信息全部位于图像中央;最后供kalibr处理的rosbag里面的数据格式(分辨率为640*480)要和后续测试数据相同(这一点容易被忽视)。
文献Porting A Visual Inertial SLAM Algorithm To Android Devices中:
These two different inputs led to the calibration results printed in Table 1 & 2. …Modern flat-panel displays serve the purpose of a perfect plane reasonably well.
可以看出,与显示器屏幕的重投影误差相比,印刷棋盘的误差要打大。其原因大概是由于打印机墨水量较多,打印的纸张上出现了轻微不均匀的波浪。表面不完全平坦导致误差增加两倍以上。现代平板显示器相当好的实现了完美平面的目的。
所以在标定的时候用显示器或者Pad是可以的。
之前在进行相机标定的时候都是没有安装严格规范流程:相机标定的时候是相机固定,标定板目标移动;后续联合标定的时候需要加入惯导信息所以是标定板固定,相机做6自由度激活运动。
这次尝试固定相机,将其架在三脚架上,手持平板运动。
4.2 修改话题频率和相机分辨率
通过rqt来查看我们需要的话题原生频率是多少:
rosrun rqt_topic rqt_topic
两个相机的原生频率为15hz,
4.3 rviz可视化工具
打开rviz,rviz是ros系统下的一个可视化工具,可以添加需要的话题来显示。
rosrun rviz rviz
默认打开情况是什么话题都没有的。
这里说明一点,工业相机与网络usb摄像头(webcam)或者手机摄像头有区别的是,工业相机是做了出厂标定的,所以在相机话题下有类似raw-image和rect-image两种话题,为了更准确,这里直接选择黑白去畸变后的图像。
点击左边下方Add按钮,切换到By topic界面,我们之前是打开了zed-ros的节点的,所有zed相机的所有话题都在其中显示。这里选择zed2i/zed_node/left/image_rect_gray和zed2i/zed_node/right/image_rect_gray里面的Camera,点击OK。
说明一下,双目相机左右目是以前进方向为准,不要搞反了。