当前位置: 首页 > news >正文

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 Stringif __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 Twistkey_mapping = {"w":[0, 1], "x":[0, 1],"a":[-1, 0], "d":[1, 0],"s":[0, 0]}
g_last_twist = Nonedef keys_cb(msg, twist_pub):global g_last_twistif len(msg.data)==0 or msg.data[0] not in key_mapping:returnvels = 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 zerowhile 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 

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL - 信贷业务报表
  • 半年不在csdn写博客,总结一下这半年的学习经历,coderfun的一些碎碎念.
  • Hudi 多表摄取工具 HoodieMultiTableStreamer 配置方法与示例
  • RH850F1KM-S4-100Pin_ R7F7016453AFP MCAL Gpt 配置
  • SylixOS nty模块使用说明
  • Spring框架温习
  • 大学校园广播“录编播”与IP广播系统技术方案
  • [240527] 谷歌 CEO 承认 AI 编造虚假信息问题难解(此文使用 @gemini 命令二次创作)| ICQ 停止运作
  • 【Linux】-Flink分布式内存计算集群部署[21]
  • Mysql下Limit注入方法(此方法仅适用于5.0.0<mysql<5.6.6的版本)
  • DFS:解决二叉树问题
  • 返回枚举类给前端
  • Vue.js条件渲染与列表渲染指南
  • linux设置不记录历史命令
  • Three.js 研究:3、创建一个高科技圆环
  • 2017-08-04 前端日报
  • canvas 绘制双线技巧
  • CentOS从零开始部署Nodejs项目
  • const let
  • isset在php5.6-和php7.0+的一些差异
  • JS变量作用域
  • Mysql优化
  • Protobuf3语言指南
  • SQL 难点解决:记录的引用
  • vue的全局变量和全局拦截请求器
  • Web Storage相关
  • Xmanager 远程桌面 CentOS 7
  • 对象引论
  • 开发基于以太坊智能合约的DApp
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 如何优雅地使用 Sublime Text
  • 实战|智能家居行业移动应用性能分析
  • 协程
  • 智能网联汽车信息安全
  • 阿里云重庆大学大数据训练营落地分享
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​Linux·i2c驱动架构​
  • ​香农与信息论三大定律
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #pragma multi_compile #pragma shader_feature
  • #QT项目实战(天气预报)
  • #大学#套接字
  • $.each()与$(selector).each()
  • (2.2w字)前端单元测试之Jest详解篇
  • (javaweb)Http协议
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (推荐)叮当——中文语音对话机器人
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Mysql的优化设置
  • .bat批处理(四):路径相关%cd%和%~dp0的区别