Wheeled and Tracked Vehicle Synchronization

SynChrono provides state synchronization for Chrono::Vehicle model templates. Wheeled and tracked vehicle synchronization are currently supported.

General Concepts

To achieve SynChrono's goal of extending Project Chrono's physics into the multi-agent realm, the first step was to enable large-scale vehicle scenarios. Single vehicle simulations was already supported through the Chrono::Vehicle module, but a scalable solution for 10s to 100s of additional vehicles was desired. Through SynChrono's synchronization backbone, this became feasible. Synchronization within SynChrono is explained in depth here.

To allow for time and space coherence between agents, state passing is performed at a predetermined heartbeat to effectively pretend all vehicles are simulated within the same world. SynAgent's manage both the construction and synchronization of these pretend agents (or zombies) and handle generating the state messages to be distributed between agents. The SynWheeledVehicleAgent and SynTrackedVehicleAgent classes are the thin wrappers used for ChWheeledVehicle's and ChTrackedVehicle's. Over the course of a simulation, a VehicleAgent will initialize a zombie for each other VehicleAgent initialized on other nodes, distribute its own state to the other nodes and synchronize each zombie to match its corresponding agent. This cycle can be seen in the below figure.

DDS System

Wheeled and tracked vehicles will distribute individual state and description information through SynChrono. State data describes the current position and orientation of specific components of the vehicles. During the initial handshake of SynChrono, description messages are sent that describe how to reconstruct the vehicle as a zombie. See the Wheeled Vehicle Synchronization or the Tracked Vehicle Synchronization sections for a detailed description about the exact data types.

Limitations

Currently, only position and orientation of various vehicle components is shared between agents. Contact forces are not shared, hence agents are only space coherent (i.e. have knowledge of), not space interactive.

Wheeled Vehicle Synchronization

A SynWheeledVehicleAgent simply wraps a pointer for a ChWheeledVehicle's.

Description Messages

To reconstruct a ChWheeledVehicle's, one must know the visual representation of its chassis, rims and tires. To enhance generality and allow for multiple vehicle configurations (i.e. more than four wheels), the number of wheels is sent, as well. Each visual file is represented as a string which is then read relative to the Chrono data directory.

Upon initialization of the simulation, the chassis, wheels and tires are placed at the origin. The position is then updated as state messages are received.

table Description {
chassis_vis_file:string;
wheel_vis_file:string;
tire_vis_file:string;
num_wheels:int;
}

State Messages

The state information for a wheeled vehicle is rather simple. The pose (position and orientation) of the chassis and the models wheels are sent to the other agents. Wheels and tires share the same pose information.

On reception, the bodies created at initialization through the description message have their position updated.

For sending, the attached vehicle pointer is queried for position and orientation of the passed components.

table State {
time:double;
chassis:Pose;
wheels:[Pose];
}

Tracked Vehicle Synchronization

A SynTrackedVehicleAgent simply wraps a pointer for a ChTrackedVehicle's.

Description Messages

To reconstruct a ChTrackedVehicle's, one must know the visual representation of its chassis, track shoes, sprockets, idlers and road wheels. Other than the chassis and track shoe, different meshes could be used for different sides, so the left and right files are sent separately. To enhance generality and allow for multiple vehicle configurations (i.e. more or less sprockets/idlers/etc.), the number of track shoes, sprockets, idlers and road_wheels are sent. Each visual file is represented as a string which is then read relative to the Chrono data directory.

table Description {
chassis_vis_file:string;
track_shoe_vis_file:string;
left_sprocket_vis_file:string;
right_sprocket_vis_file:string;
left_idler_vis_file:string;
right_idler_vis_file:string;
left_road_wheel_vis_file:string;
right_road_wheel_vis_file:string;
num_track_shoes:int;
num_sprockets:int;
num_idlers:int;
num_road_wheels:int;
}

State Messages

The state information for a tracked vehicle is simply a long list of poses for each component handled by the agent. The position of each component is updated on reception and the attached vehicle pointer is queried for position and orientation on sending.

table State {
time:double;
chassis:Pose;
track_shoes:[Pose];
sprockets:[Pose];
idlers:[Pose];
road_wheels:[Pose];
}