ros 学习记录(四)仿真环境中键盘控制turtlebot3运动

仿真环境中键盘控制turtlebot3运动

    • 准备工作
    • 1. 监听键盘敲击:key_publisher.py
    • 2. 控制turtlebot3运动:keys_to_twist_using_rate.py
    • 3. 测试
    • 4. 数据监视

准备工作

名称版本
ROSNoetic
Gazebo11.11.0
python3.8.10

turtlebot3的安装与仿真环境搭建请看上一篇帖子。

在此基础上,我们需要2个python脚本:key_publisher.pykeys_to_twist_using_rate.py,第一个用于创建节点用来监听键盘敲击并在/key话题上发布类型为std_msgs/String的信息;第二个用于创建节点并发送类型为Twist的名为/cmd_vel消息。

创建新的文件夹/scripts用来防止python脚本,具体内容如下:

1. 监听键盘敲击:key_publisher.py

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

"""监听键盘"""
import sys, select, tty, termios
import rospy
from std_msgs.msg import String

if __name__ == "__main__":
    key_pub = rospy.Publisher("key", String, queue_size=1)
    rospy.init_node("keyboard_driver")
    rate = rospy.Rate(100)
    old_attr = termios.tcgetattr(sys.stdin)
    tty.setcbreak(sys.stdin.fileno())
    print(f"publishing keystrokes. press ctrl-c to exit ...")
    while not rospy.is_shutdown():
        if select.select([sys.stdin], [], [], 0)[0] == [sys.stdin]:
            key_pub.publish(sys.stdin.read(1))
        rate.sleep()
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_attr)    

2. 控制turtlebot3运动:keys_to_twist_using_rate.py

本文采用的是常用的键盘控制方式,即:w:前进,
x:后退,a:左转,d:右转,s:停止。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""监视键盘,然后发送/cmd_vel,且发送频率稳定"""
import rospy
from std_msgs.msg import String
from geometry_msgs.msg import Twist

key_mapping = {"w":[0, 1], "x":[0, 1],
               "a":[-1, 0], "d":[1, 0],
               "s":[0, 0]}
g_last_twist = None

def keys_cb(msg, twist_pub):
    global g_last_twist
    if len(msg.data)==0 or msg.data[0] not in key_mapping:
        return
    vels = key_mapping[msg.data[0]]
    g_last_twist.angular.z = vels[0]
    g_last_twist.linear.x = vels[1]
    twist_pub.publish(g_last_twist)
    
if __name__ == "__main__":
    rospy.init_node("key_to_twist")
    twist_pub = rospy.Publisher("cmd_vel", Twist, queue_size=1)
    rospy.Subscriber("key", String, keys_cb, twist_pub)
    rate = rospy.Rate(10)
    g_last_twist = Twist()  # initializes to zero
    while not rospy.is_shutdown():
        twist_pub.publish(g_last_twist)
        rate.sleep()

3. 测试

打开4个terminal分别运行以下的命令

roscore
roslaunch turtlebot3_gazebo turtlebot3_world.launch 
python scripts/keys_to_twist_using_rate.py
python scripts/key_publisher.py

在这个terminal内敲击键盘可以控制turtlebot3在gazebo中运动,如下图所示:
在这里插入图片描述

4. 数据监视

此外,我们可以来监视turtlebot3运动时产生的数据:

rostopic echo cmd_vel

在这里插入图片描述

rqt_plot cmd_vel/linear/x cmd_vel/angular/z 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/647893.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频播放器-Kodi

一、前言 Kodi 是一款开源免费的多媒体播放软件。Kodi 是由非营利性技术联盟 Kodi 基金会开发的免费开源媒体播放器应用程序。 Kodi是一款免费和开源(遵循GPL协议)的多媒体播放器和娱乐中心软件,由XBMC基金会开发。Kodi的主要功能是管理和播…

three.js判断物体在人的前面,还是后面

three.js判断物体在人的前面,还是后面 const player new THREE.Vectors(10, 0, 5); const mesh new THREE.Vectors(15, 0, 6);上面,两个变量分别表示,玩家的位置,物体的位置。 从这发现,当玩家和物体的角度关系 小…

报错:c2665 ”loadimage“没有重载函数可以转换所有参数类型

解决方法: 右键项目选择属性-》高级-》字符集-》使用多字节字符集-》确定

SparkStreaming概述

Spark概述 SparkStreaming概述 Spark Streaming 是 Apache Spark 生态系统中的一个组件,用于实时流数据处理。它允许用户通过流式计算引擎处理实时数据流,并以低延迟的方式对数据进行分析、处理和存储。 背景 在大数据领域,传统的批处理系统…

什么是云渗透测试?

推荐阅读: 什么是安全态势? 什么是人肉搜索 什么是恶意软件? 什么是数字取证? 什么是语音网络钓鱼? 什么是网络安全中的社会工程? 什么是网络安全中的威胁情报? 什么是端点检测和响应 (…

Java进阶:详解与实战Java Stream API

Java进阶:详解与实战Java Stream API 🌟 Java进阶:详解与实战Java Stream API 🌟摘要引言一、Java Stream API介绍📚1. 什么是Java Stream API?2. Java Stream API支持的功能3. 使用Java Stream API的优势…

【vue3+elementuiplus】el-select下拉框会自动触发校验规则

场景:编辑弹框省份字段下拉框必填,触发方式change,有值第一次打开不会触发校验提示,关闭弹框再次打开触发必填校验提示,但是该字段有值 问题的原因是:在关闭弹层事件中,我做了resetfileds&…

react-d3-tree:React组件创建交互式D3树形图

在这里插入代码片import React from "react"; import ReactDOM from "react-dom"; import Tree from "react-d3-tree";import "./styles.css";const myTreeData [{name: "Gaurang Torvekar",attributes: {keyA: "val …

如何使用KNN

导入文件和库 加载数据集、拆分数据集 训练模型 预测 打印结果

自定义Linux命令,显示docker镜像、容器信息

1、修改环境变量(仅对当前用户有效) vim ~/.bashrc2、给命令取别名 alias dpsdocker ps --format "table{{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" alias disdocker images#保存并退出 :wq3、让配置重新生效 source ~/.bashrc4、测试&…

STM32F1之OV7725摄像头·SCCB总线代码编写附带源码详解

STM32F1之OV7725摄像头-CSDN博客 STM32F1之OV7725摄像头像素数据输出时序、FIFO 读写时序以及摄像头的驱动原理详解-CSDN博客 目录 1. 硬件设计 1.1 SCCB 控制相关 1.2 VGA 时序相关 1.3 FIFO 相关 1.4 XCLK 信号 2. 代码设计 2.1 SCCB总线软件实现 2.1.1 宏定…

【GUI开发基础】

GUI开发基础 🌟项目文件组成✨浅析Pro文件配置 🌟Qt设计师🌟剖析UI文件运行机制🌟UI设计方式✨可视化UI设计✨代码化UI设计 🌟项目文件组成 创建一个QtGUI项目: open QtCreator —> select Creator Pr…

Nvidia 如何成为 AI 训练的超级强国

周三,英伟达公布了第一季度的财务业绩,再次超出了分析师的预期。在截至 4 月 28 日的季度中,该公司的利润同比飙升 262%,股价一度创下 1000 美元以上的新高。 目前,英伟达的市值超过 2.3 万亿美元,是全球第…

从0开始学统计-什么是相关?

1.什么是统计学相关? 在统计学中,“相关”(Correlation)是指两个变量之间的线性关系程度。相关关系可以表明两个变量在某种程度上共同变化的趋势,但不意味着因果关系。相关的主要衡量方法是相关系数(Correlation Coe…

【Linux-INPUT输入的子系统】

Linux-INPUT输入的子系统 ■ input 子系统简介■ input 驱动编写流程■ ■ input 子系统简介 input 子系统就是管理输入的子系统, input 子系统分为 input 驱动层、 input 核心层、 input 事件处理层,最终给用户空间提供可访问的设备节点 ■ input 驱…

shell脚本实战--批量修改文件名

字符串截取 先来了解一下shell字符串相关操作的变量 # 从开头删除匹配最短 ## 从开头删除匹配最长 % 从结尾削除匹配最短 %% 从结尾删除匹配最长#指定字符内容截取 a*c 匹配开头为a,中间任意个字符,结尾为c的字符串 a*C 匹配…

web学习笔记(五十八)

目录 1. v-model 双向数据绑定 2. 事件修饰符 3. 路径别名 4. setup语法糖 4.1 语法糖的概念 4.2 setup语法糖 5. 配置代理服务器 1. v-model 双向数据绑定 v-model 双向数据绑定只能使用在表单标签; v-model双向数据绑定原理:采用 Object.de…

C++的哈希 哈希表 哈希桶

目录 Unordered系列关联式容器 什么是哈希 哈希表 闭散列 载荷因子α 扩容 查找 删除 字符串哈希算法 最终代码 开散列 插入 查找 删除 最终代码 完整代码 Unordered系列关联式容器 C98中,STL提供了底层为红黑树结构的一系列关联式容器&#xff0…

模仿高效网络进行目标检测——知识蒸馏

摘要 链接:https://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimicking_Very_Efficient_CVPR_2017_paper.pdf 当前的基于卷积神经网络(CNN)的目标检测器需要从预训练的ImageNet分类模型中初始化,这通常非常耗时。在本…

高效的大型语言模型适应方法:提升基础性的解决方案

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…