ros::Subscriber car_reach_goal = n.subscribe("/arrive_instruction", 10, arrive_Callback); 中的订阅器,订阅话题名称,订阅的消息是什么
时间: 2024-06-07 08:07:41 浏览: 5
在这段代码中,订阅器 `car_reach_goal` 订阅了话题 `/arrive_instruction`,该话题预计会发布一个类型为 `std_msgs::String` 的消息,用于指示小车到达目的地的指令。在 `arrive_Callback` 回调函数中,当订阅器接收到该消息时,会触发回调函数并执行相应的操作。
相关问题
error: expected primary-expression before ‘:’ token ros : :Subscriber lidar_sub = n.subscribe("/scan",10,&LidarCallBack);
这个错误是因为你在定义 `ros::Subscriber` 对象时,使用了冒号 `:`,但是在这个上下文中,冒号是不合法的符号。
请检查一下你的代码,确认在这一行或者之前的某个地方是否有语法错误,可能是拼写错误、缺少分号等问题。另外,也可以确认一下你是否正确地包含了所需的头文件和命名空间。
如果还有问题,请提供更多的上下文代码和错误信息,以便我更好地帮助你解决问题。
int main(int argc, char** argv) { std::string logs_path = "/home/sage/logs/"; std::string folder1_name = logs_path + get_current_time_M_10(); create_folder(folder1_name); ros::init(argc, argv, "log_fetch"); ros::NodeHandle nh; ros::Subscriber sub = nh.subscribe("/rosout", 1000, callback); //ros::Timer timer1 = nh.createTimer(ros::Duration(600), new_folder_callback); //std::this_thread::sleep_for(std::chrono::seconds(1)); //ros::spin(); bool s=true; while(s){ auto now1 = std::chrono::system_clock::now(); std::time_t now_c1 = std::chrono::system_clock::to_time_t(now1); std::tm parts1 = *std::localtime(&now_c1); if (parts1.tm_min % 10 == 0) { std::string folder_name = logs_path + get_current_time(); create_folder(folder_name); s=false; } } ros::Timer timer1 = nh.createTimer(ros::Duration(600), new_folder_callback); ros::spin(); return 0; }如何修改代码能使程序不发生阻塞
可以将程序中的循环改为使用定时器来触发创建文件夹的操作,这样就不会发生阻塞。具体做法是:注释掉 while 循环部分,取消注释定时器相关的代码,并修改定时器回调函数 new_folder_callback(),使其创建文件夹的操作与原来的 while 循环中的代码一致。修改后的代码如下:
```c++
int main(int argc, char** argv) {
std::string logs_path = "/home/sage/logs/";
std::string folder1_name = logs_path + get_current_time_M_10();
create_folder(folder1_name);
ros::init(argc, argv, "log_fetch");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe("/rosout", 1000, callback);
ros::Timer timer1 = nh.createTimer(ros::Duration(600), new_folder_callback);
ros::spin();
return 0;
}
void new_folder_callback(const ros::TimerEvent&){
std::string folder_name = logs_path + get_current_time();
create_folder(folder_name);
}
```
其中,new_folder_callback() 函数是定时器回调函数,在代码中使用 ros::Timer 创建了一个定时器,每隔 600 秒就会触发一次 new_folder_callback() 函数。这样,定时器将会代替原来的 while 循环,不会发生阻塞。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)