我可以在播放器(玩家/舞台)驱动程序中调用 ROS "ros::init(...)"吗?



我正在尝试编写一个将在ROS上发布消息的Player驱动程序。

播放器驱动程序不会创建可执行文件,因此我不知道如何在播放器驱动程序中调用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();
}
}

播放器驱动程序编译并创建一个共享库,我有一个cfg文件。它由"player playerdriver.cfg"调用,运行良好,连接到玩家客户端,但不在ROS上发布消息。

由于Player Main()方法不接受参数,我相信这就是我犯错误的地方。欢迎提出任何建议。

查看此处链接。还可以从ROS学习发布者/订阅者教程。您可以从这里开始研究->示例发布者。

选项1:(推荐)您可以通过构造函数传递argcargv值。

选项2:你可以试试这个:

int argc = 0;
char **argv = NULL;
ros::init(argc, argv, "node_name");

注意:ROS使用argc&argv从命令行解析重新映射的参数。

最新更新