如果下载老版本的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上位机
sudo sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'
cat /sys/module/usbcore/parameters/usbfs_memory_mb
#查看usb设备
lsusb
#假设摄像头输出为:
Bus 002 Device 005: xxxxxx
sudo chmod 666 /dev/bus/usb/002/005
注意权限的数字表示含义:
-rw-rw-rw- (666)
——所有用户都有文件读、写权限。
-rwxrwxrwx (777)
——所有用户都有读、写、执行权限。
此时打开系统软件,可以看到三个和这个SDK相关的上位机,其中SpinView就是可以直接查看相机数据的上位机。
TODO:补充图片
最后想使用相机进行slam,则需要驱动程序接受并解析相机的数据。一遍slam都配合ros使用,此时运行相机的ros驱动程序就可以直接把相机数据用ros数据格式发送出来,给slam使用。
camera_driver/src
下# 报错:
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已经安装成功的前提下)原因参考: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
# 查看usb设备
lsusb
# 假设摄像头输出为
Bus 002 Device 005: xxxxxx
sudo chmod 666 /dev/bus/usb/002/005
注意权限的数字表示含义:
-rw-rw-rw- (666)
—— 所有用户都有文件读、写权限。
-rwxrwxrwx (777)
—— 所有用户都有读、写、执行权限。
roslaunch spinnaker_camera_driver camera.launch
rqt_image_view
rosrun rqt_reconfigure rqt_reconfigure
如下图所示,设置了相机帧率如果不起作用的话,问题在于下面的曝光是自动曝光,而没有固定曝光时间。expolure mode
是contineous
就是自动曝光,这里设置成Off
,然后把下面的expolure time
设置成想要的曝光时间,比如2000
,然后再调节相机帧率就可以起作用了。
TODO:补充图片
注意这个是cmake
工程,最后需要install
,install
之后就可以把这个工程删除了,因为默认是安装到系统目录下的。
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install
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
。wireshark
工具查看所有的数据包,安装:sudo apt install wireshark
,使用:WireShark使用教程。launch
文件,如果是单纯使用rviz查看livox扫描的实时效果,那么可以运行livox_lidar_rivz.launch
文件。roslaunch livox_ros_driver livox_lidar_rivz.launch
注意:如果此时rviz看不到点云,未必是没有收到数据,可能是前方障碍物离livox太近扫描不出来,此时可以把livox对着空旷点的地方测试一下。并且看是否受到数据最正确的方法应该是使用rostopic echo /livox/lidar
,此时会发现如果是上面那种看不到点云的情况,但是却有数据,并且采集到的点云数据基本都是0。
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才能识别出自定义的这个消息类型。
ntrip_ros
和xsens_ros_mti_driver
放到src
目录下# 错误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
# 1.拔出串口USB
ls /dev/ttyUSB*
# 2.再插上
ls /dev/ttyUSB*
# 3.看新增了哪个串口
Could not open port
,基本就是因为没有执行下面两句)sudo /sbin/modprobe ftdi_sio
echo 2639 0301 | sudo tee /sys/bus/usb-serial/drivers/ftdi_sio/new_id
sudo chmod 777 /dev/ttyUSBx # x是具体的ttyUSB号
roslaunch xsens_mti_driver xsens_mti_node.launch
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差分电文
source ./devel/setup.zsh
(为了识别livox自定义的点云消息),然后打开rqt查看各个话题的消息是否正常,比如是否有数据,数据频率是否正常rosbag record topic1 topic2 ...
开始录制,此时录制的ros包会以录制时间命名,然后保存到rosbag
这个命令执行的时候所在的文件夹下rqt_bag bag_name.bag
查看录制的ros包,主要查看是否有数据中断(丢帧)的现象,比如录制过程中某个节点挂了,或者传感器出了问题收不到数据等。