NOTE: This repository is related with the next scientific work:
Barral, V.; Escudero, C.J.; García-Naya, J.A.; Maneiro-Catoira, R. NLOS Identification and Mitigation Using Low-Cost UWB Devices. Sensors 2019, 19, 3464.https://doi.org/10.3390/s19163464
If you use this code for your scientific activities, a citation is appreciated.
This project contains several ROS nodes:
gazebo2rosSubscribes to Gazebo topics and re-publish them inside ROS.gazeboGuideUsing a joystick, allows the user start and stop the movement of a Gazebo model along a path.gazeboAutoguideMoves automatically a Gazebo model along a path.gazeboRestartServiceRelaunches a Gazebo simulation and start moving a model along a path.
To build the nodes, source code must be cloned inside a catkin work space on a ROS installation (see Creating a workspace for catkin). If the catkin work space is located at ~/catkin_ws then:
$ cd ~/catkin_ws/src
$ mkdir gtec
$ cd gtec
$ git clone gazebo2rosThen catkin_make must be used to build the nodes:
$ cd ~/catkin_ws
$ catkin_makeLibraries libgazebo9-dev ,ros-XXX-mavros-msgs (where XXX is your ROS distro name e.g. "melodic"), and libprotoc must be installed before building this package.
Also, package gtec_msgs must be present in the same workspace. This package can be found here: https://github.com/valentinbarral/rosmsgs
This node subscribes to Gazebo topics and re-publish them inside ROS. Topics published are:
/gtec/gazebo/px4flow: Data from a simulated Px4Flow sensor./gtec/gazebo/erle/imu: Data from an IMU./gtec/gazebo/erle/mag: Data from a magnetometer.
To launch the node, there is a .launch file that can be used:
$ roslaunch gtec_gazebo2ros gtec_gazebo2ros.launchThis node uses a joystick to start the movement of a Gazebo model along a path. The launcher file contains several parameters that must be set to work properly.
<launch>
<node name="joystick" pkg="joy" type="joy_node">
<param name="dev" value="/dev/input/js0">
</param>
</node>
<node name="gazebo_guide" output="screen" pkg="gtec_gazebo2ros" type="gazebo_guide">
<arg default="7" name="start_button">
</arg>
<param name="start_button" value="$(arg start_button)">
</param>
<param name="route_file" textfile="$(find gtec_gazebo2ros)/src/Routes/r01.xml">
</param>
</node>
</launch>dev: address of the device where the joystick is attached.start_button: index of the button used to start the simulation.route_file: path to an.xmlfile with the route definition.
To define a route, a .xml file must be created. The file must follow the next example:
<route>
<set x="14.12" y="12.81" angle="270.0"/>
<moveto x="14.12" y="9.58" time="6.0"/>
<moveto x="14.12" y="4.87" time="5.0"/>
<moveto x="14.12" y="4.20" time="1.0"/>
<stop time="4.0"/>
<moveto x="14.12" y="0" time="7.0"/>
<moveto x="16.8" y="-1.63" time="6.0"/>
<moveto x="18.44" y="0.0" time="4.0"/>
<moveto x="21" y="0.0" time="6.0"/>
<spin angle="180.0" time="6.0"/>
<moveto x="18.44" y="0.0" time="4.0"/>
<moveto x="16.8" y="-1.63" time="6.0"/>
<moveto x="14.12" y="0" time="6.0"/>
<moveto x="14.12" y="4.20" time="6.0"/>
<stop time="2.0"/>
<moveto x="14.12" y="4.87" time="2.0"/>
<moveto x="14.12" y="9.58" time="7.0"/>
<moveto x="14.12" y="12.81" time="5.0"/>
<spin angle="180.0" time="6.0"/>
</route>The available commands are:
set: Sets a position and orientation.moveto: Moves the vehicle from its current position to the position given in the command. The vehicle will be moved at constant velocity to achieve destination after the number of seconds set under the parametertime.stop: Stops the vehicle in its current position for an specified number of seconds.spin: Spins the vehicle the given angle at a constant angular velocity so the vehicle has the final orientation after the number of second specified under the parameter time.
To launch the node, there is a .launch file that can be used:
$ roslaunch gtec_gazebo2ros gazeboGuide.launchThis node starts a movement along a path automatically. The launcher file contains several parameters that must be set to work properly.
<launch>
<node name="gazebo_auto_guide" output="screen" pkg="gtec_gazebo2ros" type="gazebo_auto_guide">
<arg default="4.0" name="start_time">
</arg>
<param name="start_time" value="$(arg start_time)">
</param>
<param name="route_file" textfile="$(find gtec_gazebo2ros)/src/Routes/r01.xml">
</param>
<param name="max_reps" value="50"/>
<param name="record_log" value="1"/>
<param name="restart_on_finish" value="1"/>
</node>
</launch>start_time: movement will start after this amount of seconds.route_file: path to an.xmlfile with the route definition.max_reps: number of repetitions.record_log: launches a instance ofrosbag recordto record a ROS bag with the data coming from the sensors.restart_on_finish: restart the simulation when the vehicle reaches the end of the path.
To launch the node, there is a .launch file that can be used:
$ roslaunch gtec_gazebo2ros gazeboAutoGuide.launchThis node restarts a Gazebo simulation generating a random set of magnetic interferences each time. The launcher file contains several parameters that must be set to work properly.
<launch>
<node name="gazebo_restart_service" output="screen" pkg="gtec_gazebo2ros" type="gazebo_restart_service">
<param name="min_random_x" value="0.0" />
<param name="max_random_x" value="10.0" />
<param name="min_random_y" value="0.0" />
<param name="max_random_y" value="10.0" />
<param name="min_random_z" value="0.0" />
<param name="max_random_z" value="10.0" />
</node>
</launch>min_random_x: min X value of a magnetic interference.max_random_x: max X value of a magnetic interference.min_random_y: min Y value of a magnetic interference.max_random_y: max Y value of a magnetic interference.min_random_z: min Z value of a magnetic interference.max_random_z: max Z value of a magnetic interference.
To launch the node, there is a .launch file that can be used:
$ roslaunch gtec_gazebo2ros gazeboRestartService.launch