Package Summary
ROS1 package for Epson IMU using UART interface based on C++ wrapper of Linux C driver
- Maintainer status: maintained
- Maintainer: Raymond Chow <raymond.chow AT ea.epson DOT com>
- Author:
- License: BSD, Public Domain
- Source: git https://github.com/cubicleguy/ess_imu_ros1_uart_driver.git (branch: main)
Package Summary
ROS1 package for Epson IMU using UART interface based on C++ wrapper of Linux C driver
- Maintainer status: maintained
- Maintainer: Raymond Chow <raymond.chow AT ea.epson DOT com>
- Author:
- License: BSD, Public Domain
- Source: git https://github.com/cubicleguy/ess_imu_ros1_uart_driver.git (branch: main)
Epson IMU ROS1 Node UART ** Deprecated **
*** NOTE: This package has been superceded by Epson IMU ROS1 Driver Node***
*** This webpage will no longer be updated ***
Overview
The Epson IMU ROS software is C++ wrapper around a Linux C driver for communicating on a ROS system
- This code assumes that the user is familiar with building ROS1 packages using the catkin build process
- This is *NOT* detailed step by step instructions describing how to build and install this ROS driver
Refer to the README.md inside the ROS package for more detailed up-to-date technical info on usage or Github repository
UART Connection & Configuration
- When connecting the Epson device to a ROS system using the UART interface:
- direct connection to UART port must be compatible with CMOS 3.3V I/O
connection is also possible through a USB-UART 3.3V converter IC such as on the M-G32EV041 evaluation board
- GPIO output for asserting RESET# pin on the IMU is optional, but recommended if possible (i.e. embedded platforms)
- Below is an example IMU UART connection when using a Raspberry Pi:
Epson IMU
Raspberry Pi
EPSON_SIN Input
RPI_GPIO_P1_8 (GPIO14/UART_TXD) Output
EPSON_SOUT Output
RPI_GPIO_P1_10 (GPIO15/UART_RXD) Input
EPSON_RESET Input
RPI_GPIO_P1_15 (GPIO22) Output *Optional
- When connecting the Epson G552PR1/G552PR7 to a ROS system using a RS422 UART interface:
- direct connection to RS422 UART port must be compatible with RS422 I/O signal levels
- Below is an example IMU RS422 connection to a RS422 Host:
Epson IMU
RS422 Host
EPSON_TD+ Output
HOST_RD+ Input
EPSON_TD- Output
HOST_RD- Input
EPSON_RD+ Input
HOST_TD+ Output
EPSON_RD- Input
HOST_TD- Output
ROS1 Node
This ROS driver publishes IMU messages as per REP 145 Conventions for IMU Sensor Drivers
sensor_msgs/Imu - contains header, orientation, angular velocity and linear acceleration
Published Topics
For IMU models that support quaternion output function the orientation field in sensor_msgs/Imu can update with valid data and publish on imu/data
For IMU models that do not support quaternion output function the orientation field in sensor_msgs/Imu will not update with valid data and publish on imu/data_raw
Launch File
The roslaunch/XML in the launch folder of this package is used to pass the init parameters to configure the IMU at runtime using roslaunch
Changes to init parameters is made by editing the launch file which does not require rebuilding with catkin_make
Typically, the user only needs to modify imu_dout_rate & imu_filter_sel as needed based on system requirements
Only use the specific IMU model launch file associated with the same IMU model built using catkin_make
Timestamping With EXT Signal
- The G3xx series Epson IMU has 3.3V I/O EXT (GPIO2) pin which can be connected to a cyclic external sync signal such as a GNSS 1PPS signal
When the init parameter time_correction is enabled in unison with ext_sel set to reset counter & count_out enabled
The ROS driver attempts to correct the time stamp field in sensor_msgs/Imu based on the reset counter value (measured delay since latest GNSS 1PPS)
- This should give a more accurate timestamp of the inertial data by minimizing the effects of link delays or host processing overhead delays
Building & Installing ROS1 Node
1. Place this package (including folders) into a new folder within your catkin workspace "src" folder.
2. Modify the CMakeLists.txt to select the desired Epson IMU model that is being used in the ROS system.
NOTE: You *MUST* re-build using catkin_make when changing IMU models or any changes in the CMakeLists.txt
3. From the catkin workspace folder run catkin_make to build all changed ROS1 packages located in the <catkin_workspace>/src/ folder. 4. Reload the current ROS1 environment variables that may have changed after the catkin build process.
<catkin_workspace>/source devel/setup.bash
5. Modify the appropriate roslaunch/XML to set your desired IMU init parameters for the specific IMU model in the launch folder that you selected and built
Typically, only the dout_rate & filter_sel needs to be edited
Running the ROS1 Node
To start the Epson IMU ROS1 driver use the appropriate launch file (located in launch/) with roslaunch
- For example:
<catkin_workspace>/roslaunch ess_imu_ros1_uart_driver epson_g370.launch
USB-UART Latency
When using USB-UART bridge ICs to connect between the Linux host & Epson IMU, it is possible to experience higher than expected latencies or slower than expected IMU data rates
- This could be caused by the USB-UART bridge device driver software which sets the default latency_timer too large (i.e. typically 16msec)
There are 2 recommended methods to reduce this value to 1msec to improve the latency & IMU publishing data rate
Modify latency_timer by sysfs mechanism
- The example below reads the latency_timer setting for /dev/ttyUSB0 which returns 16msec
- Then, the latency_timer is set to 1msec, and confirmed by readback.
NOTE: May require root (sudo su) access on your system to modify.
cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer 16 echo 1 > /sys/bus/usb-serial/devices/ttyUSB0/latency_timer cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer 1
Modify low_latency flag using setserial utility
- The example below sets the low_latency flag for /dev/ttyUSB0.
- This will have the same effect as setting the latency_timer to 1msec.
- This can be confirmed by running the setserial command again.
NOTE: You may need to install setserial with sudo apt install setserial
user@user-VirtualBox:~$ setserial /dev/ttyUSB0 /dev/ttyUSB0, UART: unknown, Port: 0x0000, IRQ: 0 user@user-VirtualBox:~$ setserial /dev/ttyUSB0 low_latency user@user-VirtualBox:~$ setserial /dev/ttyUSB0 /dev/ttyUSB0, UART: unknown, Port: 0x0000, IRQ: 0, Flags: low_latency
Technical Support
For technical support or related issues using this ROS software with a supported Epson product, please email sensingsystem_support@ea.epson.com