简介:实现键盘控制虚拟仿真小车移动,w/s/a/d/空格,对应向前/向后/向左/向右/急停切换功能,q键退出

1、创建key_control节点

进入工作空间源码目录:

$ cd ~/myros/catkin_ws/src/

创建功能包:

$ catkin_create_pkg key_control rospy std_msgs duckietown_msgs

创建源码文件:

$ touch key_control/src/key_control_node.py

修改编译配置文件:

$ gedit key_control/CMakeLists.txt

修改为:


2、编写节点代码

$ gedit key_control/src/key_control_node.py

代码主要功能包括启动仿真环境,监听键盘输入,判断键盘输入发布控制指令话题,

附源码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*  import os
import sys
import tty, termios
import roslib
import rospy
from duckietown_msgs.msg import Twist2DStamped, BoolStampedclass KeyControlNode():def __init__(self):rospy.init_node('key_control_node')self.v = 0.0self.omega = 0.0self.estop = Falseself.pub_car_cmd = rospy.Publisher('/duckietown/duckiebot_node/car_cmd', Twist2DStamped, queue_size=10)self.pub_e_stop = rospy.Publisher('/duckietown/duckiebot_node/emergency_stop', BoolStamped, queue_size=10)def keyDetect(self):thread_stop = Falserate = rospy.Rate(10)while not thread_stop: fd = sys.stdin.fileno()old_settings = termios.tcgetattr(fd)try :tty.setraw( fd )ch = sys.stdin.read(1)finally :termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)print(ch)if ch == 'w':  self.v = 0.2self.omega = 0.3elif ch == 's':  self.v = -0.2self.omega = 0.3elif ch == 'a':  self.v = 0.2self.omega = 1elif ch == 'd':  self.v = 0.2self.omega = -1elif ch == 'q': self.v = 0.0self.omega = 0.0thread_stop = Trueelse:if self.estop:e_stop_msg = BoolStamped()e_stop_msg.data = Falseself.pub_e_stop.publish(e_stop_msg)self.estop = Falseelse:e_stop_msg = BoolStamped()e_stop_msg.data = Trueself.pub_e_stop.publish(e_stop_msg)self.estop = Truemsg_car_cmd = Twist2DStamped()msg_car_cmd.v = self.vmsg_car_cmd.omega = self.omegaself.pub_car_cmd.publish(msg_car_cmd)rate.sleep()if __name__ == '__main__':  keyControlNode = KeyControlNode()keyControlNode.keyDetect()

3、编译

$ cd ~/myros/catkin_ws

$ catkin_make


4、运行

运行需要3个终端,一个运行roscore与duckiebot节点,一个开ros视频流查看软件,一个开key_control节点:

注:每新开一个终端,都要执行环境变量设置命令

$ source ~/myros/catkin_ws/devel/setup.bash

终端1:$ roslaunch duckiebot duckiebot.launch

终端2:$ rqt_image_view

终端3:$ rosrun key_control key_control_node.py

通过键盘上的w/s/a/d键控制小车移动方向,空格键急停切换,q键退出

无人驾驶虚拟仿真(四)--通过ROS系统控制小车行走相关推荐

  1. 无人驾驶虚拟仿真(二)--ROS系统安装

    简介:在ubuntu20.04系统中安装ROS noetic版本 1.安装源 $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubun ...

  2. 无人驾驶虚拟仿真(一)--环境搭建

    简介:安装部署无人驾驶虚拟仿真平台,通过键盘控制仿真小车移动,简单介绍仿真环境切换以及自制方法 基础环境:ubuntu20.04,python3.8.10 1.安装git.pip3 $ sudo ap ...

  3. 无人驾驶虚拟仿真(十)--车辆姿态控制(PID)

    简介:在上一节内容中,我们估算出了车辆姿态,主要是位置偏差d和航向角偏差phi,出现偏差就需要矫正,根据物理常识我们知道不可能马上矫正,需要一个矫正的过程,图像采集处理又有一个时间间隔,在这个时间间隔 ...

  4. 无人驾驶虚拟仿真(五)--图像处理之色彩平衡

    简介:同样的物体在不同的光照环境中会出现色彩偏差,为了减少色彩偏差对系统检测造成的影响,在对图像进行识别前,需要先评估图像明暗度,计算出明暗阈值,通过对图像的色彩平衡处理,可以校正图像色偏,过饱和或饱 ...

  5. 无人驾驶虚拟仿真(十三)--图像处理之交通标志牌识别1

            简介:在实际交通地图环境中,我们预设了交通标志牌,可以通过交通标志牌对小车进行更加细致丰富的控制,标志牌形式如下:         每个交通标志牌都是由功能图片+编码图片结合的方式生成 ...

  6. 无人驾驶虚拟仿真(十二)--图像处理之红绿灯识别

    简介:在交通地图中有红绿灯组件,一般放置在T形或者十字路口处,车辆行驶过程中,需要检测红绿灯信号来控制车辆启停,以符合基本的交通规则.红绿灯识别基本分为图像截取.斑点检测.颜色识别三步来实现. 1.新 ...

  7. 无人驾驶虚拟仿真(八)--图像处理之车道线识别3

    简介:在上一节中,我们完成了单张图片车道线的检测,在最终的结果中,可以比较明确的观察出车辆相对车道线的位置,接下来,我们要把这一功能移植到ROS系统中,将小车抓取到的图像都处理成车道线数据,并发布到下 ...

  8. Ubuntu18.04配置搭建基于Gazebo的虚拟仿真平台(Px4):无人机(UAV)、无人车等模拟实验平台

    这篇我觉得是写得比较详细完整的 摘自:https://dgzc.ganahe.top/ganahe/2021/uavgazebomoni.html Ubuntu18.04配置搭建基于Gazebo的虚拟 ...

  9. 基于PanoSim5.0虚拟仿真平台的自主代客泊车AVP系统开发教程

    一.Panosim5仿真平台简介 PanoSim是由国内一家创业公司联合吉大.北航等高校资源开发的一款智能驾驶汽车仿真软件平台.软件以智能驾驶汽车全栈仿真为开发目标,具有完整的场景模型.传感器模型和车 ...

  10. ROS2学习笔记(三)-- 采集虚拟仿真环境图像并发布

    简介:ROS2功能的学习我们还是在基于OpenAI的gym虚拟仿真环境中来完成,gym虚拟仿真环境安装请参考另一篇教程,这里不再重复说明,接下来我们开始创建一个ROS2的功能节点,并发布虚拟仿真环境小 ...

最新文章

  1. part.write java_使用javax.servlet.http.Part类上传文件
  2. 关于MySQL索引知识与小妙招 — 学到了!
  3. [Android] SQLite数据库之增删改查基础操作
  4. 如何使用BAdI ORDER_SAVE创建客户自定义的error message
  5. mysql 远程load data,PyMySQL将(文件)数据加载到远程MySQL实例时发生错误/异常
  6. LeetCode 478. 在圆内随机生成点(概率)
  7. 05CRecordset类
  8. 北风网ajax,[T8:JavaScript中利用Ajax实现客户端与服务器端通信北风网收费视频讲座.ppt...
  9. 解决python安装包无法正常安装问题
  10. libVLC库推流,sout参数如何设置
  11. 仿苹果手机_仿iphone12充电动画下载-仿iphone12充电动画软件下载 v1.1
  12. c语言srand函数用法,srand
  13. uniapp微信小程序自定义分享按钮
  14. 双向可控硅晶片光耦 (TLP160J TLP260J TLP525G) 基本原理及应用实例
  15. Docker 启动和退出一个容器
  16. bon app android,Bon App!
  17. 机器学习中的隐马尔科夫模型(HMM)详解
  18. 分组器及事前控制相关系统介绍
  19. 教育部最新发布:180所高校本科新增AI课程,138所高校新增大数据课程
  20. 【Redis详细安装教程】

热门文章

  1. 1076: 三位数求解 C语言
  2. 法律对合伙企业债务承担方式的规定
  3. [紧急通告]关于蓝色理想经典论坛无法访问的声明
  4. 三七互娱秋招web前端笔试题编程题(使用原生JS实现一个英雄类Hero, 可以按照以下方式调用正确输出)
  5. 孤独者的自我救赎[自我的认知]
  6. opencv23:Histogram直方图反向投影
  7. MAC电脑突然开不了机的解决方案
  8. Coverage [minx,miny,maxx,maxy] is [12, 4, 13, 6, 3], index [x,y,z] is [2, 5, 3]错误原因及其解决方式
  9. 英语学习第5篇_并列句
  10. Oracle表是Filtered状态,Explain中的filtered列