前言:
今天,亲爱的peter同学在调试机器人时发现了一个问题(机器人的周围一圈突然多出障碍物时,局部代价地图会形成一圈的代价层,他会导致move_base节点出现报错,就算是障碍物消失后也会如此),所以他希望能在程序(.cpp文件中)判断是否出现此类情况从而做到在程序中杀死move_base进程,再利用launch文件的重生属性做到重启。
实现方式:
废话不多说,直接上干货。经过一系列的头脑风暴和网络人肉爬虫后,找到了这个函数 system();直接起飞。
具体用法如下:
ros::init(argc,argv,"joy");
ros::NodeHandle n;
system("rosnode kill /turtlesim");//杀死小乌龟这个节点
这个""中间对应的就是你终端的命令。就像下图:
运行节点和终端的结果相同,如下:
扩展:
有了这个基础,我感觉在终端可以实现的功能在这个函数里面都能实现一样,如 rostopic list rosrun pkg node 之类常用的命令感觉都可以做到,大家可以试一试哦。