I am new to player/stage. But somehow I managed to come up with the below code but is not moving
First the configuration file
driver
(
name "stage"
provides ["simulation:0"]
plugin "stageplugin"
#load the world file
worldfile "robotWorld.world"
)
driver
(
name "stage"
provides [
"position2d:0"
"laser:0"
]
model "robot"
)
The map.inc file
define map model
(
#color of the map
color "black"
#we need a boundary wall aroung the map, then only the robot can't go outside of the map
boundary 1
gui_nose 1
gui_grid 1
gui_movemask 0
gui_outline 0
fiducial_reurn 0
gripper_return 0
)
The robot.inc file
define robots_laser laser
(
# minimum range of the laser
range_min 0.0
#maximum range of the laser
range_max 2
#field of view or pan angle of the camera
#fov 180
#assume the robot's size as 400*200, and the camera is in the front end
pose [200 100 0 0]
开发者_运维知识库 #size of the camera
size [0.025 0.025 0.001]
)
define robot position
(
#size of the robot
size [50 50 50]
#as a default centre of rotation is the geometry centre
#shape of the robot
polygons 1
polygon[0].points 4
polygon[0].point[0] [0 0]
polygon[0].point[1] [1 0]
polygon[0].point[2] [1 1]
polygon[0].point[3] [0 1]
# car steering model
drive "car"
#mass of the robot
mass 10.0
robots_laser()
)
The world file is
include "robot.inc"
include "map.inc"
#size of the simulation
size [15 15]
#interval_sim=5
#interval_real=10
#GUI window
window
(
size [700 700]
scale 2.5
show_data 1
)
map
(
bitmap "map2"
size [300 300 3]
)
robot
(
name "robot"
pose [0 0 0 0]
color "Green"
)
This is the main cpp file (mainCode.cpp)
#include<iostream>
#include<unistd.h>
#include<time.h>
#include<player-3.0/libplayerc++/playerc++.h>
using namespace std;
int main(int argc,char * argv[])
{
using namespace PlayerCc;
cout << "111111111111" << endl ;
PlayerClient robotClient("localhost",6665);
Position2dProxy p2dProxy(&robotClient,0);
LaserProxy laserProxy(&robotClient,0);
p2dProxy.SetMotorEnable(true);
p2dProxy.RequestGeom();
robotClient.Read();
while(true)
{
robotClient.Read();
p2dProxy.SetCarlike(240,0);
cout << laserProxy[45] << endl ;
}
cout << "reached the end of the coding" << endl ;
}
Every thing is fine but the robot is not moving, So In the above code I am getting a constant value as the output. And in the simulation robot is not moving. Anybody, please help me?
External to your controller, Player/Stage is threaded. However, your code must manage it's own resources. So, you need to give up execution time so that other things (like the proxies you've subscribed to) can run.
Add a sleep call at the end of your while loop. This will allows the proxies to update data (both to and from player/stage) so you receive new sensor data and player gets new velocity commands.
精彩评论