天天看点

SBG Ellipse系列传感器Ubuntu下进行ROS节点配置1. 概述2. SBG Driver3. SBG ROS Driver4. SBG Topic5. 问题及解决6. 参考链接7. 延伸阅读

SBG ROS 节点配置

  • 1. 概述
  • 2. SBG Driver
  • 3. SBG ROS Driver
  • 4. SBG Topic
    • 4.1 SBG自定义消息
    • 4.2 ROS标准消息
  • 5. 问题及解决
    • 5.1 找不到设备
      • 5.1.1 错误信息
      • 5.1.2 解决办法
    • 5.2 接收超时
      • 5.2.1 错误信息
      • 5.2.2 解决办法
    • 5.3 总结
  • 6. 参考链接
  • 7. 延伸阅读
    • 传感器配置
    • 节点程序分析
    • 经典SLAM

1. 概述

主要介绍Ubuntu下SBG公司Ellipse N系列传感器驱动安装以及ROS下的节点配置。

2. SBG Driver

使用bash命令可以直接安装SBG公司驱动,如下,melodic注意换成自己Ubuntu的版本代号,我的是kinetic。

$ sudo apt-get install ros-melodic-sbg-driver
           

3. SBG ROS Driver

1

现在还需要安装ROS下使用的SBG Driver,在catkin工作空间的src文件夹使用命令

$ git clone https://github.com/SBG-Systems/sbg_ros_driver
           

然后重新在catkin工作空间文件夹使用catkin_make命令,无报错信息。

$ catkin_make
           

2

现在可以启动SBG节点了,但是注意启动顺序

新窗口a下

$ roscore
           

另一个窗口b下,首先cd到自己的catkin工作空间,然后使用

$ source ./devel/setup.bash
           

同时在窗口b下使用roslaunch命令可以看到已经预先设定好的launch文件,可以用于不同的型号、磁场矫正,具体信息可以自己手动查看。

SBG Ellipse系列传感器Ubuntu下进行ROS节点配置1. 概述2. SBG Driver3. SBG ROS Driver4. SBG Topic5. 问题及解决6. 参考链接7. 延伸阅读

4. SBG Topic

SBG节点发布的消息有两种定义方式一种是SBG公司自己定义的,一种是ROS下标准的消息类型。

4.1 SBG自定义消息

/sbg/air_data SbgAirData

/sbg/ekf_euler SbgEkfEuler

/sbg/ekf_nav SbgEkfNav

/sbg/ekf_quat SbgEkfQuat

/sbg/ekf_event{A,B,C,D,E} SbgEvent

/sbg/gps_hdt SbgGpsHdt

/sbg/gps_pos SbgGpsPos

/sbg/gps_raw SbgGpsRaw

/sbg/gps_vel SbgGpsVel

/sbg/imu_data SbgImuData

/sbg/imu_short SbgImuShort

/sbg/mag SbgMag

/sbg/mag_calib SbgMagCalib

/sbg/odo_vel SbgOdoVel

/sbg/ship_motion SbgShipMotion

/sbg/utc_time SbgUtcTime
           

4.2 ROS标准消息

具体可以看到,ROS下的消息和SBG自定义消息的联系,例如

/imu/data = /sbg/imu_data + /sbg/ekf_quat
           

全部信息如下

/imu/data, IMU dara, requires /sbg/imu_data and /sbg/ekf_quat

/imu/temp, IMU temperature, requires /sbg/imu_data

/imu/velocity, IMU velocity data, requires /sbg/imu_data

/imu/mag, IMU magnetic field, requires /sbg/mag

/imu/pres, IMU pressure data, requires /sbg/air_data

/imu/pos_ecef, Earth-Centered Earth_Fixed position, requires /sbg/ekf_nav

/imu/utc_ref, UTC time reference, requires /sbg/utc_time

/imu/nav_sat_fix, Navigation satellite, requires /sbg/gps_pos
           

5. 问题及解决

5.1 找不到设备

5.1.1 错误信息

SBG节点如果找不到传感器设备,会提示

Unable to initialize the interface

,未能初始化接口设备。

[ INFO] [1594611759.659713077]: SBG DRIVER - Init node, load params and connect to the device.
sbgInterfaceSerialCreate: tcgetattr fails.
[ERROR] [1594611759.696153539]: SBG_DRIVER - SBG_DRIVER - [Init] Unable to initialize the interface - SBG_ERROR
           

5.1.2 解决办法

SBG节点默认查找设备为

/dev/sb

,在对应参数文件中有定义,我使用的命令是

roslaunch sbg_driver sbg_device.launch 
           

所对应的参数文件为

/config/sbg_device_uart_default.yaml

,设备为

# Port Name
  portName: "/dev/sbg"
           

但我的设备实际为

/dev/ttyUSB0

,因此可以直接修改为

# Port Name
  portName: "/dev/ttyUSB0"
           

也可以给根据设备ID号绑定一个新的昵称,具体可参考。

5.2 接收超时

5.2.1 错误信息

SBG查找到接口设备之后会默认使用收发数据来获取设备的信息,如果未收到信息,会显示错误

SBG_TIME_OUT

源代码

void SbgDevice::readDeviceInfo(void)
{
  SbgEComDeviceInfo device_info;
  SbgErrorCode      error_code; 
  
  error_code = sbgEComCmdGetInfo(&m_com_handle_, &device_info);

  if (error_code != SBG_NO_ERROR)
  {
    ROS_ERROR("Unable to get the device Info : %s", sbgErrorCodeToString(error_code));
  }

  ROS_INFO("SBG_DRIVER - productCode = %s", device_info.productCode);
  ROS_INFO("SBG_DRIVER - serialNumber = %u", device_info.serialNumber);

  ROS_INFO("SBG_DRIVER - calibationRev = %s", getVersionAsString(device_info.calibationRev).c_str());
  ROS_INFO("SBG_DRIVER - calibrationDate = %u / %u / %u", device_info.calibrationDay, device_info.calibrationMonth, device_info.calibrationYear);

  ROS_INFO("SBG_DRIVER - hardwareRev = %s", getVersionAsString(device_info.hardwareRev).c_str());
  ROS_INFO("SBG_DRIVER - firmwareRev = %s", getVersionAsString(device_info.firmwareRev).c_str()); 
}
           

如果未收到设备信息会显示错误

Unable to get the device Info : SBG_TIME_OUT

,也可以看到设备的所有信息都是

不规则

的,没有含义,例如

calibrationDate = 169 / 160 / 58842

,这

不是一个正常的日期

[ERROR] [1594615707.526290314]: Unable to get the device Info : SBG_TIME_OUT
[ INFO] [1594615707.526437913]: SBG_DRIVER - productCode = ???=?
[ INFO] [1594615707.526485254]: SBG_DRIVER - serialNumber = 1040110480
[ INFO] [1594615707.526527230]: SBG_DRIVER - calibationRev = 0.0.127.253
[ INFO] [1594615707.526557748]: SBG_DRIVER - calibrationDate = 169 / 160 / 58842
[ INFO] [1594615707.526602807]: SBG_DRIVER - hardwareRev = 0.0.85.136
[ INFO] [1594615707.526642624]: SBG_DRIVER - firmwareRev = 61.254.229.184
           

5.2.2 解决办法

在对应参数文件中

修改波特率

,我使用的命令是

roslaunch sbg_driver sbg_device.launch 
           

所对应的参数文件为

/config/sbg_device_uart_default.yaml

,打开修改波特率,

默认是115200

,如果不对,可以使用试试其他的波特率,我的正确波特率为

921600

修改参数文件不需要重新catkin_make

,直接

重新启动节点

就可以了。

# Baude rate (4800 ,9600 ,19200 ,38400 ,115200 [default],230400 ,460800 ,921600)
  baudRate: 115200
           

正确的设备信息应该为下面所示,和之前的明显不一样,例如日期

calibrationDate = 0 / 0 / 2000

[ INFO] [1594616055.673520805]: SBG_DRIVER - productCode = ELLIPSE2-N-G4A3-B1
[ INFO] [1594616055.673552042]: SBG_DRIVER - serialNumber = 45004137
[ INFO] [1594616055.673572702]: SBG_DRIVER - calibationRev = 1.1.0.0
[ INFO] [1594616055.673582870]: SBG_DRIVER - calibrationDate = 0 / 0 / 2000
[ INFO] [1594616055.673592075]: SBG_DRIVER - hardwareRev = 1.1.0.0
[ INFO] [1594616055.673599876]: SBG_DRIVER - firmwareRev = 1.5.240-stable
[ INFO] [1594616055.673609132]: SBG DRIVER - Initialize device for receiving data
           

5.3 总结

设备目录

波特率

要设置正确。

6. 参考链接

1.SBG_Driver

7. 延伸阅读

传感器配置

设备绑定串口名称 Ubuntu

Xsens MTi传感器 ROS下配置

SBG Ellipse系列传感器Ubuntu下进行ROS节点配置

Nooploop UWB LinkTrack ROS下配置

MTI Ellipse VLP16 LinkTrack Topic msg整理

节点程序分析

Xsens ROS 节点 时间戳以及话题

Velodyne ROS 节点 时间戳以及话题

SBG ROS 节点 时间戳 话题

NoopLoop ROS 节点 时间戳以及话题

经典SLAM

GMapping安装与配置

Hector SLAM 安装与配置

Gmapping 原理之目标分布与提议分布

LOAM SLAM安装与配置

继续阅读