Re: [ns] How to get the Nodes' coordinate from TCL to C++

2009-01-30 Thread Mathiew Moussa

Hi Samira,

I had the same question and i got the following reply from Mr. Keven  
Sheth that turned out to be useful. What he answered specifically is  
how to calculate the distances between to nodes, which uses the  
coordinates of the nodes by accessing them from struct mb_node in file  
God.cc (in ./mobile). After retrieving the nodes coordinates i think  
it becomes an easy task to pass them to the MAC layer.

I also found the same solution that Keven proposed at this link:
http://www.cse.msu.edu/~wangbo1/ns2/nshowto2.html

Below i will paste Keven's original reply. I hope it turns out useful.

Cheers,
Mathiew

KEVIN'S REPLY
Hi Mathiew

I needed to the same in my project.
what I did is used god object.
you can study  and you can do many more things using it .
here I am just describing what I did:

I added following function in ns-2.33/mobile/god.cc (you will need to  
add declaration in god.h)

double God::getdistance(int i,int k)

{

double x1=mb_node[i]-X();

double y1=mb_node[i]-Y();

double x2=mb_node[k]-X();

double y2=mb_node[k]-Y();

double distance;

distance=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));

return distance;

}
then I was able to get distance between two nodes by writing following  
code in c++


God::instance()-getdistance(i,k);  // i and k are the id of the nodes

you will also need to include following statements in your .tcl file

1 after creating topography

set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)

set god_ [create-god $val(nn)]

2. when you are dynamically creating nodes

for { set i 0 } { $i  $val(nn) } { incr i } {
 set node_($i) [$ns_ node $i]
 $node_($i) random-motion 0 ;# disable random motion
 $god_ new_node $node_($i)
}

following is a function of my agent for your reference:

void Manetconf::neighbors(int i)
{
  int nodes=God::instance()-nodes();
  coutneighbors of node i:endl;
  for(int k=0;knodes;k++)
  {
   if(k!=i)
   {
if(God::instance()-IsNeighbor(i,k))
 coutk:God::instance()-getdistance(i,k) yesendl;
else
 coutk:God::instance()-getdistance(i,k) noendl;
   }
  }
  coutendl;
}

---










Quoting samyar@gmail.com:

 hi Mathiew

 I have exactly same as your problem. I want to send node coordinate   
 or position to MAC layer and amke some desicion base on this   
 information. can i ask you which routing and MAC do you use?
 anyway i think we have tosend this information through routing layer  
  and not bye TCL.
 my email: samyar@gmail.com

 and my name is SAMIRA .

 thanks a lot







Re: [ns] How to get the Nodes' coordinate from TCL to C++

2009-01-28 Thread Mathiew Moussa

Hello Kavan,

Thanks alot for the reply.
I haven't tried it yet because of a complication with NS2 (it aint  
cleaning any of the .o files). Ill try it soon.

One question, in God::IsNeighbor function, a constant called RANGE is  
used do have any idea where it is being defined !?

Thanks alot,
Mathiew :D




Quoting kavan sheth shethka...@gmail.com:

  Hi Mathiew

 I needed to the same in my project.
 what I did is used god object.
 you can study  and you can do many more things using it .
 here I am just describing what I did:

 I added following function in ns-2.33/mobile/god.cc (you will need to add
 declaration in god.h)

 double God::getdistance(int i,int k)

 {

 double x1=mb_node[i]-X();

 double y1=mb_node[i]-Y();

 double x2=mb_node[k]-X();

 double y2=mb_node[k]-Y();

 double distance;

 distance=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));

 return distance;

 }
 then I was able to get distance between two nodes by writing following code
 in c++


 *God::instance()-getdistance(i,k);  // i and k are the id of the nodes*

 you will also need to include following statements in your .tcl file

 1 after creating topography

 set topo [new Topography]
 $topo load_flatgrid $val(x) $val(y)

 *set god_ [create-god $val(nn)]*

 2. when you are dynamically creating nodes

 for { set i 0 } { $i  $val(nn) } { incr i } {
 set node_($i) [$ns_ node $i]
 $node_($i) random-motion 0 ;# disable random motion
 *$god_ new_node $node_($i)
 *}

 following is a function of my agent for your reference:

 void Manetconf::neighbors(int i)
 {
  int nodes=God::instance()-nodes();
  coutneighbors of node i:endl;
  for(int k=0;knodes;k++)
  {
   if(k!=i)
   {
if(God::instance()-IsNeighbor(i,k))
 coutk:God::instance()-getdistance(i,k) yesendl;
else
 coutk:God::instance()-getdistance(i,k) noendl;
   }
  }
  coutendl;
 }





 cheers

 Kavan

 On Mon, Jan 26, 2009 at 1:28 PM, Mathiew Moussa mm...@aub.edu.lb wrote:



 Hello Walid,

 Thanks for replying.
 Here's the deal : im trying to simulate a WSN with nodes that are not
 mobile.
 In a topology.tcl file i have the nodes coordinates stored in the
 following form:

 $node_(0) set X_ 60
 $node_(0) set Y_ 0
 $node_(0) set Z_ 0
 $node_(1) set X_ 92
 $node_(1) set Y_ 43
 $node_(1) set Z_ 0 ...

 Although i have these coordinates in the tcl files i still need to
 access them in C++, the reason is because i wanted to find distances
 between nodes as well as whether some nodes lied in the range of other
 (so its a couple of loops in C++)

 so id need something that look like this:

 for(i=0 ; inumbNodes; i++)
   for (j=0 ; jnumNodes; j++)
  if(nodes[i].x == nodes[j].x) //just a stupid example
  (...)

 My algorithm is centralized at the base station.. over there i have
 the freedom to access the coordinates of the nodes from topology.tcl,
 the question is how ?

 I hope this is enough.
 Thanks again.
 Mathiew




 Quoting Waleed Tuffaha tuff...@gmail.com:
  Hello Mathiew,
 
  Sorry for the late reply. I guess it would be best if you can explain a
  little what you are trying to do. Is every node trying to find its
  coordinates only ?
 
  On Thu, Jan 22, 2009 at 11:48 AM, Mathiew Moussa mm...@aub.edu.lb
 wrote:
 
  Hello Walid,
 
  Thanks for the reply.
 
  You said getting the coordinates from the TCL file easier... i have them
  stored in a topography.tcl file (or so i recall) that has the X Y Z
  coordinates of each sensor.
 
  So what's the way to get them from the TCL file directly to be used in
 C++
  ??
 
  Thanks alot,
  Mathiew
 
 
 
 
  Quoting Waleed Tuffaha tuff...@gmail.com:
 
   Hello Mathiew,
 
  ( Note that I didn't test this ! )
 
  The Node class uses a Location class in which the X,Y,Z variables
 are
  defined. The mobilenode class inherits from the node class.
 
  So, if node_ is a pointer to a mobilenode, then you should be able to
 get
  the coordinates using:
  int x,y,z;
  node_-location_-getLocation(x, y, z)
 
  So if you have an array containing pointers to all the nodes then you
 can
  loop on the array and get the coordinates for each node.
 
  I think that getting the coordinates from Tcl is easier, but I don't
 know
  what exactly you are doing.
 
  Hope this helps
  -- Waleed
 
  On Thu, Jan 22, 2009 at 9:59 AM, Mathiew Moussa mm...@aub.edu.lb
 wrote:
 
 
  Dear NS Users,
 
  Can someone please tell me how you can retrieve the coordinates of the
  network nodes from a TCL file into C++.
  So is their some loop or something that can be written in C++ and
  traverses all the nodes and gets X, Y,  Z, and how is it written.
 
 
  Hope you can help me.
  Thanks,
  Mathiew
 
 
 
 
 
 
 
 
 
  --
  Waleed Tuffaha.
 












Re: [ns] How to get the Nodes' coordinate from TCL to C++

2009-01-26 Thread Mathiew Moussa


Hello Walid,

Thanks for replying.
Here's the deal : im trying to simulate a WSN with nodes that are not mobile.
In a topology.tcl file i have the nodes coordinates stored in the  
following form:

$node_(0) set X_ 60
$node_(0) set Y_ 0
$node_(0) set Z_ 0
$node_(1) set X_ 92
$node_(1) set Y_ 43
$node_(1) set Z_ 0 ...

Although i have these coordinates in the tcl files i still need to  
access them in C++, the reason is because i wanted to find distances  
between nodes as well as whether some nodes lied in the range of other  
(so its a couple of loops in C++)

so id need something that look like this:

for(i=0 ; inumbNodes; i++)
   for (j=0 ; jnumNodes; j++)
  if(nodes[i].x == nodes[j].x) //just a stupid example
  (...)

My algorithm is centralized at the base station.. over there i have  
the freedom to access the coordinates of the nodes from topology.tcl,  
the question is how ?

I hope this is enough.
Thanks again.
Mathiew




Quoting Waleed Tuffaha tuff...@gmail.com:
 Hello Mathiew,

 Sorry for the late reply. I guess it would be best if you can explain a
 little what you are trying to do. Is every node trying to find its
 coordinates only ?

 On Thu, Jan 22, 2009 at 11:48 AM, Mathiew Moussa mm...@aub.edu.lb wrote:

 Hello Walid,

 Thanks for the reply.

 You said getting the coordinates from the TCL file easier... i have them
 stored in a topography.tcl file (or so i recall) that has the X Y Z
 coordinates of each sensor.

 So what's the way to get them from the TCL file directly to be used in C++
 ??

 Thanks alot,
 Mathiew




 Quoting Waleed Tuffaha tuff...@gmail.com:

  Hello Mathiew,

 ( Note that I didn't test this ! )

 The Node class uses a Location class in which the X,Y,Z variables are
 defined. The mobilenode class inherits from the node class.

 So, if node_ is a pointer to a mobilenode, then you should be able to get
 the coordinates using:
 int x,y,z;
 node_-location_-getLocation(x, y, z)

 So if you have an array containing pointers to all the nodes then you can
 loop on the array and get the coordinates for each node.

 I think that getting the coordinates from Tcl is easier, but I don't know
 what exactly you are doing.

 Hope this helps
 -- Waleed

 On Thu, Jan 22, 2009 at 9:59 AM, Mathiew Moussa mm...@aub.edu.lb wrote:


 Dear NS Users,

 Can someone please tell me how you can retrieve the coordinates of the
 network nodes from a TCL file into C++.
 So is their some loop or something that can be written in C++ and
 traverses all the nodes and gets X, Y,  Z, and how is it written.


 Hope you can help me.
 Thanks,
 Mathiew









 --
 Waleed Tuffaha.







[ns] How to get the Nodes' coordinate from TCL to C++

2009-01-22 Thread Mathiew Moussa

Dear NS Users,

Can someone please tell me how you can retrieve the coordinates of the
network nodes from a TCL file into C++.
So is their some loop or something that can be written in C++ and
traverses all the nodes and gets X, Y,  Z, and how is it written.


Hope you can help me.
Thanks,
Mathiew



Re: [ns] How to get the Nodes' coordinate from TCL to C++

2009-01-22 Thread Mathiew Moussa

Hello Walid,

Thanks for the reply.

You said getting the coordinates from the TCL file easier... i have  
them stored in a topography.tcl file (or so i recall) that has the X Y  
Z coordinates of each sensor.

So what's the way to get them from the TCL file directly to be used in C++ ??

Thanks alot,
Mathiew



Quoting Waleed Tuffaha tuff...@gmail.com:

 Hello Mathiew,

 ( Note that I didn't test this ! )

 The Node class uses a Location class in which the X,Y,Z variables are
 defined. The mobilenode class inherits from the node class.

 So, if node_ is a pointer to a mobilenode, then you should be able to get
 the coordinates using:
 int x,y,z;
 node_-location_-getLocation(x, y, z)

 So if you have an array containing pointers to all the nodes then you can
 loop on the array and get the coordinates for each node.

 I think that getting the coordinates from Tcl is easier, but I don't know
 what exactly you are doing.

 Hope this helps
 -- Waleed

 On Thu, Jan 22, 2009 at 9:59 AM, Mathiew Moussa mm...@aub.edu.lb wrote:


 Dear NS Users,

 Can someone please tell me how you can retrieve the coordinates of the
 network nodes from a TCL file into C++.
 So is their some loop or something that can be written in C++ and
 traverses all the nodes and gets X, Y,  Z, and how is it written.


 Hope you can help me.
 Thanks,
 Mathiew