move_base判定是否完成:
1)使用命令rostopic liist | grep move_base
发现话题 /move_base/result ,显然是反馈move_base包执行结果的话题。
2)使用命令rostopic echo /move_base/result
这时候在rviz指定一个goal,仔细观察输出信息,等待机器人运动到点,可以看到status为3时,text为Goal reached,此时move_base正是完成状态。
3)使用命令rostopic info /move_base/result
可以看出数据类型: move_base_msgs/MoveBaseActionResult
4)写C++代码获取状态
#include "ros/ros.h"
#include <move_base_msgs/MoveBaseAction.h>
#include <move_base_msgs/MoveBaseGoal.h>
//获取到达目标的状态
void status_callback(const move_base_msgs::MoveBaseActionResult& msg)
{
if(msg.status.status == 3)
{
std::cout<<"the goal was achieved successfully!"<<std::endl;
}
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "get_movebase_status");
ros::NodeHandle n;
// 订阅话题
ros::Subscriber goal_sub =n.subscribe("move_base/result", 10, status_callback);
ros::spin();
return 0;
}
move_base动态参数调节:
运动参数的设置地址
/move_base/TebLocalPlannerROS/acc_lim_x
/move_base/TebLocalPlannerROS/acc_lim_theta
/move_base/TebLocalPlannerROS/acc_lim_y
/move_base/TebLocalPlannerROS/max_vel_x
/move_base/TebLocalPlannerROS/max_vel_x_backwards
尝试使用rosparam设置参数:
- 使用命令
rosservice info /move_base/TebLocalPlannerROS/set_parameters
,即可知道话题类型为动态参数服务。
- 参数动态设置python代码实现
#!/usr/bin/env python
# coding:utf-8
import rospy
from dynamic_reconfigure.srv import *
from dynamic_reconfigure.msg import *
class SetVelocityScaling(object):
def __init__(self):
self.request = ReconfigureRequest()
self.set_parameters_client = rospy.ServiceProxy('/move_base/TebLocalPlannerROS/set_parameters', Reconfigure)
# 只写了3个参数,其他参数也一样,不过需要看看数据类型是什么
def set_parameters(self):
config_empty = Config()
set_params_temp = DoubleParameter()
set_params_temp.name = 'acc_lim_x'
set_params_temp.value = 0.2
self.request.config.doubles.append(set_params_temp)
set_params_temp = DoubleParameter()
set_params_temp.name = 'max_vel_x_backwards'
set_params_temp.value = 0.5
self.request.config.doubles.append(set_params_temp)
set_params_temp = DoubleParameter()
set_params_temp.name = 'max_vel_x'
set_params_temp.value = 0.2
self.request.config.doubles.append(set_params_temp)
print(self.request.config)
self.set_parameters_client.call(self.request)
self.request.config = config_empty
if __name__ == "__main__":
rospy.init_node('set_move_base_parmas', anonymous = True)
svc = SetVelocityScaling()
svc.set_parameters()
rospy.spin()
move_base取消导航目标
按前面的搜索方法,找到/move_base/cancel
话题,并查看其话题的消息类型
topic type:actionlib_msgs/GoalID
rostopic pub /move_base/cancel (后续tab)
即发空即可取消