Repository Summary
Checkout URI | https://github.com/heron/heron_simulator.git |
VCS Type | git |
VCS Version | kinetic-devel |
Last Updated | 2022-03-16 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
heron_gazebo | 0.3.3 |
heron_simulator | 0.3.3 |
README
Heron USV Simulation
Installation
Use the instructions for ROS Kinetic and Gazebo 7 at the following link:
https://uuvsimulator.github.io/installation/
Then in the src folder of your catkin workspace, run the commands:
git clone https://github.com/heron/heron_simulator
cd ..
rosdep install --from-paths src --ignore-src --rosdistro=kinetic -yr
Also ensure you have the following packages in your src folder: heron, heron_controller, heron_desktop, and imu_tools. Build your workspace and you’re ready to run the simulation!
Running the Simulation
To simulate the Heron and the world, run the following command:
```roslaunch heron_gazebo heron_world.launch
The simulation can be set to change what world it launches. If the launch file is contained within the launch folder of a package (as it usually is), the following commmand must be run:
```roslaunch heron_gazebo heron_world.launch world_pkg:=[PACKAGE] world_pkg_file:=[WORLD_FILE]
If an absolute file path must be provided:
```roslaunch heron_gazebo heron_world.launch use_pkg_path:=0 world_file:=[FILE PATH]
Optionally, multiple Heron USVs can be simulated at the same time, as long as each robot is under a unique namespace.
To do this, run the following commands in separate terminals:
roslaunch [PACKAGE_CONTAINING_WORLD] [WORLD_LAUNCH_FILE]
roslaunch heron_gazebo heron_sim.launch
roslaunch heron_gazebo heron_sim.launch namespace:=heron1
roslaunch heron_gazebo heron_sim.launch namespace:=heron2
…, etc.
By default, the namespace is empty. Of course, you can name the namespaces anything you want.
Using
```PACKAGE_CONTAINING_WORLD=uuv_descriptions
```, there are pre-made worlds for
```WORLD_FILE
```:
- ocean_waves.launch
- mangalia.launch
- munkholmen.launch
- empty_underwater_world.launch
- herkules_ship_wreck.launch
- lake.launch
**Note: ** "empty_underwater_world" and "herkules_ship_wreck" have very dark oceans, making them difficult to use.
Starting the Heron in any configuration that results in immediate acceleration upon spawn will interfere with the IMU initialization (see Known Issues), so only the x, y, and yaw of the starting location of the Heron can be changed:
```roslaunch heron_gazebo heron_[sim/world].launch x:=[X_METRES] y:=[Y_METRES] yaw:=[YAW_RADIANS]
Control
The Heron is controlled used interactive markers in RViz. One control drives the Heron forward/backward. The other control causes rotation. There are quite a number of transform frames from which to control the Heron.
Most recommended is the Heron’s base frame: [namespace]/base_link. However, the Heron’s world location won’t be shown. If this location must be seen, the frame [namespace]/odom can be used but will have the Heron’s location constantly fluctuating (due to the GPS updates) which can be hard to use.
When simulating multiple Herons, their transform frames are connected via the utm frame. Technically, this frame could be used to visualize the Herons but, due to its globalness, it can be difficult to find the Herons in the visualization.
In any transform frame, all the Herons can be controlled via RViz. You will have to add RobotModel and InteractiveMarker to RViz for each Heron.
Topics
When running the simulation, a custom namespace can be set to prefix all the transform frames and topic names. An empty namespace can be used but, when doing so, the thruster topics used by uuv_simulator will be placed under the heron namespace. This means that an empty namespace and a heron namespace cannot be used at the same time.
The simulated Heron uses the same control topics as the actual Heron. Simulation uses the heron_controller package to control itself. Prefix the topic names below with the simulation’s custom namespace.
- Simply publish on the cmd_course, cmd_wrench, cmd_helm to use it
- To publish directly to the thrusters, publish on cmd_drive
Sensors
The Heron has two primary sensors: GPS and IMU. The simulation uses the corresponding hector_gazebo plugins as well as the magnetometer plugin.
When calibrating the magnetometer (using the calibrate_compass script in heron_bringup package), the environment variable ROBOT_NAMESPACE must be set to the robot’s namespace.
Since the EKF Sensor processing node does not expect the robot to teleport (i.e. have its pose drastically change suddenly), the Heron’s odometry will lag behind if you move the Heron using Gazebo’s move/rotate tools.
Sensor Topics:
**Note: ** The following topics should all be prefaced by “/[namespace]/” where [namespace] is the robot’s namespace.
Name | Msg | Publisher | Desc |
---|---|---|---|
imu/data_raw | Imu | Gazebo | Raw simulated IMU data |
imu/data | Imu | imu_filter_madgwick | Filtered IMU data |
imu/rpy | Vector3Stamped | rpy_translator.py | Raw Simulated Roll/Pitch/Yaw of IMU |
imu/rpy/filtered | Vector3Stamped | imu_filter_madgwick | Filtered Roll/Pitch/Yaw of IMU |
imu/mag_sim | MagneticField | Gazebo | Raw Simulated Magnetometer data |
imu/mag_raw | Vector3Stamped | mag_interpreter.py | Raw Simulated Magnetometer data |
imu/mag | MagneticField | mag_interpreter.py | Calibrated Magnetometer data |
navsat/fix | NavSatFix | Gazebo | Raw Simulated GPS data |
navsat/velocity | Vector3Stamped | Gazebo | Simulated Velocity Data in NWU |
navsat/vel | TwistStamped | navsat_vel_translate.py | Simulated Velocity Data in ENU |
navsat/vel_cov | TwistWithCovarianceStamped | vel_cov.py | ENU Velocity Data with approximate Covariance |
Hydrodynamics
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
Checkout URI | https://github.com/heron/heron_simulator.git |
VCS Type | git |
VCS Version | kinetic-devel |
Last Updated | 2022-03-16 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
heron_gazebo | 0.3.3 |
heron_simulator | 0.3.3 |
README
Heron USV Simulation
Installation
Use the instructions for ROS Kinetic and Gazebo 7 at the following link:
https://uuvsimulator.github.io/installation/
Then in the src folder of your catkin workspace, run the commands:
git clone https://github.com/heron/heron_simulator
cd ..
rosdep install --from-paths src --ignore-src --rosdistro=kinetic -yr
Also ensure you have the following packages in your src folder: heron, heron_controller, heron_desktop, and imu_tools. Build your workspace and you’re ready to run the simulation!
Running the Simulation
To simulate the Heron and the world, run the following command:
```roslaunch heron_gazebo heron_world.launch
The simulation can be set to change what world it launches. If the launch file is contained within the launch folder of a package (as it usually is), the following commmand must be run:
```roslaunch heron_gazebo heron_world.launch world_pkg:=[PACKAGE] world_pkg_file:=[WORLD_FILE]
If an absolute file path must be provided:
```roslaunch heron_gazebo heron_world.launch use_pkg_path:=0 world_file:=[FILE PATH]
Optionally, multiple Heron USVs can be simulated at the same time, as long as each robot is under a unique namespace.
To do this, run the following commands in separate terminals:
roslaunch [PACKAGE_CONTAINING_WORLD] [WORLD_LAUNCH_FILE]
roslaunch heron_gazebo heron_sim.launch
roslaunch heron_gazebo heron_sim.launch namespace:=heron1
roslaunch heron_gazebo heron_sim.launch namespace:=heron2
…, etc.
By default, the namespace is empty. Of course, you can name the namespaces anything you want.
Using
```PACKAGE_CONTAINING_WORLD=uuv_descriptions
```, there are pre-made worlds for
```WORLD_FILE
```:
- ocean_waves.launch
- mangalia.launch
- munkholmen.launch
- empty_underwater_world.launch
- herkules_ship_wreck.launch
- lake.launch
**Note: ** "empty_underwater_world" and "herkules_ship_wreck" have very dark oceans, making them difficult to use.
Starting the Heron in any configuration that results in immediate acceleration upon spawn will interfere with the IMU initialization (see Known Issues), so only the x, y, and yaw of the starting location of the Heron can be changed:
```roslaunch heron_gazebo heron_[sim/world].launch x:=[X_METRES] y:=[Y_METRES] yaw:=[YAW_RADIANS]
Control
The Heron is controlled used interactive markers in RViz. One control drives the Heron forward/backward. The other control causes rotation. There are quite a number of transform frames from which to control the Heron.
Most recommended is the Heron’s base frame: [namespace]/base_link. However, the Heron’s world location won’t be shown. If this location must be seen, the frame [namespace]/odom can be used but will have the Heron’s location constantly fluctuating (due to the GPS updates) which can be hard to use.
When simulating multiple Herons, their transform frames are connected via the utm frame. Technically, this frame could be used to visualize the Herons but, due to its globalness, it can be difficult to find the Herons in the visualization.
In any transform frame, all the Herons can be controlled via RViz. You will have to add RobotModel and InteractiveMarker to RViz for each Heron.
Topics
When running the simulation, a custom namespace can be set to prefix all the transform frames and topic names. An empty namespace can be used but, when doing so, the thruster topics used by uuv_simulator will be placed under the heron namespace. This means that an empty namespace and a heron namespace cannot be used at the same time.
The simulated Heron uses the same control topics as the actual Heron. Simulation uses the heron_controller package to control itself. Prefix the topic names below with the simulation’s custom namespace.
- Simply publish on the cmd_course, cmd_wrench, cmd_helm to use it
- To publish directly to the thrusters, publish on cmd_drive
Sensors
The Heron has two primary sensors: GPS and IMU. The simulation uses the corresponding hector_gazebo plugins as well as the magnetometer plugin.
When calibrating the magnetometer (using the calibrate_compass script in heron_bringup package), the environment variable ROBOT_NAMESPACE must be set to the robot’s namespace.
Since the EKF Sensor processing node does not expect the robot to teleport (i.e. have its pose drastically change suddenly), the Heron’s odometry will lag behind if you move the Heron using Gazebo’s move/rotate tools.
Sensor Topics:
**Note: ** The following topics should all be prefaced by “/[namespace]/” where [namespace] is the robot’s namespace.
Name | Msg | Publisher | Desc |
---|---|---|---|
imu/data_raw | Imu | Gazebo | Raw simulated IMU data |
imu/data | Imu | imu_filter_madgwick | Filtered IMU data |
imu/rpy | Vector3Stamped | rpy_translator.py | Raw Simulated Roll/Pitch/Yaw of IMU |
imu/rpy/filtered | Vector3Stamped | imu_filter_madgwick | Filtered Roll/Pitch/Yaw of IMU |
imu/mag_sim | MagneticField | Gazebo | Raw Simulated Magnetometer data |
imu/mag_raw | Vector3Stamped | mag_interpreter.py | Raw Simulated Magnetometer data |
imu/mag | MagneticField | mag_interpreter.py | Calibrated Magnetometer data |
navsat/fix | NavSatFix | Gazebo | Raw Simulated GPS data |
navsat/velocity | Vector3Stamped | Gazebo | Simulated Velocity Data in NWU |
navsat/vel | TwistStamped | navsat_vel_translate.py | Simulated Velocity Data in ENU |
navsat/vel_cov | TwistWithCovarianceStamped | vel_cov.py | ENU Velocity Data with approximate Covariance |
Hydrodynamics
File truncated at 100 lines see the full file