同时定位与制图-SlamGMapping

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: 同时定位与制图-SlamGMapping

机器人如小车如果需要在一个陌生的环境中导航,一个首要的前提就是得由一个地图。这个地图就需要小车利用自己的传感器来制作,这儿一般使用里程计和激光雷达,依赖一定的算法就可以完成。这儿以同时定位与制图-SlamGMapping为例解读。
继续阅读“同时定位与制图-SlamGMapping”本作品采用知识共享署名 4.0 国际许可协议进行许可。

局部规划器-TebLocalPlannerROS

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: 局部规划器-TebLocalPlannerROS

由于Teb算法能很好的支持阿克曼小车,即模型类似于汽车一样的机器人,这儿使用TebLocalPlannerROS进行局部规划。Teb局部规划器包(teb_local_planner)是作为一个局部规划器(base_local_planner)插件的形式融入2D导航栈的。它基于时间的弹性算法来优化局部轨迹,满足:轨迹的时间尽量短即速度和加速度尽量大;和障碍物能明显分离;以及必须满足机器人动力学约束。



在Move Base初始化中通过参数指定base_local_planner为teb_local_planner/TebLocalPlannerROS

//默认的局部规划器为TrajectoryPlannerROS
    private_nh.param("base_local_planner", local_planner, std::string("base_local_planner/TrajectoryPlannerROS"));
 
    //create a local planner
    try {
      tc_ = blp_loader_.createInstance(local_planner);
      ROS_INFO("Created local_planner %s", local_planner.c_str());
//初始化局部规划器
      tc_->initialize(blp_loader_.getName(local_planner), &tf_, controller_costmap_ros_);
    } catch (const pluginlib::PluginlibException& ex) {
      ROS_FATAL("Failed to create the %s planner, are you sure it is properly registered and that the containing library is built? Exception: %s", local_planner.c_str(), ex.what());
      exit(1);
    }

Move Base中通过调用tc_->computeVelocityCommands(cmd_vel)完成速度命令计算。
继续阅读“局部规划器-TebLocalPlannerROS”本作品采用知识共享署名 4.0 国际许可协议进行许可。

全局规划器-NavfnROS

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: 全局规划器-NavfnROS

机器人导航路径的规划可以分为两种:全局规划和局部规划。对事先已经知道的静态信息进行的规划为全局规划,如根据高清地图进行的规划,全局规划器就如同平时生活中的地图导航一样,这是一个大尺度的规划。基于传感器信息进行的机器人控制为局部路径规划,这是一个小尺度的规划。大范围内的静态信息不易改变,只需要定期更新高清地图就可以保证规划有效性。局部范围的动态信息则需要摄像头,激光雷达等设备及时回馈,变化频繁。



本文介绍ROS的全局规划器:NavfnROS,其默认调用Dijkstra算法进行路径生成。

调用路径

在Move Base中有全局规划器的如下调用,完成了全局规划器的实例化:

    try {
      planner_ = bgp_loader_.createInstance(global_planner);
      planner_->initialize(bgp_loader_.getName(global_planner), planner_costmap_ros_);
    } catch (const pluginlib::PluginlibException& ex) {
      ROS_FATAL("Failed to create the %s planner, are you sure it is properly registered and that the containing library is built? Exception: %s", global_planner.c_str(), ex.what());
      exit(1);
    }

继续阅读“全局规划器-NavfnROS”本作品采用知识共享署名 4.0 国际许可协议进行许可。

ROS导航-MoveBase

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: ROS导航-MoveBase

MoveBase包通过全局规划器和局部规划器,利用代价地图costmap来实现当前地点到目标地点的导航。其中,costmap由map和小车传感器共同决定。现在通过对其的源码解读来了解这个框架是怎么完成这个任务的。


1 调用流程

–> MoveBase Node创建:MoveBase::MoveBase(tf2_ros::Buffer& tf)
–> Action server(as_)接收导航目标:void MoveBase::executeCb(const move_base_msgs::MoveBaseGoalConstPtr& move_base_goal)
–> runPlanner_值改变为true,导航线程void MoveBase::planThread()开始调用全局规划器planner_规划全局路径bool MoveBase::makePlan(const geometry_msgs::PoseStamped& goal, std::vector& plan)
–> 一旦进入到控制状态CONTROLLING,MoveBase::executeCycle负责调用局部规划器tc_进行局部导航控制
继续阅读“ROS导航-MoveBase”
本作品采用知识共享署名 4.0 国际许可协议进行许可。