flir相机、livox和xsense驱动安装与测试笔记

文章目录

  • 1.flir相机
    • 1.1.安装官方SDK
      • 1.1.1.安装官方SDK的作用
      • 1.1.2.安装步骤
    • 1.2.编译安装ros驱动
      • 1.2.1.ros驱动的作用
      • 1.2.2.编译ros驱动
    • 1.3.ros驱动测试相机
  • 2.Livox AVIA激光雷达
    • 2.1.安装Livox-SDK
    • 2.2.编译livox_ros_driver驱动
    • 2.3.测试livox并采集ros包
  • 3.xsense(IMU/GPS)
    • 3.1.安装驱动
    • 3.2.测试驱动
  • 4.采集rosbag包

1.flir相机

1.1.安装官方SDK

1.1.1.安装官方SDK的作用

  • SDK是一个官方软件包,其中包括几个上位机,可以直接连接相机读取相机发来的数据。
  • 安装SDK后,有一部分头文件和库文件被安装到系统目录下,这样在编译相机驱动的ros功能包的时候,就能找到这些头文件和库文件。

1.1.2.安装步骤

  • 到官网下载SDK软件包
    https://flir.app.boxcn.net/v/SpinnakerSDK/folder/68522911814

如果下载老版本的SDK,则在archive(归档)文件夹里;而其他的三个文件夹则是最新版本的SDK在不同平台上的SDK。
flir相机、livox和xsense驱动安装与测试笔记_第1张图片

  • 选择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) ——所有用户都有读、写、执行权限。

此时打开系统软件,可以看到三个和这个SDK相关的上位机,其中SpinView就是可以直接查看相机数据的上位机。
flir相机、livox和xsense驱动安装与测试笔记_第2张图片
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头文件的问题,可以先把builddevel文件夹删除,然后重新编译。如果还出错,可以重启之后再尝试。(确保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 modecontineous就是自动曝光,这里设置成Off,然后把下面的expolure time设置成想要的曝光时间,比如2000,然后再调节相机帧率就可以起作用了。

TODO:补充图片

2.Livox AVIA激光雷达

2.1.安装Livox-SDK

注意这个是cmake工程,最后需要installinstall之后就可以把这个工程删除了,因为默认是安装到系统目录下的。

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。
    另外注意修改完成后,把这个有线连接关闭再打开,刷新一下。
    flir相机、livox和xsense驱动安装与测试笔记_第3张图片对于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_rosxsens_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 
# 解决:
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包,主要查看是否有数据中断(丢帧)的现象,比如录制过程中某个节点挂了,或者传感器出了问题收不到数据等。

你可能感兴趣的:(SLAM,slam)