ROS机器人 - movebase包参数设置、状态获取等

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正是完成状态。
ROS机器人 - movebase包参数设置、状态获取等_第1张图片
3)使用命令rostopic info /move_base/result
可以看出数据类型: move_base_msgs/MoveBaseActionResult

ROS机器人 - movebase包参数设置、状态获取等_第2张图片
4)写C++代码获取状态

#include "ros/ros.h"
#include 
#include 
 
  //获取到达目标的状态
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设置参数:
ROS机器人 - movebase包参数设置、状态获取等_第3张图片
图片

  • 使用命令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)
即发空即可取消

你可能感兴趣的:(ROS)