【体验内容】

一、全局规划:Astar算法

检查点1】在上次gmapping实验课中构建的地图上,使用astar规划一条路径。

在工作空间的src目录下,下载astar算法功能包并编译

git  clone  https://gitee.com/massif_li/astar
cd ..
catkin_make

修改launch文件中的yaml地图文件地址,运行launch文件

roslaunch astar astar.launch

在显示出来的rviz界面中可以看到设置的地图文件,分辨点击2D Pose Estimate2D Nav Goal,即可在地图中设置起始位姿和目标位姿,可以看到astar程序为我们规划一条路径。

使用rqt_graph查看此时运行的节点,将左上角的选项从Nodes only改为Nodes/Topics (all),可以看到astar节点接受起始点位姿地图,生成导航路径和覆盖在原地图上的路径图像蒙版

其中这几个话题的消息类型:
/initialpose —— geometry_msgs/PoseWithCovarianceStamped(带协方差标志的位姿)
/move_base_simple/goal —— geometry_msgs/PoseStamped(位姿)
/map —— nav_msgs/OccupancyGrid(占用栅格)
/nav_path —— nav_msgs/Path(路径,由一个标准头和一组位姿组成)
/mask —— nav_msgs/OccupancyGrid(占用栅格)

二、Turtlebot定位与导航

检查点2】完成蒙特卡洛定位(即使得位姿粒子群在运动控制下获得收敛的效果)。

在工作空间的src目录下,下载以下功能包并编译(这是用户与turtlebot进行交互的功能包,后面会使用其中的turtlebot_rviz_launchers显示蒙特卡洛定位过程与效果)

git  clone  https://gitee.com/massif_li/turtlebot_interactions.git
cd ..
catkin_make

turtlebot_ws/ src / turtlebot_apps / turtlebot_navigation / launch / includes / amcl目录下创建rplidar_amcl.launch.xml文件,代码如下:

rplidar_amcl.launch.xml

<launch><arg name="use_map_topic"   default="false"/><arg name="scan_topic"      default="scan"/> <arg name="initial_pose_x"  default="0.0"/><arg name="initial_pose_y"  default="0.0"/><arg name="initial_pose_a"  default="0.0"/><arg name="odom_frame_id"   default="odom"/><arg name="base_frame_id"   default="base_footprint"/><arg name="global_frame_id" default="map"/><node pkg="amcl" type="amcl" name="amcl"><param name="use_map_topic"             value="$(arg use_map_topic)"/><!-- Publish scans from best pose at a max of 10 Hz --><param name="odom_model_type"           value="diff"/><param name="odom_alpha5"               value="0.1"/><param name="gui_publish_rate"          value="10.0"/><param name="laser_max_beams"             value="60"/><param name="laser_max_range"           value="12.0"/><param name="min_particles"             value="500"/><param name="max_particles"             value="2000"/><param name="kld_err"                   value="0.05"/><param name="kld_z"                     value="0.99"/><param name="odom_alpha1"               value="0.2"/><param name="odom_alpha2"               value="0.2"/><!-- translation std dev, m --><param name="odom_alpha3"               value="0.2"/><param name="odom_alpha4"               value="0.2"/><param name="laser_z_hit"               value="0.5"/><param name="laser_z_short"             value="0.05"/><param name="laser_z_max"               value="0.05"/><param name="laser_z_rand"              value="0.5"/><param name="laser_sigma_hit"           value="0.2"/><param name="laser_lambda_short"        value="0.1"/><param name="laser_model_type"          value="likelihood_field"/><!-- <param name="laser_model_type" value="beam"/> --><param name="laser_likelihood_max_dist" value="2.0"/><param name="update_min_d"              value="0.25"/><param name="update_min_a"              value="0.2"/><param name="odom_frame_id"             value="$(arg odom_frame_id)"/> <param name="base_frame_id"             value="$(arg base_frame_id)"/> <param name="global_frame_id"           value="$(arg global_frame_id)"/><param name="resample_interval"         value="1"/><!-- Increase tolerance because the computer can get quite busy --><param name="transform_tolerance"       value="1.0"/><param name="recovery_alpha_slow"       value="0.0"/><param name="recovery_alpha_fast"       value="0.0"/><param name="initial_pose_x"            value="$(arg initial_pose_x)"/><param name="initial_pose_y"            value="$(arg initial_pose_y)"/><param name="initial_pose_a"            value="$(arg initial_pose_a)"/><remap from="scan"                      to="$(arg scan_topic)"/></node>
</launch>

turtlebot_ws/src/turtlebot_app/turtlebot_navigation/param目录新建rplidar_costmap_params.yaml文件,

rplidar_costmap_params.yaml

global_costmap:robot_radius: 0.20obstacle_layer:scan:data_type: LaserScantopic: scanmarking: trueclearing: truemin_obstacle_height: 0.05max_obstacle_height: 0.35local_costmap:robot_radius: 0.18obstacle_layer:scan:data_type: LaserScantopic: scanmarking: trueclearing: truemin_obstacle_height: 0.05max_obstacle_height: 0.35

turtlebot_ws/src/turtlebot_app/turtlebot_navigation/launch目录下创建rplidar_amcl_demo.launch文件,代码如下:

rplidar_amcl_demo.launch

<launch><!-- 2D sensor --><arg name="2D_laser" default="rplidar"/><include file="$(find rplidar_ros)/launch/rplidar.launch"></include><!-- Map server --><arg name="map_file" default="/home/lijian/Documents/turtlebot_ws/map/rplidar_gmapping.yaml"/><node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" /><!-- AMCL --><arg name="custom_amcl_launch_file" default="$(find turtlebot_navigation)/launch/includes/amcl/$(arg 2D_laser)_amcl.launch.xml"/><arg name="initial_pose_x" default="0.0"/> <!-- Use 17.0 for willow's map in simulation --><arg name="initial_pose_y" default="0.0"/> <!-- Use 17.0 for willow's map in simulation --><arg name="initial_pose_a" default="0.0"/><include file="$(arg custom_amcl_launch_file)"><arg name="initial_pose_x" value="$(arg initial_pose_x)"/><arg name="initial_pose_y" value="$(arg initial_pose_y)"/><arg name="initial_pose_a" value="$(arg initial_pose_a)"/></include><!-- Move base --><arg name="custom_param_file" default="$(find turtlebot_navigation)/param/$(arg 2D_laser)_costmap_params.yaml"/><include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"><arg name="custom_param_file" value="$(arg custom_param_file)"/></include></launch>

编译

catkin_make

替换好rplidar_amcl_demo.launch中的地图信息

roslaunch turtlebot_navigation rplidar_amcl_demo.launch
roslaunch turtlebot_rviz_launchers view_navigation.launch

指定

三、全局与局部规划理解

【不检查】点击“2D Nav Goal”,指定目标点,对完成定位的turtlebot进行运动规划,自行了解全局规划和局部规划的区别。

【作业内容】

四、C++编写栅格地图(可课后完成)

用C++编写一个 m×nm\times nm×n 个格子的栅格地图,并绘制图案,如棋盘格、文字等。复杂图案、彩图、动态图可加分。

实现思路:了解 nav_msgs/OccupancyGrid 消息的数据结构,编写话题发布程序持续发出该类型话题,可以使用 rviz 查看发出的栅格图样。

范例:

#include "ros/ros.h"
#include <iostream>
#include "std_msgs/Float32.h"
#include "nav_msgs/OccupancyGrid.h"/* /map话题的消息类型为nav_msgs/OccupancyGrid 具体的数据结构为std_msgs/Header headeruint32 seqtime stampstring frame_id
nav_msgs/MapMetaData infotime map_load_timefloat32 resolutionuint32 widthuint32 heightgeometry_msgs/Pose origingeometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w
int8[] data*/using namespace std;int main(int argc, char **argv)
{// 初始化节点ros::init(argc,argv,"mapnode");ros::NodeHandle n;ros::Publisher mappub = n.advertise<nav_msgs::OccupancyGrid>("map",1,true);ros::Publisher intpub = n.advertise<std_msgs::Float32>("number",1,true);nav_msgs::OccupancyGrid rosMap;rosMap.info.resolution = 1.0;rosMap.info.width = 20;rosMap.info.height = 10;rosMap.info.origin.position.x = 0.0;rosMap.info.origin.position.y = 0.0;rosMap.info.origin.position.z = 0.0;rosMap.info.origin.orientation.x = 0.0;rosMap.info.origin.orientation.y = 0.0;rosMap.info.origin.orientation.z = 0.0;rosMap.info.origin.orientation.w = 1.0;rosMap.data.resize(rosMap.info.width * rosMap.info.height);int count = 0;for(int i = 0;i < rosMap.info.width * rosMap.info.height; i++){rosMap.data[i] = count++;}rosMap.header.stamp = ros::Time::now();rosMap.header.frame_id = "map";mappub.publish(rosMap);std_msgs::Float32 mynumber;mynumber.data = 2.3;while(1){// intpub.publish(mynumber);mappub.publish(rosMap);cout << "Hello" << endl;}
}

实验四 定位与导航算法相关推荐

  1. 实验四 查找和排序算法实现

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼418A) 学院 计算机科学与网络工程学院 实验课程 数据结构实验 实验项目 实验四 查找和排序算法实现 一.实验目的: 1.各种排序算法 ...

  2. 人工智能导论实验四:深度学习算法及应用

    实验四:深度学习算法及应用 一.实验目的 1.了解深度学习的基本原理: 2.能够使用深度学习开源工具: 3.应用深度学习算法求解实际问题. 二.实验要求 1.解释深度学习原理: 2.对实验性能进行分析 ...

  3. 实验四 图的遍历算法设计与实现

    一.实验名称:图的遍历算法设计与实现 二.实验目的: 1.掌握图的深度优先遍历的算法. 2.掌握图的广度优先遍历的算法. 3.实验章节:算法设计与分析 第四章 三.实验内容.实验问题和程序运行结果 第 ...

  4. 南京邮电大学数据结构实验四(各种排序算法)

    南邮数据结构实验报告四----各种排序算法 一.各类算法 (一)简单选择排序 (二)直接插入排序 (三)冒泡排序 (四)快速排序 (五)两路合并排序 (六)堆排序 二.全部排序整合+时间测试 三.算法 ...

  5. 大数据 | 实验四:并行化数据挖掘算法设计

    文章目录

  6. 广州大学数据结构实验四

    实验四 查找和排序算法实现 开课实验室:计算机科学与工程实验(电子楼)       2020年12月31日 学院 计算机科学与网络工程学院 年级.专业.班 网络工程194 姓名 jwt 学号 实验课程 ...

  7. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. 九天创新智能科技有限公司诚招--SLAM/规划/控制/感知/定位/导航算法工程师

    公司团队:海归高层次人才团队创办,拥有国际领先的全栈式动驾驶核心技术.创始团队来自新加坡国立大学.新加坡南洋理工大学.中国科学技术大学等世界一流学府. 项目已经是面向园区---专注智慧清洁领域 一.控 ...

  9. matlab信息隐藏算法,实验四--基于DCT域的信息隐藏算法

    <实验四--基于DCT域的信息隐藏算法>由会员分享,可在线阅读,更多相关<实验四--基于DCT域的信息隐藏算法(6页珍藏版)>请在人人文库网上搜索. 1.实验四 基于DCT域的 ...

最新文章

  1. 基于Pygame的Python小游戏,《这是一场滑稽与阴险的较量》
  2. vue-router 的重定向-redirect
  3. python浅拷贝 深拷贝
  4. 使用cdn和npm引入的区别_在npm上发布自己的vue组件库(使用npm install 或者 CDN的方式引用)...
  5. linux下miniconda3启动命令
  6. 绝了!电容这样理解真的简单!
  7. 牛顿法、梯度下降法、高斯牛顿法、Levenberg-Marquardt算法
  8. machine ID问题 ( u-boot设置machine id , set mach_type 0x16a )
  9. 异常作弊– Java 8 Lambdas
  10. When allowCredentials is true, allowedOrigins cannot contain the special value “*“ that cannot be
  11. XEIM|XEIM企业即时通讯
  12. 列运算_MIT—线性代数笔记06 列空间和零空间
  13. Linux建立信任主机
  14. CCS8.0安装教程及安装包
  15. IOI国家集训队历年论文
  16. Vmware workstation 16pro解锁装MacOS
  17. java必备基础5(集合list、set、map)
  18. 如何写投资项目计划书?
  19. 经典Bug永流传---每周一“虫”(九)
  20. 从社交图谱看Web3.0在社交领域的探索

热门文章

  1. [LeetCode]42. Trapping Rain Water雨水填坑
  2. 2022-2028年中国医疗+养老产业深度调研及投资前景预测报告
  3. 2022-2028年中国橡胶减震产品行业市场研究及前瞻分析报告
  4. shiro和Spring整合使用注解时没有执行realm的doGetAuthorizationInfo回调方法的解决
  5. Java技术——Iterator和Enumeration的不同
  6. 三维刚体变化中Rcw,tcw的含义
  7. usaco Cow Pedigrees
  8. arm-linux-ld中的参数,arm-linux-ld指令详解
  9. java十个整数相反顺序_编写程序,对输入的一个整数,按相反顺序输出该数。例如,输入为 3578, 输出为 8753。...
  10. php 开发cs,PHP开发CS结构的技巧