0

我是玩家/舞台的新手。但不知何故,我设法想出了下面的代码,但没有动

首先是配置文件

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"
)

map.inc 文件

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
)

机器人.inc 文件

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()  
)

世界档案是

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"
)

这是主 cpp 文件 (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 ;
}

一切都很好,但机器人没有移动,所以在上面的代码中,我得到一个常量值作为输出。并且在仿真中机器人是不动的。任何人,请帮助我?

4

1 回答 1

0

在您的控制器外部,Player/Stage 是线程化的。但是,您的代码必须管理它自己的资源。因此,您需要放弃执行时间,以便其他东西(例如您订阅的代理)可以运行。

在 while 循环的末尾添加一个睡眠调用。这将允许代理更新数据(往返玩家/舞台),以便您接收新的传感器数据并且玩家获得新的速度命令。

于 2013-04-15T22:22:40.973 回答