[Q] simulation: robotic avatars and time reference

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

[Q] simulation: robotic avatars and time reference

espin
Hi all,
I am writing a prototypical air traffic simulation application.
The sky is partitioned into various entities: airspaces,
traffic volumes, ...
Aircrafts will follow flight plans.
Flight plans are described in 4D (3D + time) thru
entities such as: en-route routes, points, flight levels,
takeoff time, relative times over (points)...

I would like to have
1. Croquet participants (robots, not "human" avatars)
   representing different (group of) airports
   instantiating flight from a local data source (file, db,...)
2. instantiation should be time driven: a new flight enters
   into the simulation at takeoff time as specified in its
   flight plan
3. human avatars will be able to ask for relevant aggregated
   information (table/graph of flight counts per hour, ...)
   for their geographical area of competence (aerodrome,
   airspace).

Given the above, my questions for Croquet developers/experts are:
a. is it really possible to have a participant which creates
   new instances based on local machine information (file, db...)?
   If not, do I only have the possibility to create instances in a
   centralized way?
b. is there any possibility to define a reference simulation start
   time (at island level?) shared by all participants?
   Is it OK for example to do it in (a subclass of)
   CroquetParticipant?

Any helps/ideas is welcome
Thanks in advance
Regards
Enrico
Reply | Threaded
Open this post in threaded view
|

Re: [Q] simulation: robotic avatars and time reference

Joshua Gargus-2
That's an interesting application!

The answer to a) is yes.  If I understand you properly, then you want  
to have an ongoing Croquet simulation where a new "airport  
participant" can join and use their own data sources to simulate  
their flights.  This should work fine.

The answer to b) is also yes.  The Croquet simulation would  
explicitly model "real-world" time (which could be paused, sped-up,  
etc. as your application demands).  Participants could observe the  
passage of time in the island; for example, when a certain time is  
reached, a new plane can take off (based on the flight info in that  
airports local data source).

Does it seem like I understand your scenario properly?  If so, then  
it looks like you can achieve your goals using Croquet.

Cheers,
Josh


On Jun 10, 2007, at 2:53 AM, Enrico Spinielli wrote:

> Hi all,
> I am writing a prototypical air traffic simulation application.
> The sky is partitioned into various entities: airspaces,
> traffic volumes, ...
> Aircrafts will follow flight plans.
> Flight plans are described in 4D (3D + time) thru
> entities such as: en-route routes, points, flight levels,
> takeoff time, relative times over (points)...
>
> I would like to have
> 1. Croquet participants (robots, not "human" avatars)
>    representing different (group of) airports
>    instantiating flight from a local data source (file, db,...)
> 2. instantiation should be time driven: a new flight enters
>    into the simulation at takeoff time as specified in its
>    flight plan
> 3. human avatars will be able to ask for relevant aggregated
>    information (table/graph of flight counts per hour, ...)
>    for their geographical area of competence (aerodrome,
>    airspace).
>
> Given the above, my questions for Croquet developers/experts are:
> a. is it really possible to have a participant which creates
>    new instances based on local machine information (file, db...)?
>    If not, do I only have the possibility to create instances in a
>    centralized way?
> b. is there any possibility to define a reference simulation start
>    time (at island level?) shared by all participants?
>    Is it OK for example to do it in (a subclass of)
>    CroquetParticipant?
>
> Any helps/ideas is welcome
> Thanks in advance
> Regards
> Enrico

Reply | Threaded
Open this post in threaded view
|

Re: [Q] simulation: robotic avatars and time reference

David P. Reed
In reply to this post by espin
The "replicated computation" model takes some getting used to.   A
"local" file or database is properly thought of as a non-replicated file
within the replicated computational world.   That means that it can only
be *directly* accessed by a non-replicated portion of the computation.  
So the way to do this in Croquet is to start a non-replicated activity
on the machine that has the file or database, and have it communicate
events that are replicated to all replicated island instances of a
replicated computation.

That's the answer to (a).

(b) is straightforward - just create a mapping (any one-to-one and onto
mapping will do) between simulation time and Croquet time.   Such a
mapping can be at a relative rate and start time, or even a non-linear
mapping.   Run the simulation up to the corresponding Croquet time.



Enrico Spinielli wrote:

> Hi all,
> I am writing a prototypical air traffic simulation application.
> The sky is partitioned into various entities: airspaces,
> traffic volumes, ...
> Aircrafts will follow flight plans.
> Flight plans are described in 4D (3D + time) thru
> entities such as: en-route routes, points, flight levels,
> takeoff time, relative times over (points)...
>
> I would like to have
> 1. Croquet participants (robots, not "human" avatars)
>    representing different (group of) airports
>    instantiating flight from a local data source (file, db,...)
> 2. instantiation should be time driven: a new flight enters
>    into the simulation at takeoff time as specified in its
>    flight plan
> 3. human avatars will be able to ask for relevant aggregated
>    information (table/graph of flight counts per hour, ...)
>    for their geographical area of competence (aerodrome,
>    airspace).
>
> Given the above, my questions for Croquet developers/experts are:
> a. is it really possible to have a participant which creates
>    new instances based on local machine information (file, db...)?
>    If not, do I only have the possibility to create instances in a
>    centralized way?
> b. is there any possibility to define a reference simulation start
>    time (at island level?) shared by all participants?
>    Is it OK for example to do it in (a subclass of)
>    CroquetParticipant?
>
> Any helps/ideas is welcome
> Thanks in advance
> Regards
> Enrico
>
>  
Reply | Threaded
Open this post in threaded view
|

Re: [Q] simulation: robotic avatars and time reference

Lorenzo
In reply to this post by espin
Hi Enrico,

I am working on fuzzy neuro systems; it seems to me that your application
can have advantages using this technology.

I have developped a framework in Smalltalk that seems quite effective.

Could you be interested in trying it into your application ?

Lorenzo
----- Original Message -----
From: "Enrico Spinielli" <[hidden email]>
To: <[hidden email]>
Sent: Sunday, June 10, 2007 11:53 AM
Subject: [croquet-dev] [Q] simulation: robotic avatars and time reference


> Hi all,
> I am writing a prototypical air traffic simulation application.
> The sky is partitioned into various entities: airspaces,
> traffic volumes, ...
> Aircrafts will follow flight plans.
> Flight plans are described in 4D (3D + time) thru
> entities such as: en-route routes, points, flight levels,
> takeoff time, relative times over (points)...
>
> I would like to have
> 1. Croquet participants (robots, not "human" avatars)
>   representing different (group of) airports
>   instantiating flight from a local data source (file, db,...)
> 2. instantiation should be time driven: a new flight enters
>   into the simulation at takeoff time as specified in its
>   flight plan
> 3. human avatars will be able to ask for relevant aggregated
>   information (table/graph of flight counts per hour, ...)
>   for their geographical area of competence (aerodrome,
>   airspace).
>
> Given the above, my questions for Croquet developers/experts are:
> a. is it really possible to have a participant which creates
>   new instances based on local machine information (file, db...)?
>   If not, do I only have the possibility to create instances in a
>   centralized way?
> b. is there any possibility to define a reference simulation start
>   time (at island level?) shared by all participants?
>   Is it OK for example to do it in (a subclass of)
>   CroquetParticipant?
>
> Any helps/ideas is welcome
> Thanks in advance
> Regards
> Enrico
>

Reply | Threaded
Open this post in threaded view
|

Re: [Q] simulation: robotic avatars and time reference

espin
In reply to this post by Joshua Gargus-2
Hi Joshua,


On 6/10/07, Joshua Gargus <[hidden email]> wrote:
> That's an interesting application!
>
> The answer to a) is yes.  If I understand you properly, then you want
> to have an ongoing Croquet simulation where a new "airport
> participant" can join and use their own data sources to simulate
> their flights.  This should work fine.

You got perfectly. It should also be interesting having other stakeholders
contributing to the simulation, for example airspace designers which
change the shape of the infrastructure (airspaces, sectors, route...)
to gain capacity (more flights per our per sector) and/or safety (less
sector handovers...).
If you then turn it all upside down, you can have the real thing being
fed by up-to-the-minute events (flight plans, live updates to relevant
aeronautical information entities [sector/runway capacities, restrictions...])
and one/many parallel disposable simulations where you play with
some scenario/s so as to choose the best one (minimum overall delays for
example).
I want to start from a simple but significant enough simulation and turn it
upside down.

>
> The answer to b) is also yes.  The Croquet simulation would
> explicitly model "real-world" time (which could be paused, sped-up,
> etc. as your application demands).  Participants could observe the
> passage of time in the island; for example, when a certain time is
> reached, a new plane can take off (based on the flight info in that
> airports local data source).
>
> Does it seem like I understand your scenario properly?
you got it perfectly.

>  If so, then
> it looks like you can achieve your goals using Croquet.
I'll now dig into the evil details ;-)

>
> Cheers,
> Josh


Thanks and bye
Enrico

>
>
> On Jun 10, 2007, at 2:53 AM, Enrico Spinielli wrote:
>
> > Hi all,
> > I am writing a prototypical air traffic simulation application.
> > The sky is partitioned into various entities: airspaces,
> > traffic volumes, ...
> > Aircrafts will follow flight plans.
> > Flight plans are described in 4D (3D + time) thru
> > entities such as: en-route routes, points, flight levels,
> > takeoff time, relative times over (points)...
> >
> > I would like to have
> > 1. Croquet participants (robots, not "human" avatars)
> >    representing different (group of) airports
> >    instantiating flight from a local data source (file, db,...)
> > 2. instantiation should be time driven: a new flight enters
> >    into the simulation at takeoff time as specified in its
> >    flight plan
> > 3. human avatars will be able to ask for relevant aggregated
> >    information (table/graph of flight counts per hour, ...)
> >    for their geographical area of competence (aerodrome,
> >    airspace).
> >
> > Given the above, my questions for Croquet developers/experts are:
> > a. is it really possible to have a participant which creates
> >    new instances based on local machine information (file, db...)?
> >    If not, do I only have the possibility to create instances in a
> >    centralized way?
> > b. is there any possibility to define a reference simulation start
> >    time (at island level?) shared by all participants?
> >    Is it OK for example to do it in (a subclass of)
> >    CroquetParticipant?
> >
> > Any helps/ideas is welcome
> > Thanks in advance
> > Regards
> > Enrico
>
>
Reply | Threaded
Open this post in threaded view
|

Re: [Q] simulation: robotic avatars and time reference

espin
In reply to this post by David P. Reed
Hello David,

On 6/10/07, David P. Reed <[hidden email]> wrote:

> The "replicated computation" model takes some getting used to.   A
> "local" file or database is properly thought of as a non-replicated file
> within the replicated computational world.   That means that it can only
> be *directly* accessed by a non-replicated portion of the computation.
> So the way to do this in Croquet is to start a non-replicated activity
> on the machine that has the file or database, and have it communicate
> events that are replicated to all replicated island instances of a
> replicated computation.
>
> That's the answer to (a).
According to 'Island Time' section in Croquet's 'System Overview' [1]
External non-replicated messages are extremely dangerous and must be avoided. They do play a role, but it is extremely rare that anyone will ever have a need to make use of this mechanism. The problem is obviously that if a non-replicated message is executed and happens to modify the state of an Island it breaks the determinism the Island shares with the other replicated copies. We do use such non-replicated message when rendering the contents of an Island, but this is extremely well controlled.
So I have to be extremely careful and probably take inspiration form the code
rendering for local participant: for example CroquetHarness>>setupLocal in the SDK
(where a non-replicated portal and overlay are created to serve the local participant)

[1] Island Time in Croquet's System Overview
    http://croquetconsortium.org/index.php/System_Overview#Island_Time

>
> (b) is straightforward - just create a mapping (any one-to-one and onto
> mapping will do) between simulation time and Croquet time.   Such a
> mapping can be at a relative rate and start time, or even a non-linear
> mapping.   Run the simulation up to the corresponding Croquet time.

This boils down to keep some global simulation counter (simulation time
initialized with island time at the start of the simulation) and use
Croquet time, aka TIsland>>time, doesn't it?

Thanks for your reply
Bye
Enrico


>

>
> Enrico Spinielli wrote:
> > Hi all,
> > I am writing a prototypical air traffic simulation application.
> > The sky is partitioned into various entities: airspaces,
> > traffic volumes, ...
> > Aircrafts will follow flight plans.
> > Flight plans are described in 4D (3D + time) thru
> > entities such as: en-route routes, points, flight levels,
> > takeoff time, relative times over (points)...
> >
> > I would like to have
> > 1. Croquet participants (robots, not "human" avatars)
> >    representing different (group of) airports
> >    instantiating flight from a local data source (file, db,...)
> > 2. instantiation should be time driven: a new flight enters
> >    into the simulation at takeoff time as specified in its
> >    flight plan
> > 3. human avatars will be able to ask for relevant aggregated
> >    information (table/graph of flight counts per hour, ...)
> >    for their geographical area of competence (aerodrome,
> >    airspace).
> >
> > Given the above, my questions for Croquet developers/experts are:
> > a. is it really possible to have a participant which creates
> >    new instances based on local machine information (file, db...)?
> >    If not, do I only have the possibility to create instances in a
> >    centralized way?
> > b. is there any possibility to define a reference simulation start
> >    time (at island level?) shared by all participants?
> >    Is it OK for example to do it in (a subclass of)
> >    CroquetParticipant?
> >
> > Any helps/ideas is welcome
> > Thanks in advance
> > Regards
> > Enrico
> >
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: [Q] simulation: robotic avatars and time reference

Joshua Gargus-2

On Jun 12, 2007, at 3:33 PM, Enrico Spinielli wrote:

Hello David,

On 6/10/07, David P. Reed <[hidden email]> wrote:

> The "replicated computation" model takes some getting used to.   A
> "local" file or database is properly thought of as a non-replicated file
> within the replicated computational world.   That means that it can only
> be *directly* accessed by a non-replicated portion of the computation.
> So the way to do this in Croquet is to start a non-replicated activity
> on the machine that has the file or database, and have it communicate
> events that are replicated to all replicated island instances of a
> replicated computation.
>
> That's the answer to (a).
According to 'Island Time' section in Croquet's 'System Overview' [1]
External non-replicated messages are extremely dangerous and must be avoided. They do play a role, but it is extremely rare that anyone will ever have a need to make use of this mechanism. The problem is obviously that if a non-replicated message is executed and happens to modify the state of an Island it breaks the determinism the Island shares with the other replicated copies. We do use such non-replicated message when rendering the contents of an Island, but this is extremely well controlled.
So I have to be extremely careful and probably take inspiration form the code
rendering for local participant: for example CroquetHarness>>setupLocal in the SDK
(where a non-replicated portal and overlay are created to serve the local participant)

[1] Island Time in Croquet's System Overview
    http://croquetconsortium.org/index.php/System_Overview#Island_Time


It's only non-replicated messages sent to replicated (on-island) objects that are dangerous.  Non-replicated messages are safely sent outside of the island all the time.  For example, keyboard events  run though quite a bit of Squeak/Morphic code before they result in replicated Croquet events.  As another example, take a look at the webcam code in the SDK.  When a new video frame is grabbed, a replicated message is sent into the island with the contents of the frame (this should be quite similar to noticing that some relevant flight-plan event should occur, and sending the appropriate replicated message); this is perfectly safe.

>
> (b) is straightforward - just create a mapping (any one-to-one and onto
> mapping will do) between simulation time and Croquet time.   Such a
> mapping can be at a relative rate and start time, or even a non-linear
> mapping.   Run the simulation up to the corresponding Croquet time.

This boils down to keep some global simulation counter (simulation time
initialized with island time at the start of the simulation) and use
Croquet time, aka TIsland>>time, doesn't it?

That is one way to do it.  In fact, the mapping between simulation time and Croquet time need not be bijective; for example, it wouldn't be if you wanted to be able to pause or rewind the simulation while still being able to interact in the space.

Josh


Thanks for your reply
Bye
Enrico


>

>
> Enrico Spinielli wrote:
> > Hi all,
> > I am writing a prototypical air traffic simulation application.
> > The sky is partitioned into various entities: airspaces,
> > traffic volumes, ...
> > Aircrafts will follow flight plans.
> > Flight plans are described in 4D (3D + time) thru
> > entities such as: en-route routes, points, flight levels,
> > takeoff time, relative times over (points)...
> >
> > I would like to have
> > 1. Croquet participants (robots, not "human" avatars)
> >    representing different (group of) airports
> >    instantiating flight from a local data source (file, db,...)
> > 2. instantiation should be time driven: a new flight enters
> >    into the simulation at takeoff time as specified in its
> >    flight plan
> > 3. human avatars will be able to ask for relevant aggregated
> >    information (table/graph of flight counts per hour, ...)
> >    for their geographical area of competence (aerodrome,
> >    airspace).
> >
> > Given the above, my questions for Croquet developers/experts are:
> > a. is it really possible to have a participant which creates
> >    new instances based on local machine information (file, db...)?
> >    If not, do I only have the possibility to create instances in a
> >    centralized way?
> > b. is there any possibility to define a reference simulation start
> >    time (at island level?) shared by all participants?
> >    Is it OK for example to do it in (a subclass of)
> >    CroquetParticipant?
> >
> > Any helps/ideas is welcome
> > Thanks in advance
> > Regards
> > Enrico
> >
> >
>

Reply | Threaded
Open this post in threaded view
|

Re: [Q] simulation: robotic avatars and time reference

Howard Stearns
In reply to this post by espin
I think of correct Croquet applications as having two kinds of non-
replicated computation:

I) Things That Don't Matter.  Look but don't touch.  This is how  
rendering works. You can do pretty much whatever you want if you  
don't actually change anything in the Island.

II) Things That Do Matter.  A system with no input is pretty boring.  
The way we inject input into the system is to have non-replicated  
computation (e.g., a user interface on one participant) send a  
message to an object in the Island. Croquet automatically replicates  
that message to all participants.  So my keyboard and mouse are not  
replicated, nor are the computation that surrounds them. But this  
computation eventually results in one or more replicated messages.

Your application is simply replacing the keyboard/mouse computation  
with some other set of non-replicated computation that uses a  
database.  That is, they're "Things That Do Matter." Inputs.  Croquet  
is designed to make this fairly easy to do (e.g., it is a network  
architecture that takes care of replicating the to-Island messages  
for you).

By contrast, the passage you quoted can be thought of as scaring you  
off from trying to do stuff that you think are "Things That Don't  
Matter." I don't think that's the case here.

I sometimes LOOSELY think of the above as:
    non-replicated stuff producing replicated inputs = OK
    non-replicated output = be careful
    non-replicated side-effects to Island = NEVER


On Jun 12, 2007, at 5:33 PM, Enrico Spinielli wrote:

> Hello David,
>
> On 6/10/07, David P. Reed <[hidden email]> wrote:
> > The "replicated computation" model takes some getting used to.   A
> > "local" file or database is properly thought of as a non-
> replicated file
> > within the replicated computational world.   That means that it  
> can only
> > be *directly* accessed by a non-replicated portion of the  
> computation.
> > So the way to do this in Croquet is to start a non-replicated  
> activity
> > on the machine that has the file or database, and have it  
> communicate
> > events that are replicated to all replicated island instances of a
> > replicated computation.
> >
> > That's the answer to (a).
> According to 'Island Time' section in Croquet's 'System Overview' [1]
> External non-replicated messages are extremely dangerous and must  
> be avoided. They do play a role, but it is extremely rare that  
> anyone will ever have a need to make use of this mechanism. The  
> problem is obviously that if a non-replicated message is executed  
> and happens to modify the state of an Island it breaks the  
> determinism the Island shares with the other replicated copies. We  
> do use such non-replicated message when rendering the contents of  
> an Island, but this is extremely well controlled.
> So I have to be extremely careful and probably take inspiration  
> form the code
> rendering for local participant: for example  
> CroquetHarness>>setupLocal in the SDK
> (where a non-replicated portal and overlay are created to serve the  
> local participant)
>
> [1] Island Time in Croquet's System Overview
>     http://croquetconsortium.org/index.php/System_Overview#Island_Time
>
> >
> > (b) is straightforward - just create a mapping (any one-to-one  
> and onto
> > mapping will do) between simulation time and Croquet time.   Such a
> > mapping can be at a relative rate and start time, or even a non-
> linear
> > mapping.   Run the simulation up to the corresponding Croquet time.
>
> This boils down to keep some global simulation counter (simulation  
> time
> initialized with island time at the start of the simulation) and use
> Croquet time, aka TIsland>>time, doesn't it?
>
> Thanks for your reply
> Bye
> Enrico
>
>
> >
> >
> > Enrico Spinielli wrote:
> > > Hi all,
> > > I am writing a prototypical air traffic simulation application.
> > > The sky is partitioned into various entities: airspaces,
> > > traffic volumes, ...
> > > Aircrafts will follow flight plans.
> > > Flight plans are described in 4D (3D + time) thru
> > > entities such as: en-route routes, points, flight levels,
> > > takeoff time, relative times over (points)...
> > >
> > > I would like to have
> > > 1. Croquet participants (robots, not "human" avatars)
> > >    representing different (group of) airports
> > >    instantiating flight from a local data source (file, db,...)
> > > 2. instantiation should be time driven: a new flight enters
> > >    into the simulation at takeoff time as specified in its
> > >    flight plan
> > > 3. human avatars will be able to ask for relevant aggregated
> > >    information (table/graph of flight counts per hour, ...)
> > >    for their geographical area of competence (aerodrome,
> > >    airspace).
> > >
> > > Given the above, my questions for Croquet developers/experts are:
> > > a. is it really possible to have a participant which creates
> > >    new instances based on local machine information (file, db...)?
> > >    If not, do I only have the possibility to create instances in a
> > >    centralized way?
> > > b. is there any possibility to define a reference simulation start
> > >    time (at island level?) shared by all participants?
> > >    Is it OK for example to do it in (a subclass of)
> > >    CroquetParticipant?
> > >
> > > Any helps/ideas is welcome
> > > Thanks in advance
> > > Regards
> > > Enrico
> > >
> > >
> >

Reply | Threaded
Open this post in threaded view
|

Re: [Q] simulation: robotic avatars and time reference

espin
In reply to this post by Lorenzo
Hi Lorenzo,
thanks for you offer but for now I plan to keep things really simple.
I wasn't even thinking about fuzzy logic mainly because I would like
to drive the simulation from existing flight plans without the need
to create/validate them against the relevant aeronautical entities (open/closed
routes, existence of referred points/SID/STAR/...).
With the little details you provided, the application to flight plan definition
is the first application of fuzzy logic that comes to my mind...I am probably
off mark, sorry for that. Maybe more details will help to understand further.

Bye and thanks again
Enrico

On 6/11/07, Lorenzo Schiavina <[hidden email]> wrote:

> Hi Enrico,
>
> I am working on fuzzy neuro systems; it seems to me that your application
> can have advantages using this technology.
>
> I have developped a framework in Smalltalk that seems quite effective.
>
> Could you be interested in trying it into your application ?
>
> Lorenzo
> ----- Original Message -----
> From: "Enrico Spinielli" <[hidden email]>
> To: <[hidden email]>
> Sent: Sunday, June 10, 2007 11:53 AM
> Subject: [croquet-dev] [Q] simulation: robotic avatars and time reference
>
>
> > Hi all,
> > I am writing a prototypical air traffic simulation application.
> > The sky is partitioned into various entities: airspaces,
> > traffic volumes, ...
> > Aircrafts will follow flight plans.
> > Flight plans are described in 4D (3D + time) thru
> > entities such as: en-route routes, points, flight levels,
> > takeoff time, relative times over (points)...
> >
> > I would like to have
> > 1. Croquet participants (robots, not "human" avatars)
> >   representing different (group of) airports
> >   instantiating flight from a local data source (file, db,...)
> > 2. instantiation should be time driven: a new flight enters
> >   into the simulation at takeoff time as specified in its
> >   flight plan
> > 3. human avatars will be able to ask for relevant aggregated
> >   information (table/graph of flight counts per hour, ...)
> >   for their geographical area of competence (aerodrome,
> >   airspace).
> >
> > Given the above, my questions for Croquet developers/experts are:
> > a. is it really possible to have a participant which creates
> >   new instances based on local machine information (file, db...)?
> >   If not, do I only have the possibility to create instances in a
> >   centralized way?
> > b. is there any possibility to define a reference simulation start
> >   time (at island level?) shared by all participants?
> >   Is it OK for example to do it in (a subclass of)
> >   CroquetParticipant?
> >
> > Any helps/ideas is welcome
> > Thanks in advance
> > Regards
> > Enrico
> >
>
>
Reply | Threaded
Open this post in threaded view
|

Re: [Q] simulation: robotic avatars and time reference

espin
In reply to this post by Joshua Gargus-2
Hi Joshua,
thanks for the clarification and hints about where to take inspiration in Croquet image.
When thinking about this simulation I was sort of thinking about a "robotic avatar"
as a generator of local events, i.e. flights taking off from a certain aerodrome...
keyboard events, i.e. pressing a button to create a flight instance, was my embrio
of idea.
I got better food for thought (and code snippets to study) from all the very
helpful replies.
Thanks
Bye
Enrico

On 6/13/07, Joshua Gargus <[hidden email]> wrote:

On Jun 12, 2007, at 3:33 PM, Enrico Spinielli wrote:

Hello David,

On 6/10/07, David P. Reed <[hidden email]> wrote:
> The "replicated computation" model takes some getting used to.   A
> "local" file or database is properly thought of as a non-replicated file
> within the replicated computational world.   That means that it can only
> be *directly* accessed by a non-replicated portion of the computation.
> So the way to do this in Croquet is to start a non-replicated activity
> on the machine that has the file or database, and have it communicate
> events that are replicated to all replicated island instances of a
> replicated computation.
>
> That's the answer to (a).
According to 'Island Time' section in Croquet's 'System Overview' [1]
External non-replicated messages are extremely dangerous and must be avoided. They do play a role, but it is extremely rare that anyone will ever have a need to make use of this mechanism. The problem is obviously that if a non-replicated message is executed and happens to modify the state of an Island it breaks the determinism the Island shares with the other replicated copies. We do use such non-replicated message when rendering the contents of an Island, but this is extremely well controlled.
So I have to be extremely careful and probably take inspiration form the code
rendering for local participant: for example CroquetHarness>>setupLocal in the SDK
(where a non-replicated portal and overlay are created to serve the local participant)

[1] Island Time in Croquet's System Overview
    <a href="http://croquetconsortium.org/index.php/System_Overview#Island_Time" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://croquetconsortium.org/index.php/System_Overview#Island_Time


It's only non-replicated messages sent to replicated (on-island) objects that are dangerous.  Non-replicated messages are safely sent outside of the island all the time.  For example, keyboard events  run though quite a bit of Squeak/Morphic code before they result in replicated Croquet events.  As another example, take a look at the webcam code in the SDK.  When a new video frame is grabbed, a replicated message is sent into the island with the contents of the frame (this should be quite similar to noticing that some relevant flight-plan event should occur, and sending the appropriate replicated message); this is perfectly safe.

>
> (b) is straightforward - just create a mapping (any one-to-one and onto
> mapping will do) between simulation time and Croquet time.   Such a
> mapping can be at a relative rate and start time, or even a non-linear
> mapping.   Run the simulation up to the corresponding Croquet time.

This boils down to keep some global simulation counter (simulation time
initialized with island time at the start of the simulation) and use
Croquet time, aka TIsland>>time, doesn't it?

That is one way to do it.  In fact, the mapping between simulation time and Croquet time need not be bijective; for example, it wouldn't be if you wanted to be able to pause or rewind the simulation while still being able to interact in the space.

Josh


Thanks for your reply
Bye
Enrico


>
>
> Enrico Spinielli wrote:
> > Hi all,

> > I am writing a prototypical air traffic simulation application.
> > The sky is partitioned into various entities: airspaces,
> > traffic volumes, ...
> > Aircrafts will follow flight plans.
> > Flight plans are described in 4D (3D + time) thru
> > entities such as: en-route routes, points, flight levels,
> > takeoff time, relative times over (points)...
> >
> > I would like to have
> > 1. Croquet participants (robots, not "human" avatars)
> >    representing different (group of) airports
> >    instantiating flight from a local data source (file, db,...)
> > 2. instantiation should be time driven: a new flight enters
> >    into the simulation at takeoff time as specified in its
> >    flight plan
> > 3. human avatars will be able to ask for relevant aggregated
> >    information (table/graph of flight counts per hour, ...)
> >    for their geographical area of competence (aerodrome,
> >    airspace).
> >
> > Given the above, my questions for Croquet developers/experts are:
> > a. is it really possible to have a participant which creates
> >    new instances based on local machine information (file, db...)?
> >    If not, do I only have the possibility to create instances in a
> >    centralized way?
> > b. is there any possibility to define a reference simulation start
> >    time (at island level?) shared by all participants?
> >    Is it OK for example to do it in (a subclass of)
> >    CroquetParticipant?
> >
> > Any helps/ideas is welcome
> > Thanks in advance
> > Regards
> > Enrico
> >
> >
>


Reply | Threaded
Open this post in threaded view
|

Re: [Q] simulation: robotic avatars and time reference

espin
In reply to this post by Howard Stearns
Hi Howard,

On 6/13/07, Howard Stearns <[hidden email]> wrote:
I think of correct Croquet applications as having two kinds of non-
replicated computation:

I) Things That Don't Matter.  Look but don't touch.  This is how
rendering works. You can do pretty much whatever you want if you
don't actually change anything in the Island.

II) Things That Do Matter.  A system with no input is pretty boring.
The way we inject input into the system is to have non-replicated
computation (e.g., a user interface on one participant) send a
message to an object in the Island. Croquet automatically replicates
that message to all participants.  So my keyboard and mouse are not
replicated, nor are the computation that surrounds them. But this
computation eventually results in one or more replicated messages.

I get your point about  'no input' = 'boring', but even systems with no
input can be interesting...what about books? Or TV (zapping often
the only way to make it interesting!-)? Theater? Soccer match (wouldn't
it be fun being able to go and play with your team?)?...
Contents make them interesting, interaction could potentially make
them more interesting!
But do not take me wrongly, I am actually digressing probably due to
the fact it's time for me to go and sleep!!!!!!!!!!!!!!

Your application is simply replacing the keyboard/mouse computation
with some other set of non-replicated computation that uses a
database.  That is, they're "Things That Do Matter." Inputs.  Croquet
is designed to make this fairly easy to do (e.g., it is a network
architecture that takes care of replicating the to-Island messages
for you).

By contrast, the passage you quoted can be thought of as scaring you
off from trying to do stuff that you think are "Things That Don't
Matter." I don't think that's the case here.

This further clarifies it. Thanks.

I sometimes LOOSELY think of the above as:
    non-replicated stuff producing replicated inputs = OK
    non-replicated output = be careful
    non-replicated side-effects to Island = NEVER

Excellent summary
Thanks again and bye
Enrico

On Jun 12, 2007, at 5:33 PM, Enrico Spinielli wrote:

> Hello David,
>
> On 6/10/07, David P. Reed <[hidden email]> wrote:
> > The "replicated computation" model takes some getting used to.   A
> > "local" file or database is properly thought of as a non-
> replicated file
> > within the replicated computational world.   That means that it
> can only
> > be *directly* accessed by a non-replicated portion of the
> computation.
> > So the way to do this in Croquet is to start a non-replicated
> activity
> > on the machine that has the file or database, and have it
> communicate
> > events that are replicated to all replicated island instances of a
> > replicated computation.
> >
> > That's the answer to (a).
> According to 'Island Time' section in Croquet's 'System Overview' [1]
> External non-replicated messages are extremely dangerous and must
> be avoided. They do play a role, but it is extremely rare that
> anyone will ever have a need to make use of this mechanism. The
> problem is obviously that if a non-replicated message is executed
> and happens to modify the state of an Island it breaks the

> determinism the Island shares with the other replicated copies. We
> do use such non-replicated message when rendering the contents of
> an Island, but this is extremely well controlled.
> So I have to be extremely careful and probably take inspiration
> form the code
> rendering for local participant: for example
> CroquetHarness>>setupLocal in the SDK
> (where a non-replicated portal and overlay are created to serve the
> local participant)
>
> [1] Island Time in Croquet's System Overview
>     http://croquetconsortium.org/index.php/System_Overview#Island_Time
>
> >
> > (b) is straightforward - just create a mapping (any one-to-one
> and onto
> > mapping will do) between simulation time and Croquet time.   Such a
> > mapping can be at a relative rate and start time, or even a non-
> linear
> > mapping.   Run the simulation up to the corresponding Croquet time.
>
> This boils down to keep some global simulation counter (simulation
> time
> initialized with island time at the start of the simulation) and use
> Croquet time, aka TIsland>>time, doesn't it?
>
> Thanks for your reply
> Bye
> Enrico
>
>
> >
> >
> > Enrico Spinielli wrote:
> > > Hi all,
> > > I am writing a prototypical air traffic simulation application.
> > > The sky is partitioned into various entities: airspaces,
> > > traffic volumes, ...
> > > Aircrafts will follow flight plans.
> > > Flight plans are described in 4D (3D + time) thru
> > > entities such as: en-route routes, points, flight levels,
> > > takeoff time, relative times over (points)...
> > >
> > > I would like to have
> > > 1. Croquet participants (robots, not "human" avatars)
> > >    representing different (group of) airports
> > >    instantiating flight from a local data source (file, db,...)
> > > 2. instantiation should be time driven: a new flight enters
> > >    into the simulation at takeoff time as specified in its
> > >    flight plan
> > > 3. human avatars will be able to ask for relevant aggregated
> > >    information (table/graph of flight counts per hour, ...)
> > >    for their geographical area of competence (aerodrome,
> > >    airspace).
> > >
> > > Given the above, my questions for Croquet developers/experts are:
> > > a. is it really possible to have a participant which creates
> > >    new instances based on local machine information (file, db...)?
> > >    If not, do I only have the possibility to create instances in a
> > >    centralized way?
> > > b. is there any possibility to define a reference simulation start
> > >    time (at island level?) shared by all participants?
> > >    Is it OK for example to do it in (a subclass of)
> > >    CroquetParticipant?
> > >
> > > Any helps/ideas is welcome
> > > Thanks in advance
> > > Regards
> > > Enrico
> > >
> > >
> >