This repository is a fork of some simple tools used in the DAEDALUS-project, where a spherical mapping system was implemented in coorporation with the European Space Agency (ESA). See the link for more details about that: https://www.informatik.uni-wuerzburg.de/space/mitarbeiter/nuechter/projects/daedalus/
The tools provided are ROS programs, thus you can extract the contents of the src-folder into your existing catkin-workspace's src-folder.
The important stuff first, right? The launch-folder contains launchfiles to be executed with roslaunch, enabeling you to start up the nodes required for reading and publishing sensor measurements.
- encoder.launch : Launches the Phidgets High Speed Encoder: https://www.phidgets.com/?tier=3&prodid=37
- livox.launch : Launches a LIVOX Mid-100 laserscanner: https://www.livoxtech.com/de/mid-40-and-mid-100/specs
- statictf.launch : Launches a simple static transformation between the map/ and the livox_frame/ coordinate system. Note: this is only usefull if the IMU publishes in map/ frame.
Find the ROS drivers for those sensors here:
- https://github.com/Livox-SDK/livox_ros_driver (Build that one from source)
- http://wiki.ros.org/phidgets_high_speed_encoder (install ros-'distro'-phidgets_high_speed_encoder with your package manager)
This is a node that reads the joint states of a rotation-encoder and publishes the amount of cable that has been rolled over the cable reel, using the Helix-Arc-length formula. Radius of the large and small gears, as well as helix radius and cable diameter can be adjusted in the .cpp file directly.
This is a node that reads a Pointcloud as well as pose measurements from ROS topics, and records them on disk using the .3d and .pose format (3DTK-like, lefthanded-system OpenGL-style). The format is as follows:
- .3d : x y z reflectance
- .pose x y z rotX rotY rotZ
Note that x, y, and z are given in meters, reflectance as [0-255] and rotations in degrees. The topics can be modified directly in the .cpp file.
Does the same as the above, but only writes on disk if the last N_PAST_POSES recorded poses had a small difference of at most EPS_POSE_DIFF, i.e., the vehicle was resting for a significant amount of time. Both parameters can be tunes in the .cpp file and are defaulted to:
- N_PAST_POSES = 50 # used for 200Hz input
- EPS_POSE_DIFF = 0.001 # small number, must be of larger order than system noise!!!
In addition, the pose this time has the type of nav_msgs::Odometry::ConstPtr, yet the callback functions are easily replaceable.
Simple node to give each sensor_msgs::PointCloud2 the current time in its header. This might come in handy when messing around with bagfiles containing LiDAR measurements, and has been used with a LIVOX device.
How to use properly:
- $ roscore
- $ rosparam set use_sim_time true
- $ rosrun livox_update_time livox_update_time
- Start your bagfile.
Node that reads off the ROS topics "position" and "orientation" and publishes "pose". Position must be of type geometry_msgs::Point, orientation must be of type sensor_msgs::Imu, and pose will be of type geometry_msgs::PoseStamped.
Contains simple test cases where certain ROS topics get advertised and dummy data gets published. Usually usefull when checking if your installation works or for debugging.
You need to have ROS installed and a catkin workspace available. Tested with both noetic, kinetic, and melodic and works with Ubuntu 18.04 as well as 20.04. Usually, an installation of ros-'distro'-desktop-full will do the trick. However, if you are having problems with your dependencies, or want to keep a minimal installation, here is a list of packages you have to install:
- ros-'distro'-geometry-msgs
- ros-'distro'-std-msgs
- ros-'distro'-sensor-msgs
- ros-'distro'-tf
- ros-'distro'-tf2
- ros-'distro'-pcl-conversions
- ros-'distro'-pcl-msgs
- ros-'distro'-pcl-ros
- ros-'distro'-nav-msgs
- ros-'distro'-cpp-common