ROS联合webots扩展(一)设定目标点进行导航

2023-10-31

设定目标点进行导航

注意:

  • 再学习本系列教程时,应该已经安装过ROS了并且需要有一些ROS的基本知识
  • 此教程以webots_demo为基础
    ubuntu版本:20.04
    webots版本:2021a
    ros版本:noetic
    为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
    加群链接

前言

平时,我们都是在Rviz中选中2D Nav Goal来设置目标点的,这很麻烦。
如果我们想象我们的环境是一个100平的房子,里面有着厨房、卧室、客厅等等,想让机器人自动到达厨房或者卧室,就必须使用程序来解决,如果我们人为在Rviz中设置目标点就不叫自动了。

1. 想法

其实第一时间我是上百度查解决方案,网上教程如出一辙:ROS之用程序设定导航目标点

但是不知为何,笔者在修改参数运行后,move_base会直接崩溃。(未解决)

如出一辙的教程无果后,只能找解决方案。

1.1 另辟蹊径

2D Nav Goal发布到哪里了,那我直接publish那个topic应该就能达到同样的效果吧。

1.2 测试环境

测试环境如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lmvDJogK-1615100863091)(1.png)]

2. 测试方法是否可行

启动顺序如下:

  1. roslaunch webots.launch 启动webots
  2. slam_base_gmapping.launch 启动机器人始能检测元件程序、RVIZ、Gmapping和move_base

启动完成后,确保机器人能正常建图。使用rostopic list查找2D Nav Goalpublish的topic。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YWEN0Zju-1615100863094)(2.png)]

最终我找到/move_base_simple/goal这个topic是2D Nav Goalpublish的topic。
可以使用如下命令查看数据类型。

$ rostopic info /move_base_simple/goal

Type: geometry_msgs/PoseStamped

Publishers: 
 * /rviz (http://mckros-GL553VD:42121/)

Subscribers: 
 * /move_base (http://mckros-GL553VD:41431/)

可以看到使用的数据类型为geometry_msgs/PoseStamped
使用如下命令查看数据geometry_msgs/PoseStamped格式。

$ rosmsg show geometry_msgs/PoseStamped

std_msgs/Header header
  uint32 seq
  time stamp
  string frame_id
geometry_msgs/Pose pose
  geometry_msgs/Point position
    float64 x
    float64 y
    float64 z
  geometry_msgs/Quaternion orientation
    float64 x
    float64 y
    float64 z
    float64 w

基本了解过了一些数据类型,和我们应该publish的目标topic,接下来可以在webots中获取坐标点。

3.在webots中获取坐标

我们可以在webots中拖动机器人至想去的地方.
例如,我将机器人拖至主卧室门口,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1iQ2nKz2-1615100863096)(3.png)]

有两种方法可以查看当前位姿(注意坐标轴):

  1. 从节点树窗口中找到机器人,查看他的坐标值和旋转轴,如下图所示
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SUc3t4Jd-1615100863098)(4.png)]

  2. 使用命令rostopic echo /robot/gps/values查看机器人的坐标值,如下图所示
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YHpG3kWm-1615100863099)(5.png)]

使用命令rostopic echo /robot/inertial_unit/quaternion查看机器人的IMU数据获取旋转角度,如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0w2C575q-1615100863101)(6.png)]

从上面获取的数据可以看到当前机器人所处的位姿数据:

pose.position.x = -1.3;
pose.position.y = -2.5; //这里webots中的z轴为rviz中的y轴
pose.orientation.z = 0.0016;
pose.orientation.w = -0.6538;

其他位置可以使用这种方法获取,这里就以这一个位姿进行编程

4.编程

  1. 创建一个msg名为Goalname.msg, 创建一个字符串变量,用于接收用户发送的房间名。
string goal_name  
  1. 配置CMakeList.txt
 add_message_files(
    FILES
    Goalname.msg
  )
  1. catkin_make编译
  2. 创建一个名为robot_set_goals.cpp的代码文件。将在里面编程。源代码如下(含有注释)
#include "string.h"
#include "webots_demo/Goalname.h"           // 自己新建的msg头文件
#include "geometry_msgs/PoseStamped.h"
#include "ros/ros.h"
 
using namespace std;
 
ros::NodeHandle *n;
ros::Publisher pub_goal;
void goalCallback(const webots_demo::Goalname::ConstPtr &value);

int main(int argc, char **argv) {
   
    // create a node named 'robot' on ROS network
    ros::init(argc, argv, "robot_set_goal");
    n = new ros::NodeHandle;
    ros::Subscriber sub_goal;
    sub_goal = n->subscribe("/robot/goal",1,goalCallback); //订阅用户发布的topic
    
    pub_goal = n->advertise<geometry_msgs::PoseStamped>("/move_base_simple/goal",2);
    ROS_INFO("Started success ");
    ros::spin();
}
void goalCallback(const webots_demo::Goalname::ConstPtr &value){
    int isture=0;
    string goal_name = value->goal_name;
    geometry_msgs::PoseStamped target_pose;
    target_pose.header.seq = 1;
    target_pose.header.frame_id = "map";
    
    if (goal_name == "bedroom")         // 如果用户发送了bedroom
    {
        target_pose.pose.position.x = -1.3;
        target_pose.pose.position.y = -2.5;
        target_pose.pose.orientation.z = 0.0016;
        target_pose.pose.orientation.w = -0.6538;
        isture = 1;
    }

    if (isture)
    {
        target_pose.header.stamp = ros::Time::now();
        pub_goal.publish(target_pose);  // 目标点设置为主卧并且发布目标点
        ROS_INFO("Ready to go to the goal %s",goal_name.c_str());
    }
    else
    {
        ROS_ERROR("Can't compare the goal");
    }
}
  1. 配置CMakeLists.txt,添加如下程序
add_executable(robot_set_goals src/robot_set_goals.cpp)
add_dependencies(robot_set_goals webots_ros_generate_messages_cpp)
target_link_libraries(robot_set_goals	${catkin_LIBRARIES})
  1. catkin_make编译

5.测试

  1. 运行webots
  2. 运行slam
  3. 运行robot_set_goals.cpp
  4. 向/robot/goal 发布信息如下
$ rostopic pub /robot/goal webots_demo/Goalname "goal_name: 'bedroom'" 

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SYor0USJ-1615100863102)(1.gif)]

可能是角度没搞好,转的方向还需要调整
经过测试,良好的导航算法可以减少误差并且更加平稳。

大家可以发挥想象更好的去利用自动导航程序,比如语音控制。

结语

本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不对的地方或者不明白的地方,欢迎评论区留言交流~
为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接
✌Bye

此项目github地址:https://github.com/JackyMao1999/webots_demo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS联合webots扩展(一)设定目标点进行导航 的相关文章

  • 1025 反转链表python3无超时

    终于在卡了好几天之后想到了解决办法 这道题给出的代码并不能保证完全成功 不超时的概率大概在50 文章目录 一 最初的代码 二 代码改进 一 最初的代码 这个问题一般解决思路如下 获得正序链表 根据条件反转链表 输出链表 代码如下 usr b
  • 【python】正则表达式匹配数据

    前言 使用正则表达式处理数据 可进行字符串匹配 提取和替换等操作 在python中 通过re库完成正则匹配的操作 一 正则语法规则 1 常用匹配符 模式 描述 匹配字符串开头 匹配字符串结尾 匹配任意字符 匹配前面的字符零次或多次 匹配前面
  • Java中的浮点数据(float、double)进行算术运算时出错的问题剖析

    本文主题 对浮点数进行算术运算时 为何运算结果不正确 BigDecimal类型 常用方法的讲解 简单的浮点数算术运算工具类的设计 在Java前面讲解float double两种基本浮点类型时已经指出 这两个基本类型的浮点数容易引起精度丢失
  • python实现beta分布概率密度函数

    beta分布的最大特点是其多样性 从下图可以看出 beta分布具有各种形态 有U形 类似正态分布的形状 类似uniform分布的形状等 正式这一特质使beta分布在共轭先验的计算中起到重要作用 import matplotlib pyplo
  • MySQL——索引及调优篇

    一 索引的数据结构 1 1 为什么要使用索引 索引是存储引擎用于快速查找数据记录的一种数据结构 就好比一本教科书的目录部分 通过目录中找到对应文章的页码 便可快速定位到需要的文章 MySQL中也是一样的道理 进行数据查找时 首先查看查询条件
  • 关于常用的http请求头以及响应头详解

    一 常用的http请求头 1 Accept Accept text html 浏览器可以接受服务器回发的类型为 text html Accept 代表浏览器可以处理所有类型 一般浏览器发给服务器都是发这个 2 Accept Encoding
  • Mann-Kendall突变检测(mk突变检测)

    Mann Kendall突变检测 数据序列y 结果序列UFk UBk2 读取excel中的数据 赋给矩阵y 获取y的样本数 A为时间和径流数据列 A xlswrite 数据 xls x A 1 时间序列 y A 2 径流数据列 N leng
  • MKP勒索病毒数据恢复

    引言 在数字化时代 恶意软件如影随形 MKP勒索病毒以其毒辣的加密手段和威胁的勒索信息令人防不胜防 电脑中了MKP勒索病毒 不仅数据被锁定 生活和工作也受到了重创 然而 不要惊慌失措 我们可以通过果断的处理和坚定的预防 守护我们的数字世界
  • Win7平台Python3使用impyla连接Hive遇到的坑

    环境硬件配置及Hadoop Hive版本 此博客置顶文章中有 安装步骤 pip install pure sasl Looking in indexes https pypi tuna tsinghua edu cn simple Coll
  • jar包里class文件如何替换?

    1 将jar包先解压成文件 2 替换对应目录文件 3 windows环境进入要打jar包的文件目录底下 按住shift右键打开命令窗口 默认进入到了对应目录底下 4 使用命令打包文件底下的所有文件 jar cf0M jar包名 jar 5
  • 使用commons-httpclient上传文件

    这个jar是jakarta官方的标准版本 现在的3 0的BETA已经出来了 但是稳定还是最重要的 这个东西到底有什么好处呢 他使利用java作为一个HTTP的客户端成为可能 基本能模拟一切HTTP客户端的访问模式 而其使用起来之简单 让以前
  • pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

    前言 笔者使用的是 pycharm 1 打开你所在的任意工程 2 进入 File gt setting 3 pip 这一栏进行双击 4 点击左下方的 install package 开始下载安装包 5 借助 everything 工具 找到
  • FreeRTOS学习简易笔记

    第1章 FreeRTOS引入及堆栈 1 1 FreeRTOS学习三阶段 1 理解RTOS总原理 会移植官方Demo 会使用 2 知道内部机制 源码还没看 3 知道内部实现 能看懂源码 并能轻松移植任何单片机 1 2 RTOS操作系统 与 裸
  • 最详细小白入门Python4-变量

    变量特性 容器 临时 可变 变量定义的格式 变量名 值 标识符的命名规则 只能是数字字母下划线组成 首字母不能是数字 严格区分大小写 不能是关键字 在Python中定义变量必须赋值 否则报错 牛奶和可乐交换的案例 交换方式 获取一个空杯子
  • 大数据运维学习之路

    业内有这么一句话说 云计算可能改变了整个传统IT产业的基础架构 而大数据处理 尤其像Hadoop组件这样的技术出现 将是改变IT业务模式的一种技术 另外 很多小伙伴可能还搞不明白云和Hadoop有什么关系 事实上这是两种截然不同的技术 今天
  • [datawhale202302]CS224W图机器学习:图的基本表示及特征工程

    结论速递 本章涉及了图基本表示及传统的特征工程 图由节点和连接组成 节点和连接上都可以有不同的属性 根据属性的特点 分为几类不同的图 其中异质图和二分图是比较重要的特殊图 图可以用邻接矩阵进行结构化表示 如果图过于稀疏 也可以使用连接列表和
  • c语言单例模式,c#单例模式(Singleton)的6种实现

    1 1 1 摘要 在我们日常的工作中经常需要在应用程序中保持一个唯一的实例 如 IO处理 数据库操作等 由于这些对象都要占用重要的系统资源 所以我们必须限制这些实例的创建或始终使用一个公用的实例 这就是我们今天要介绍的 单例模式 Singl
  • SecureCRT的设置

    转载 简要介绍 VanDyke CRT 和 VanDyke SecureCRT是最常用的终端仿真程序 简单的说就是windows下登录UNIX或Liunx服务器主机的软件 二者不同的是SecureCRT支持SSH SSH1和SSH2 本文主
  • python基础 四、面向对象

    第六章 面向对象 继承 多继承 class FooParent object def init self self parent I m the parent print Parent def bar self message print

随机推荐

  • dicom信息+dcmtk使用

    dcmtk使用 常见错误 错误 E can t load data dictionary W Monochrome encoder No data dictionary 解决 https forum dcmtk org viewtopic
  • Internet路由之路由表查找算法概述-哈希/LC-Trie树/256-way-mtrie树

    说明 本文没有源码分析的内容 然而我认为能理解本质比能看懂源码更有用 因为理解了本质之后 你也许就不用再看源码了 你甚至都可以写源码了 这就是Linux内核和Cisco的网站中包含大量文档的原因 引 路由是互联网的一个核心概念 广义的讲 它
  • js深克隆五种方法

    使用递归 使用递归的方式实现数组 对象的深拷贝 判断拷贝的要进行深拷贝的是数组还是对象 是数组的话进行数组拷贝 对象的话进行对象拷贝 进行深拷贝的不能为空 并且是对象 function cloneDeep obj var objClone
  • DRC设计规则设置介绍-Design Compiler(四)

    文章目录 4 1 设计规则相关命令设置 4 1 1 set load 输出驱动强度 4 1 2 set input transition 输入驱动强度 参考文档 系列学习介绍DC相关知识 包括ASIC基本单元相关 DC指令工艺库脚本相关 后
  • mysql 的帐号认证和权限控制

    在 mysql 的语句处理流程 中 有两处进行了权限的管理 分别为 authentication 和 access control 1 authentication是使用user 用户名 和host 客户端主机 以及password对客户端
  • 1、ROS常用命令以及调参工具

    1 ROS常用命令以及调参工具 简介 1 1 常用命令的使用 学习目标 工作任务 1 1 常用命令的使用 简介 ROS机器人操作系统提供了一种发布 订阅式的通信框架 非常简单方便 并且ROS提供了大量工具用于调试 可视化 测试数据 本节项目
  • ABCD+5G之D——大数据(Big Data)

    学习自网易公开课厦门大学公开课 一 大数据概述 1 大数据时代
  • git本地免密码和账号pull、push

    说明 HOME 一般为C users Administrator 也可以是你自己创建的系统用户名目录 反正都在C users 中 一 windows下 需要创建一个 git credentials文件 由于在Window中不允许直接创建以
  • Visual Studio Code怎么停止正在运行的Python脚本?

    有时候 写了无限循环的脚本 又或者脚本还没有运行完毕 却想要终止它 比如 这个无限循环的命令 import datetime now datetime datetime now h now hour while h lt 25 print
  • 初识 ABP 框架

    目录 前言 一 创建ABP应用的方式 二 运行基于ABP的控制台应用 三 运行基于ABP的Web应用 四 Abp中的注入 五 模块的生命周期 参考文档 前言 本文使用 NET Core SDK 3 1 的版本 ABP Framework 在
  • 18.3. TTY 线路设置

    http oss org cn kernel book ldd3 ch18s03 html 18 3 TTY 线路设置 当一个用户要改变一个 tty 设备的线路设置或者获取当前线路设置 他调用一个许多的不同 termios 用户空间库函数或
  • 面向对象编程——封装和继承

    目录 一 封装 1 封装的解释 2 权限修饰符 3 如何使用private 二 继承 1 继承关系的引出 2 继承的解释 3 代码实例 4 单继承的解释 5 显式继承和隐式继承 1 显式继承 2 隐式继承 6 关于protected权限 7
  • 算法通关村18关

    1 分割回文串 题目 LeetCode131 分割回文串 给你一个字符串s 请你将s分割成一些字串 使每个字串都是回文串 返回s所有可能的分割方案 回文串是正着和反着读都是一样的字符串 思路 知道回溯的模板 用回溯的角度思考就清晰很多 切割
  • 面经——Linux相关

    摘自 看完这些面试必问的Linux小知识 我保证你面试后会来给我的文章一键三连 作者 万里羊 发布时间 2021 04 09 21 55 23 网址 https blog csdn net weixin 44895651 article d
  • k8s1.27.2 kubeadm 高可用安装

    一 安装说明 部署说明 本次部署采用的系统版本为Centos7 9 内核版本为6 3 5 1 el7 K8S版本为v1 27 2 containerd版本 1 7 1 cni版本 1 3 0 crictl 版本 1 27 0 etcd版本为
  • 第九章SQL语言

  • Java字节码介绍

    Java字节码 概述 学习 Java 的都知道 我们所编写的 java 代码文件通过编译将会生成 class 文件 最初的方式就是通过 JDK 的 javac 指令来编译 再通过 java 命令执行 main 方法所在的类 从而执行我们的
  • Windows删除流氓软件方法记录

    windows权限管理那相当的糟糕啊 但凡你下载安装国产软件 尤其是那种小广告很多的网站 也有好处 也算是一种免费获得大多数软件的灰色渠道吧 毕竟鱼与熊掌不可兼得嘛 基本都会捆绑一些行为流氓的软件 相对于macos windows就是一个很
  • 安果相亲-找到心仪的另一半 一个安卓免费找对象软件推荐

    安果相亲 全国范围内的真实恋爱相亲平台 致力于帮助用户寻找真实恋爱 我们的实名认证机制确 保用户信息的真实性 汇集了高学历 经济稳定 丰富生活经验的优质单身男女 都在这里真诚地等待那个对的人 每个手机只能注册一个账户 为您提供一个更安全 更
  • ROS联合webots扩展(一)设定目标点进行导航

    设定目标点进行导航 注意 再学习本系列教程时 应该已经安装过ROS了并且需要有一些ROS的基本知识 此教程以webots demo为基础 ubuntu版本 20 04 webots版本 2021a ros版本 noetic 为了能和读者进一