flir相机、livox和xsense驱动安装与测试笔记
1.FLIR相机1.1.安装驱动1.2.测试相机先启动驱动节点roslaunch spinnaker_camera_driver camera.launch打开rqt查看图像rqt_image_view重新配置相机参数rosrun rqt_reconfigure rqt_reconfigure2.Livox AVIA激光雷达2.1.安装驱动这个驱动应该是直接编译好了,无需安装2.2.采集ros包运
文章目录
1.flir相机
1.1.安装官方SDK
1.1.1.安装官方SDK的作用
- SDK是一个官方软件包,其中包括几个上位机,可以直接连接相机读取相机发来的数据。
- 安装SDK后,有一部分头文件和库文件被安装到系统目录下,这样在编译相机驱动的ros功能包的时候,就能找到这些头文件和库文件。
1.1.2.安装步骤
如果下载老版本的SDK,则在archive(归档)文件夹里;而其他的三个文件夹则是最新版本的SDK在不同平台上的SDK。
-
选择SDK适配的平台
如果事先知道自己所用的平台(arm64, amd64等),则可以直接下载对应的版本。如果不知道或者下载了平台不匹配的版本,那么在安装SDK的时候会有报错提示系统不匹配,这时候也会提示你当前使用的电脑是什么平台,这时候再去安装对应平台的SDK即可。
一般的电脑都是amd64,如何查看系统架构可以参考 查看Linux系统架构类型的5条常用命令。 -
安装
比如这里下载的是archive下的spinnaker-1.26.0.31-Ubuntu18.04-amd64-pkg.tar.gz
文件,首先解压,然后运行sudo sh install_spinnaker.sh
进行安装,过程中遇到的所有问题都选择yes
即可。 -
不确定的步骤:安装完成后最好重启一下电脑,可以先不重启测试一下后边编译ros驱动是否成功。应该不重启也可以
-
测试SDK上位机
- 首先改变usb缓存大小为1000M
原因参考:Understanding USBFS on Linux。原因就是Linux默认给所有的USB设备设置的缓存大小都是16M,对于高分辨率相机或者多相机来说这个显然不够,所以这里官方推荐设置缓存为1000M。
sudo sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'
- 可以再确认一下,终端输出1000,就OK了。
cat /sys/module/usbcore/parameters/usbfs_memory_mb
- 插入摄像头(注意camera带宽很大,因此必须使用电脑 USB3.0接口),查看摄像头挂载在哪里
#查看usb设备 lsusb #假设摄像头输出为: Bus 002 Device 005: xxxxxx
- 给摄像头 所有用户读写(666) 权限(注意每次插拔都要重新给权限)
sudo chmod 666 /dev/bus/usb/002/005
注意权限的数字表示含义:
-rw-rw-rw- (666)
——所有用户都有文件读、写权限。
-rwxrwxrwx (777)
——所有用户都有读、写、执行权限。 - 首先改变usb缓存大小为1000M
此时打开系统软件,可以看到三个和这个SDK相关的上位机,其中SpinView就是可以直接查看相机数据的上位机。
TODO:补充图片
1.2.编译安装ros驱动
1.2.1.ros驱动的作用
最后想使用相机进行slam,则需要驱动程序接受并解析相机的数据。一遍slam都配合ros使用,此时运行相机的ros驱动程序就可以直接把相机数据用ros数据格式发送出来,给slam使用。
1.2.2.编译ros驱动
- 下载驱动程序到
camera_driver/src
下 - catkin_make
这个过程中可能会报错找不到某某cmake文件,此时是因为缺少某个ros功能包,对应的安装即可,如下所示:
# 报错:
Could not find a package configuration file provided by
"camera_info_manager" with any of the following names:
camera_info_managerConfig.cmake
camera_info_manager-config.cmake
# 解决:
# 注意加ros-melodic前缀,另外ros中功能包名中间都是 - 而不是 _
sudo apt install ros-melodic-camera-info-manager
为了简化安装过程,这里统计需要安装的ros功能包如下,可以先安装这些功能包,然后再catkin_make。
sudo apt install ros-melodic-camera-info-manager ros-melodic-image-exposure-msgs ros-melodic-wfov-camera-msgs
- 如果安装过程中出现找不到
Spinnker.h
头文件的问题,可以先把build
、devel
文件夹删除,然后重新编译。如果还出错,可以重启之后再尝试。(确保SDK已经安装成功的前提下)
1.3.ros驱动测试相机
- 首先改变usb缓存大小为1000M
原因参考:Understanding USBFS on Linux。原因就是Linux默认给所有的USB设备设置的缓存大小都是16M,对于高分辨率相机或者多相机来说这个显然不够,所以这里官方推荐设置缓存为1000M。
sudo sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'
可以再确认一下,终端输出1000,就OK了。
cat /sys/module/usbcore/parameters/usbfs_memory_mb
- 插入摄像头(注意camera带宽很大,因此必须使用电脑 USB3.0接口),查看摄像头挂载在哪里
# 查看usb设备
lsusb
# 假设摄像头输出为
Bus 002 Device 005: xxxxxx
- 给摄像头 所有用户读写(666) 权限(注意每次插拔都要重新给权限)
sudo chmod 666 /dev/bus/usb/002/005
注意权限的数字表示含义:
-rw-rw-rw- (666)
—— 所有用户都有文件读、写权限。
-rwxrwxrwx (777)
—— 所有用户都有读、写、执行权限。
- 先启动驱动节点
roslaunch spinnaker_camera_driver camera.launch
- 打开rqt查看图像
rqt_image_view
- 重新配置相机参数(曝光、帧率等)
rosrun rqt_reconfigure rqt_reconfigure
如下图所示,设置了相机帧率如果不起作用的话,问题在于下面的曝光是自动曝光,而没有固定曝光时间。expolure mode
是contineous
就是自动曝光,这里设置成Off
,然后把下面的expolure time
设置成想要的曝光时间,比如2000
,然后再调节相机帧率就可以起作用了。
TODO:补充图片
2.Livox AVIA激光雷达
2.1.安装Livox-SDK
注意这个是cmake
工程,最后需要install
,install
之后就可以把这个工程删除了,因为默认是安装到系统目录下的。
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install
2.2.编译livox_ros_driver驱动
cd livox_ros_driver/src
git clone https://github.com/Livox-SDK/livox_ros_driver.git
catkin_make
- 注意:如果是编译
r2live
等使用livox_ros_driver
的工程,则需要在编译这个工程之前先刷新一下livox_ros_driver
的环境变量。即source DRIVER_PATH/livox_ros_driver/devel/setup.sh
,否则在编译让r2live这种工程的时候会报错找不到livox_ros_driver.cmake
。
2.3.测试livox并采集ros包
- 用网线连接livox的数据扩展坞,然后可以在ubuntu网络设置上看到有线连接。注意由于livox的输出在2网段,所以必须手动修改这个有线连接的IP地址也在2网段,这样才能收到数据。也就是livox和电脑通过网线连接组成一个局域网,livox的IP地址的网段是固定的2(IP是否固定?),所以也要修改自己的电脑在这个局域网中的IP地址网段也是2。
另外注意修改完成后,把这个有线连接关闭再打开,刷新一下。
对于ps:查看IP的问题,可以使用wireshark
工具查看所有的数据包,安装:sudo apt install wireshark
,使用:WireShark使用教程。 - 运行ros节点查看rviz可视化结果:注意有多个
launch
文件,如果是单纯使用rviz查看livox扫描的实时效果,那么可以运行livox_lidar_rivz.launch
文件。
roslaunch livox_ros_driver livox_lidar_rivz.launch
注意:如果此时rviz看不到点云,未必是没有收到数据,可能是前方障碍物离livox太近扫描不出来,此时可以把livox对着空旷点的地方测试一下。并且看是否受到数据最正确的方法应该是使用rostopic echo /livox/lidar
,此时会发现如果是上面那种看不到点云的情况,但是却有数据,并且采集到的点云数据基本都是0。
- 采集ros包:
livox_lidar_msg.launch
是自定义的点云消息格式,r2live用的就是这种数据格式,所以如果采集ros包就需要运行这个launch
文件。录包的时候直接使用rosbag
命令,注意驱动里面的topic主题。
rolaunch livox_ros_driver livox_lidar_msg.launch
rosbag record /livox/lidar /livox/imu
注意:如果要使用rqt查看这个自定义的点云数据的话,在打开rqt之前,要先source ./devel/setup.zsh
刷新一下环境变量,这样rqt才能识别出自定义的这个消息类型。
3.xsense(IMU/GPS)
3.1.安装驱动
- 首先把两个ros驱动源码
ntrip_ros
和xsens_ros_mti_driver
放到src
目录下 - catkin_make编译,同理这里也会出现很多包丢失的问题,这时直接安装缺失的ros包即可。
# 错误1:
Could not find a package configuration file provided by "nmea_msgs" with
any of the following names:
nmea_msgsConfig.cmake
# 解决:
sudo apt install ros-melodic-nmea-msgs
# 错误2:
fatal error: mavros_msgs/RTCM.h: 没有那个文件或目录
#include <mavros_msgs/RTCM.h>
# 解决:
sudo apt install ros-melodic-mavros-msgs
3.2.测试驱动
- 首先注意xsense的GPS是接到IMU上的,然后从IMU引出数据输出线。
- 这里IMU使用的是USB转串口的接口,插入USB口后,先查看USB串口挂在到哪里
# 1.拔出串口USB
ls /dev/ttyUSB*
# 2.再插上
ls /dev/ttyUSB*
# 3.看新增了哪个串口
- 对于MTI-680无法识别串口问题的解决方法,执行下面的命令后重复上面的步骤,查看串口(这步很重要,如果后面开驱动的时候报错
Could not open port
,基本就是因为没有执行下面两句)
sudo /sbin/modprobe ftdi_sio
echo 2639 0301 | sudo tee /sys/bus/usb-serial/drivers/ftdi_sio/new_id
- 给IMU usb权限(注意每次插拔都要重新给权限)
sudo chmod 777 /dev/ttyUSBx # x是具体的ttyUSB号
- 开启IMU驱动,查看gnss输出,有输出后再开rtk驱动
roslaunch xsens_mti_driver xsens_mti_node.launch
- 开启差分 rtk 驱动,下面参数表示设置位置初始值,用于查询附近基站。
use_gnss
为 true的情况下,在等待 IMU发布gnss topic。
roslaunch ntrip_ros xsens_ntrip_client.launch //wifi by using
<param name="use_gnss" value="true" />
<param name="latitude" value="35.42022519" />
<param name="longitude" value="119.50717994" />
注意:打开这个节点之后得到的才是真正的RTK数据,它是利用下面说的cors账号向基站发送请求得到RTK数据,所以必须联网。
ps:关于gnss/cors/ntrip/rctm
gnss数据
cors账号
NTRIP协议
RTCM差分电文
4.采集rosbag包
- 首先开启上面的所有驱动,保证驱动全部正常打开
- 先
source ./devel/setup.zsh
(为了识别livox自定义的点云消息),然后打开rqt查看各个话题的消息是否正常,比如是否有数据,数据频率是否正常 rosbag record topic1 topic2 ...
开始录制,此时录制的ros包会以录制时间命名,然后保存到rosbag
这个命令执行的时候所在的文件夹下rqt_bag bag_name.bag
查看录制的ros包,主要查看是否有数据中断(丢帧)的现象,比如录制过程中某个节点挂了,或者传感器出了问题收不到数据等。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)