Могу ли я вызвать ROS ros::init() в драйвере проигрывателя (Player/Stage)?

Я пытаюсь написать драйвер проигрывателя, который будет публиковать сообщения в ROS.

Драйвер проигрывателя не создает исполняемый файл, поэтому я не уверен, как вызвать инициализацию ROS в драйвере проигрывателя.

Основная функция драйвера плеера выглядит так...

void PlayerDriver::Main() 
{

int argc; // Player Main() method does not take argument 
char **argv; // What to do with argc and argv??

geometry_msgs::Point commandInput;
ros::init(argc, argv, "Command");

ros::NodeHandle n;
ros::Publisher command_pub = n.advertise<geometry_msgs::Point>("servocommand", 1000);
ros::Rate loop_rate(1);

while (ros::ok())
{


ros::spinOnce();   

ProcessMessages();

//Do some stuff
commandInput.x = globalVel.v;
commandInput.y = globalVel.w;
commandInput.z = 0.0;
command_pub.publish(commandInput);

//Do some stuff

loop_rate.sleep();
}

}

Драйвер Player компилирует и создает общую библиотеку, и у меня есть файл cfg. Он вызывается "player playerdriver.cfg" и работает нормально, подключается к Player Client, но не публикует сообщения в ROS.

Поскольку метод Player Main() не принимает аргументов, я считаю, что здесь я делаю некоторую ошибку. Любые предложения приветствуются.


person sks    schedule 24.07.2012    source источник


Ответы (1)


Посмотрите здесь ссылка. А также пройдите руководство Publisher/Subscriber от ROS. Вы можете начать здесь с исследования -> Пример издателя .

person alap    schedule 17.10.2013