我们正在使用ros并尝试在shell脚本中通过SSH运行节点。 我们有一台控制(主)计算机,我们使用以下行执行脚本:
ssh user@xxx.xxx.x.x -x "/bin/bash -c 'source /etc/profile; rosrun stargazer_alter stargazer_node'"
节点正在启动(它出现在“rosnode列表”中,节点也在“rostopic info”中列为发布者)但主要方法似乎没有被执行(任何打印行都没有显示,也没有任何消息已发表)。
#include "Stargazer_listener.h"
enum STATES {config, readData};
int main(int argc, char** argv) {
ROS_INFO("Test!!!! Stargazer starts!");
ros::init(argc, argv, "stargazer_node");
Stargazer_listener starG;
int iFd = 0;
char *rec_msg = (char*)malloc(BUFFSIZE * sizeof(char));
iFd = starG.portSetup();
STATES STATE = config;
while(ros::ok()) {
switch(STATE) {
case config:
starG.cmd(iFd, rec_msg, "~#CalcStop`");
printf("CalcStop\n");
starG.cmd(iFd, rec_msg, "~#CalcStart`");
printf("CalcStart\n");
STATE = readData;
break;
case readData:
starG.publish_data(iFd, rec_msg);
break;
}
}
free(rec_msg);
return 0;
}
“starG.portSetup()”行打开ttyUSB0端口,其他进程不使用该端口。
stargazer_node正在通过catkin_make进行编译。根据代码,首先应该是以下打印行:“ROS_INFO(”测试!!!! Stargazer启动!“);”。 哪个不会发生!
相同的shell脚本命令与其他节点一起正常工作。如果我们将节点添加到ros“.launch”文件中,则会发生同样的事情。
如果我通过终端(ssh user@xxx.xxx.x.x)中的ssh连接然后运行相同的行(rosrun stargazer_alter stargazer_node),一切正常!