move_base status话题
source link: https://charon-cheung.github.io/2023/10/24/%E8%B7%AF%E5%BE%84%E8%A7%84%E5%88%92/move_base%20%E5%88%86%E6%9E%90/move_base%20status%E8%AF%9D%E9%A2%98/#%E9%97%AE%E9%A2%98
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
move_base status话题
move_base/status
话题堪称调试利器,有必要专门分析一下。尤其goal_id
中的id
可以表示move_base
的客户端是什么,status
和text
表示导航状态
同类的move_base/result
只能在导航最终结束时,发布一个消息,成功或失败,使用价值不大,不分析了。 另一个move_base/feedback
和status
类似,但text
部分不能表现导航的最终状态。
move_base/status
话题不在常用的move_base
源码里,而是在actionlib
的服务端代码action_server_imp.h
的ActionServer<ActionSpec>::initialize()
status_pub_ =
node_.advertise<actionlib_msgs::GoalStatusArray>("status",
static_cast<uint32_t>(pub_queue_size), true);
// read the frequency with which to publish status from the parameter server
// if not specified locally explicitly, use search param to find actionlib_status_frequency
double status_frequency, status_list_timeout;
if (!node_.getParam("status_frequency", status_frequency) )
{
std::string status_frequency_param_name;
if (!node_.searchParam("actionlib_status_frequency", status_frequency_param_name) )
{
status_frequency = 5.0;
}
else
{
node_.param(status_frequency_param_name, status_frequency, 5.0);
}
}
else
{
ROS_WARN_NAMED("actionlib",
"You're using the deprecated status_frequency parameter, please switch to actionlib_status_frequency.");
}
node_.param("status_list_timeout", status_list_timeout, 5.0);
this->status_list_timeout_ = ros::Duration(status_list_timeout);
if (status_frequency > 0)
{
status_timer_ = node_.createTimer(ros::Duration(1.0 / status_frequency),
boost::bind(&ActionServer::publishStatus, this, boost::placeholders::_1));
}
看来是通过ros的Timer
轮转地发布信息。
话题的默认频率是5hz,如果要修改,可以添加 move_base
的参数actionlib_status_frequency
,因为代码里没有默认设置这个参数。比如actionlib_status_frequency: 10
导航时观察move_base/status
,发现如下结果
header:
seq: 82
stamp:
secs: 379
nsecs: 572000000
frame_id: ''
status_list:
-
goal_id:
stamp:
secs: 376
nsecs: 346000000
id: "Rviz383"
status: 1
text: "This goal has been accepted by the simple action server"
---
header:
seq: 0
stamp:
secs: 381
nsecs: 731000000
frame_id: ''
status_list: []
从Rviz发目标点,突然消息全重置了(除了时间戳),连seq
也为0了,原因只有一个: move_base
重启了,显然是出错了。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK