A ROS package for the Water Linked DVL A50. Along with a subscribing client for easy visualization of the communication through ROS.
Water Linked A50 is, by far, the world's smallest commercially available Doppler Velocity Log. With the record-breaking 5 cm min altitude measurability, the A50 is extremely useful for working with tools close to the seabed.
This driver has been modified to work with the Bluerov2 and the firmware version of the DVL a50 > 2.08. The updated version of the DVL allows to access the IMU data and dead reckoning estimation inside the DVL. Here I am creating an extra publisher to access the IMU data but I am disregarding the dead reckoning estimation.
The package has been tested with ROS Kinetic, and should work with most distros of ROS. Although using it with distros older than Hydro may require some tweeking. The package is coded in Python for easier readability, as such you would need to have Python installed. Preferably Python 2.7 as some distros of ROS doesn't support Python 3.
Assuming you created your catkin workspace at the default location. And have git installed. The below steps should work:
cd ~/catkin_ws/src
git clone-b master https://github.com/waterlinked/dvl-a50-ros-driver.git
cd ~/catkin_ws
catkin_make
Find the DVLs IP address. Once that's done, the package and it's components can be run by following these steps:
To run the publisher that listens to the TCP port and sends the data to ROS
rosrun waterlinked_a50_ros_driver publisher.py _ip:=TCP_IP
where TCP_IP should be replaced by the IP of the DVL. You can also display the raw DVL data in the terminal by specifying the argument "do_log_data":
To run the publisher that listens to the TCP port, displays the raw data in the DVL and sends the data to ROS
rosrun waterlinked_a50_ros_driver publisher.py _ip:=TCP_IP _do_log_data:=true
To run a subscriber node that listens to the DVL topic. Helpful for debugging or checking if everything is running as it should be. Choose between "subscriber_gui.py" and "subscriber.py". The GUI makes reading data visually much easier. While the non-GUI version makes it easier to read through the code to see how you can implement code yourself.
rosrun waterlinked_a50_ros_driver subscriber_gui.py
The node publishes data to the topics: "dvl/json_data", "dvl/data", "/BlueRov2/DVL" and "/BlueRov2/DVL/imu".
- dvl/json_data: uses a simple String formated topic that publishes the raw json data coming from the DVL.
- dvl/data: Uses a custom message type that structures the parsed data following our protocol. Read more about the protocol here: DVL Protocol
- "/BlueRov2/DVL": Publishes the DVL data in an odometry message from the nav_msgs.
- "/BlueRov2/DVL/imu" Publishes the imu data in an Imu message from the sensor_msgs.
The graph illustrates the topics and nodes created when the package is run.
###TODO: When no messages in last ~0.2seconds/crashed, send zero message at ~5hz.