Move Camera to model
This tutorial gives an introduction to Gazebo's service /gui/move_to/model. This service will allow to move the camera to a specific model taking into account distance to the model and camera angle.
How to move the camera to a model
- Load the View Angle plugin. This service is only available when the View Angle plugin is loaded.
 - Call the service using the request message type 
gz.msgs.GUICameraand the response message typegz.msgs.Boolean. The distance to the object is defined as the z coordinate, and the direction of the camera with a quaternion. It's possible to select the projection type. 
For example, Let's move the camera to the box model looking down from 5 meters away. This example uses the shapes.sdf world.
gz service  -s /gui/move_to/model --reqtype gz.msgs.GUICamera  --reptype gz.msgs.Boolean -r 'name: "box", pose: {position: {z:5}, orientation: {x:0, y:0, z: -1, w:0}}, projection_type: "orbit"' --timeout 5000
The camera can also be placed far away, for example 20 meters:
gz service  -s /gui/move_to/model --reqtype gz.msgs.GUICamera  --reptype gz.msgs.Boolean -r 'name: "box", pose: {position: {z:20}, orientation: {x:0, y:0, z: -1, w:0}}, projection_type: "orbit"' --timeout 5000
In the following gif you can see the workflow of this service: