Closed tsaoyu closed 1 year ago
This looks like a problem with Gazebo finding the plugins. Could you first check the ocean world loads correctly with:
roslaunch asv_wave_sim_gazebo ocean_world.launch verbose:=true
and then try:
roslaunch rs750_gazebo rs750_ocean_world.launch verbose:=true
again and post the full console output from both sessions.
Terminal output of ocean_world
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://laoge:37469/
SUMMARY
========
PARAMETERS
* /gazebo/enable_ros_network: True
* /rosdistro: melodic
* /rosversion: 1.14.6
* /use_sim_time: True
NODES
/
gazebo (gazebo_ros/gzserver)
gazebo_gui (gazebo_ros/gzclient)
auto-starting new master
process[master]: started with pid [3683]
ROS_MASTER_URI=http://localhost:11311
setting /run_id to 73f0149a-b6fe-11ea-a5aa-dcfb48f968f2
process[rosout-1]: started with pid [3694]
started core service [/rosout]
process[gazebo-2]: started with pid [3699]
process[gazebo_gui-3]: started with pid [3704]
Gazebo multi-robot simulator, version 9.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
Gazebo multi-robot simulator, version 9.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
[Wrn] [GuiIface.cc:199] g/gui-plugin is really loading a SystemPlugin. To load a GUI plugin please use --gui-client-plugin
[ INFO] [1593101458.226256272]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1593101458.227274762]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 192.168.0.30
[ INFO] [1593101458.297072982]: Finished loading Gazebo ROS API Plugin.
[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 192.168.0.30
[ INFO] [1593101458.305619598]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting...
[ INFO] [1593101460.164826078, 0.009000000]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[ INFO] [1593101460.188161901, 0.031000000]: Physics dynamic reconfigure ready.
[Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call
[Err] [REST.cc:205] Error in REST request
libcurl: (51) SSL: no alternative certificate subject name matches target host name 'api.ignitionfuel.org'
and the rs750_gazebo
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://laoge:41809/
SUMMARY
========
PARAMETERS
* /fore_sail_position/joint: fore_sail_joint
* /fore_sail_position/type: position_controll...
* /gazebo/enable_ros_network: True
* /joint_state_publisher/publish_rate: 50
* /joint_state_publisher/type: joint_state_contr...
* /main_sail_position/joint: main_sail_joint
* /main_sail_position/type: position_controll...
* /robot_description: <?xml version="1....
* /robot_state_publisher/publish_frequency: 50.0
* /rosdistro: melodic
* /rosversion: 1.14.6
* /rudder_position/joint: rudder_joint
* /rudder_position/type: position_controll...
* /use_sim_time: True
NODES
/
controller_spawner (controller_manager/spawner)
gazebo (gazebo_ros/gzserver)
gazebo_gui (gazebo_ros/gzclient)
robot_state_publisher (robot_state_publisher/robot_state_publisher)
urdf_spawner (gazebo_ros/spawn_model)
auto-starting new master
process[master]: started with pid [4348]
ROS_MASTER_URI=http://localhost:11311
setting /run_id to c194856e-b6fe-11ea-a5aa-dcfb48f968f2
process[rosout-1]: started with pid [4361]
started core service [/rosout]
process[gazebo-2]: started with pid [4368]
process[gazebo_gui-3]: started with pid [4372]
process[controller_spawner-4]: started with pid [4377]
process[robot_state_publisher-5]: started with pid [4379]
process[urdf_spawner-6]: started with pid [4381]
Gazebo multi-robot simulator, version 9.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
[Msg] RegisterMsg: Type: asv_msgs.msgs.Anemometer
[Msg] RegisterMsg: Type: asv_msgs.msgs.LiftDrag
[INFO] [1593101588.715371, 0.000000]: Controller Spawner: Waiting for service controller_manager/load_controller
[Msg] RegisterSensor: Type: Anemometer
[ INFO] [1593101588.736582660]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1593101588.737611808]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 192.168.0.30
[INFO] [1593101589.114395, 0.000000]: Loading model XML from ros parameter robot_description
[INFO] [1593101589.121579, 0.000000]: Waiting for service /gazebo/spawn_urdf_model
Gazebo multi-robot simulator, version 9.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
[Wrn] [GuiIface.cc:199] g/gui-plugin is really loading a SystemPlugin. To load a GUI plugin please use --gui-client-plugin
[Msg] RegisterMsg: Type: asv_msgs.msgs.Anemometer
[Msg] RegisterMsg: Type: asv_msgs.msgs.LiftDrag
[Msg] RegisterSensor: Type: Anemometer
[ INFO] [1593101589.455052011]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1593101589.456412657]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting...
[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 192.168.0.30
[ INFO] [1593101589.660879455]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[ INFO] [1593101589.680548483]: Physics dynamic reconfigure ready.
[INFO] [1593101589.724626, 0.000000]: Calling service /gazebo/spawn_urdf_model
[Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call
[ INFO] [1593101590.166587113]: Camera Plugin: Using the 'robotNamespace' param: '/'
[ INFO] [1593101590.169404011]: Camera Plugin (ns = /) <tf_prefix_>, set to ""
[ INFO] [1593101590.173226068]: <robotNamespace> set to: //
[ INFO] [1593101590.173270321]: <topicName> set to: //sensors/imu
[ INFO] [1593101590.173283639]: <frameName> set to: imu_link
[ INFO] [1593101590.173301971]: <updateRateHZ> set to: 50
[ INFO] [1593101590.173316035]: <gaussianNoise> set to: 0
[ INFO] [1593101590.173328267]: <xyzOffset> set to: 0 0 0
[ INFO] [1593101590.173353794]: <rpyOffset> set to: 0 -0 0
[Wrn] [msgs.cc:1852] Conversion of sensor type[anemometer] not supported.
[INFO] [1593101590.176343, 0.000000]: Spawn status: SpawnModel: Successfully spawned entity
[Msg] main_sail_liftdrag Plugin <cp> set to -0.30875 0 1.30625
[Msg] main_sail_liftdrag Plugin <link_name> set to main_sail_link
[Msg] main_sail_liftdrag Plugin <topic> set to lift_drag
[Msg] <fluid_density> set to 1.2
[Msg] <radial_symmetry> set to 1
[Msg] <forward> set to 1 0 0
[Msg] <upward> set to 0 1 0
[Msg] <area> set to 1.81
[Msg] <a0> set to 0
[Msg] <alpha_stall> set to 0.1592
[Msg] <cla> set to 6.2832
[Msg] <cla_stall> set to -0.7083
[Msg] <cda> set to 0.63662
[Msg] fore_sail_liftdrag Plugin <cp> set to -0.605667 0 1.20528
[Msg] fore_sail_liftdrag Plugin <link_name> set to fore_sail_link
[Msg] fore_sail_liftdrag Plugin <topic> set to lift_drag
[Msg] <fluid_density> set to 1.2
[Msg] <radial_symmetry> set to 1
[Msg] <forward> set to 1 0 0
[Msg] <upward> set to 0 1 0
[Msg] <area> set to 1.43
[Msg] <a0> set to 0
[Msg] <alpha_stall> set to 0.1592
[Msg] <cla> set to 6.2832
[Msg] <cla_stall> set to -0.7083
[Msg] <cda> set to 0.63662
[ INFO] [1593101590.233837602]: Loading gazebo_ros_control plugin
[ INFO] [1593101590.233916680]: Starting gazebo_ros_control plugin in namespace: /
[ INFO] [1593101590.234732720]: gazebo_ros_control plugin is waiting for model URDF in parameter [robot_description] on the ROS param server.
[ERROR] [1593101590.349755137]: No p gain specified for pid. Namespace: /gazebo_ros_control/pid_gains/rudder_joint
[ERROR] [1593101590.350324398]: No p gain specified for pid. Namespace: /gazebo_ros_control/pid_gains/main_sail_joint
[ERROR] [1593101590.350885607]: No p gain specified for pid. Namespace: /gazebo_ros_control/pid_gains/fore_sail_joint
[ INFO] [1593101590.353975167]: Loaded gazebo_ros_control.
[Msg] Parameter found - setting <wave_model> to <ocean>.
[Msg] Parameter found - setting <damping_on> to <1>.
[Msg] Parameter found - setting <viscous_drag_on> to <1>.
[Msg] Parameter found - setting <pressure_drag_on> to <1>.
[Msg] Parameter <cDampL1> not found: Using default value of <1e-06>.
[Msg] Parameter <cDampL2> not found: Using default value of <1e-06>.
[Msg] Parameter <cDampR1> not found: Using default value of <1e-06>.
[Msg] Parameter <cDampR2> not found: Using default value of <1e-06>.
[Msg] Parameter <cPDrag1> not found: Using default value of <100>.
[Msg] Parameter <cPDrag2> not found: Using default value of <100>.
[Msg] Parameter <fPDrag> not found: Using default value of <0.4>.
[Msg] Parameter <cSDrag1> not found: Using default value of <100>.
[Msg] Parameter <cSDrag2> not found: Using default value of <100>.
[Msg] Parameter <fSDrag> not found: Using default value of <0.4>.
[Msg] Parameter <vRDrag> not found: Using default value of <1>.
[Msg] Parameter found - setting <update_rate> to <30>.
[Msg] Parameter found - setting <water_patch> to <0>.
[Msg] Parameter found - setting <waterline> to <0>.
[Msg] Parameter found - setting <underwater_surface> to <0>.
[Err] [HydrodynamicsPlugin.cc:274] Wavefield Entity is null: ocean::wavefield_entity
[Err] [HydrodynamicsPlugin.cc:634] Wavefield is NULL
[Msg] keel_fin_liftdrag Plugin <cp> set to 0 0 0
[Msg] keel_fin_liftdrag Plugin <link_name> set to keel_fin_link
[Msg] keel_fin_liftdrag Plugin <topic> set to lift_drag
[Msg] <fluid_density> set to 1000
[Msg] <radial_symmetry> set to 1
[Msg] <forward> set to 1 0 0
[Msg] <upward> set to 0 1 0
[Msg] <area> set to 0.17
[Msg] <a0> set to 0
[Msg] <alpha_stall> set to 0.1592
[Msg] <cla> set to 6.2832
[Msg] <cla_stall> set to -0.7083
[Msg] <cda> set to 0.63662
[Msg] rudder_liftdrag Plugin <cp> set to -0.06 0 -0.2
[Msg] rudder_liftdrag Plugin <link_name> set to rudder_link
[Msg] rudder_liftdrag Plugin <topic> set to lift_drag
[Msg] <fluid_density> set to 1000
[Msg] <radial_symmetry> set to 1
[Msg] <forward> set to 1 0 0
[Msg] <upward> set to 0 1 0
[Msg] <area> set to 0.12
[Msg] <a0> set to 0
[Msg] <alpha_stall> set to 0.1592
[Msg] <cla> set to 6.2832
[Msg] <cla_stall> set to -0.7083
[Msg] <cda> set to 0.63662
[urdf_spawner-6] process has finished cleanly
log file: /home/yu/.ros/log/c194856e-b6fe-11ea-a5aa-dcfb48f968f2/urdf_spawner-6*.log
[INFO] [1593101590.521947, 0.000000]: Controller Spawner: Waiting for service controller_manager/switch_controller
[INFO] [1593101590.523590, 0.000000]: Controller Spawner: Waiting for service controller_manager/unload_controller
[INFO] [1593101590.524898, 0.000000]: Loading controller: joint_state_publisher
[INFO] [1593101590.529677, 0.000000]: Loading controller: rudder_position
[INFO] [1593101590.535233, 0.000000]: Loading controller: main_sail_position
[INFO] [1593101590.539170, 0.000000]: Loading controller: fore_sail_position
[INFO] [1593101590.542432, 0.000000]: Controller Spawner: Loaded controllers: joint_state_publisher, rudder_position, main_sail_position, fore_sail_position
[Wrn] [msgs.cc:1852] Conversion of sensor type[anemometer] not supported.
[Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call
[Wrn] [msgs.cc:1852] Conversion of sensor type[anemometer] not supported.
[Wrn] [msgs.cc:1852] Conversion of sensor type[anemometer] not supported.
[Err] [REST.cc:205] Error in REST request
libcurl: (51) SSL: no alternative certificate subject name matches target host name 'api.ignitionfuel.org'
^C[robot_state_publisher-5] killing on exit
[controller_spawner-4] killing on exit
[gazebo_gui-3] killing on exit
[gazebo-2] killing on exit
[INFO] [1593101604.559388, 0.000000]: Shutting down spawner. Stopping and unloading controllers...
[INFO] [1593101604.560221, 0.000000]: Stopping all controllers...
[gazebo_gui-3] escalating to SIGTERM
[gazebo-2] escalating to SIGTERM
[controller_spawner-4] escalating to SIGTERM
[WARN] [1593101619.598452, 0.000000]: Controller Spawner error while taking down controllers: transport error completing service call: receive_once[/controller_manager/switch_controller]: unexpected error [Errno 4] Interrupted system call
Traceback (most recent call last):
File "/opt/ros/melodic/lib/controller_manager/spawner", line 212, in <module>
if __name__ == '__main__': main()
File "/opt/ros/melodic/lib/controller_manager/spawner", line 204, in main
resp = switch_controller(loaded, [], 2, False, 0.0)
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 442, in __call__
return self.call(*args, **kwds)
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 530, in call
raise rospy.exceptions.ROSInterruptException("node shutdown interrupted service call")
rospy.exceptions.ROSInterruptException: node shutdown interrupted service call
[rosout-1] killing on exit
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done
This is what I'm expecting to see (omitting the startup section):
$ roslaunch asv_wave_sim_gazebo ocean_world.launch verbose:=true
...
Gazebo multi-robot simulator, version 11.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
[Wrn] [GuiIface.cc:199] g/gui-plugin is really loading a SystemPlugin. To load a GUI plugin please use --gui-client-plugin
[ INFO] [1593102340.473764000]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1593102340.476911000]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 192.168.1.31
[ INFO] [1593102340.825242000]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1593102340.828396000]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting...
[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 192.168.1.31
[ INFO] [1593102340.877104000]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[ INFO] [1593102340.910293000]: Physics dynamic reconfigure ready.
[Msg] Parameter found - setting <static> to <0>.
[Msg] Parameter found - setting <update_rate> to <30>.
[Msg] Parameter found - setting <wave_patch> to <0>.
[Msg] Parameter found - setting <wave_patch_size> to <4 4>.
[Msg] Parameter found - setting <size> to <1000 1000>.
[Msg] Parameter found - setting <cell_count> to <50 50>.
[Msg] Parameter found - setting <number> to <3>.
[Msg] Parameter found - setting <amplitude> to <1>.
[Msg] Parameter found - setting <period> to <8>.
[Msg] Parameter <phase> not found: Using default value of <0>.
[Msg] Parameter found - setting <direction> to <1 1>.
[Msg] Parameter found - setting <scale> to <2.5>.
[Msg] Parameter found - setting <angle> to <0.3>.
[Msg] Parameter found - setting <steepness> to <1>.
[Msg] Constructing WavefieldOceanTile...
[Msg] Creating WaveParameters.
[Msg] Creating OceanTile.
[Msg] Creating grid.
[Msg] Creating triangulated grid.
[Msg] Done constructing WavefieldOceanTile.
[Err] [msgs.cc:2872] Unrecognized geometry type
[Msg] Loading OceanVisualPlugin...
[Msg] Done loading OceanVisualPlugin.
[Msg] Initializing OceanVisualPlugin...
[Msg] Done initializing OceanVisualPlugin.
[Msg] Initializing OceanVisualPlugin...
[Msg] Done initializing OceanVisualPlugin.
I'm running gazebo11 on macOS, but the working docker image uses the standard ROS melodic-desktop-full, which is gazebo9.
From the warning:
[Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call
It looks like the error is happening in WavefieldModelPlugin.cc
around line 154. This is where the OnUpdate
callback is bound the world update event and is immediately before the parameters are set.
I am wondering whether its the pointer assignment in the section:
// Bind the update callback to the world update event
this->data->updateConnection = event::Events::ConnectWorldUpdateBegin(
std::bind(&WavefieldModelPlugin::OnUpdate, this));
that is the culprit. Could you try placing a gzmsg << "<some message>";
either side and rebuilding to confirm.
If it's not here, then it would be the parameter extraction templates that follow.
Another thought is that it may be caused by a threading issue - the model plugin does not have a mutex (the visuals do). Could you uncomment the sections:
// @DEBUG_INFO
// std::thread::id threadId = std::this_thread::get_id();
// gzmsg << "Load WavefieldModelPlugin [thread: " << threadId << "]" << std::endl;
as well and post the logs.
I haven't see any message from the stream
gzmsg << "<some message>" << std::endl;
this->data->updateConnection = event::Events::ConnectWorldUpdateBegin(
std::bind(&WavefieldModelPlugin::OnUpdate, this));
gzmsg << "<some message>" << std::endl;
The output
Gazebo multi-robot simulator, version 9.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
[Wrn] [GuiIface.cc:199] g/gui-plugin is really loading a SystemPlugin. To load a GUI plugin please use --gui-client-plugin
[ INFO] [1593448022.490402986]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1593448022.491170648]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting...
[Msg] Waiting for master.
Gazebo multi-robot simulator, version 9.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
[ INFO] [1593448022.721189691]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1593448022.723208178]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 192.168.0.30
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 192.168.0.30
[ INFO] [1593448023.768250463, 0.016000000]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[ INFO] [1593448023.786654915, 0.034000000]: Physics dynamic reconfigure ready.
[Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call
That's confusing - I haven't seen this problem before and can't replicate it on macOS or Ubuntu 18.04 (or the docker image). Please bear with me while we try to narrow the cause down.
The next step is to try and isolate the problem:
1. OceanVisualPlugin only
In asv_wave_sim_gazebo/world_models/ocean/model.sdf
can you first comment out the model plugin
<!--
<plugin name="wavefield_plugin" filename="libWavefieldModelPlugin.so">
...
</plugin>
-->
and launch:
$ roslaunch asv_wave_sim_gazebo ocean_world.launch verbose:=true
The expected behaviour is that the client will display a moving ocean, but if you try to place a buoyant object you will receive an error stating that the Wavefield is NULL
.
2. WavefieldModelPlugin only
Reinstate the wavefield_plugin section above, and now comment out the line
<!-- <plugin name="ocean_plugin" filename="libOceanVisualPlugin.so" /> -->
This time when you launch the expected behaviour is that there will be no ocean displayed, but you should see the terminal log the wave parameters as the model plugin loads.
3. WavefieldModelPlugin failing
If you have a debug environment you can try to step through the load sequence (but debugging Gazebo may be tricky if you don't have a from source build). Alternatively you can place gzmsg << "Constructor"
, gzmsg << "Begin Load..."
etc. in the WavefieldModelPlugin
source to try and establish at what point the plugin is failing. There is not that much going on before the callback is bound to the event. I'd be interested to know which of the plugin functions are called (and how many times - if more than once). I suggest placing logging at the entry and exit for each of ~WavefieldModelPlugin
, WavefieldModelPlugin
, Load
, Init
, Reset
, etc.
I start to think about the possibility of conflict ocean model with uuv_simulator
.
Yes - that would make sense. If you have installed uuv_simulator to /opt/ros/melodic rather than just run it from a catkin workspace, then there may be a conflict with the ocean model names. You can either change the model name in the asv_wave_sim and rs750 projects, or remove the uuv_simulator projects.
Should be resolved in latest versions using gz-sim7
.
asv_sim
andasv_wave_sim
built and sourced against branches listed in https://github.com/srmainwaring/sail_sim_docker/commit/061983de2184dad9251bc4a391b92dcff70c7622 .Launch with
roslaunch rs750_gazebo rs750_ocean_world.launch verbose:=true
and the error message isGazebo environment variables are
Any idea on what might cause this? thanks