(无人机方向)ros小白之键盘控制无人机(终端方式)

这篇具有很好参考价值的文章主要介绍了(无人机方向)ros小白之键盘控制无人机(终端方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

ubuntu 18.04
pycharm
ros melodic
做一个在终端中键盘输入指令,控制飞机起飞以及进入offbaord

一:配置pycharm的ros开发环境

File->Settings->Project Interpreter->右边小齿轮Show All->选中正在使用的python
点击右边最下面的图标,打开Interpreter Path
添加/opt/ros/indigo/lib/python2.7/dist-packages

(无人机方向)ros小白之键盘控制无人机(终端方式),学习记录,无人机

二:核心代码讲解

def getKey():
    #这行代码使用tty模块的setraw()函数来设置标准输入(sys.stdin)的行为为原始模式。
    #原始模式下,输入不经过缓冲,每次输入一个字符。
    tty.setraw(sys.stdin.fileno())
    #这行代码使用select模块的select()函数来检查是否有可读取的数据。
    #它监视sys.stdin(标准输入),并且等待0.1秒钟。如果在等待期间有数据可读,
    #则select()函数会返回一个非空的可读列表(rlist),否则返回空列表
    rlist, _, _ = select.select([sys.stdin], [], [], 0.1)
    #这段代码检查rlist列表是否非空。如果列表非空,说明在等待期间有数据可读。
    #此时,通过sys.stdin.read(1)读取一个字符,并将其赋值给key变量。
    #如果列表为空,则说明在等待期间没有数据可读,此时将key变量赋值为空字符串。
    if rlist:
        key = sys.stdin.read(1)
    else:
        key = ''
    #这行代码使用termios模块的tcsetattr()函数来恢复标准输入的设置。
    #TCSADRAIN参数表示在所有排队的输出都被传输和处理之后才生效。
    #将标准输入的属性设置为之前保存的settings值。它使用termios.tcsetattr函数来设置终端的属性。
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)
    #最后,函数返回变量key的值,即读取到的字符(如果有)或空字符串(如果没有读取到字符)。
    return key

三 效果演示

在不同的仿真环境中,话题名称可能不一致,需要改源码的话题名称

XTDrone

roslaunch px4 outdoor1.launch
python my_keyboard_control.py#键盘控制代码

(无人机方向)ros小白之键盘控制无人机(终端方式),学习记录,无人机文章来源地址https://www.toymoban.com/news/detail-611307.html

四 完整代码

# coding=utf-8
import mavros_msgs
import rospy
from mavros_msgs.srv import SetMode,CommandBool

import sys, select, os
#os模块是用于与操作系统进行交互的模块。TTY(teletypewriter)是指终端设备,例如终端窗口、终端控制台或串口终端。
#select 模块:该模块提供了对低级 I/O 多路复用的支持。
#termios模块是Python中用于处理终端IO(Input/Output)的模块,允许我们控制终端的特性(attributes),例如字符的读取方式、输入输出模式等。
import tty, termios
from std_msgs.msg import String


cmd_vel_mask = False


msg2all = """
请输入输入指令:
r   : return home
t/y : arm/disarm
v/n : takeoff/land
b   : offboard
s/k : hover and remove the mask of keyboard control
CTRL-C to quit
"""





def getKey():
    #这行代码使用tty模块的setraw()函数来设置标准输入(sys.stdin)的行为为原始模式。
    #原始模式下,输入不经过缓冲,每次输入一个字符。
    tty.setraw(sys.stdin.fileno())
    #这行代码使用select模块的select()函数来检查是否有可读取的数据。
    #它监视sys.stdin(标准输入),并且等待0.1秒钟。如果在等待期间有数据可读,
    #则select()函数会返回一个非空的可读列表(rlist),否则返回空列表
    rlist, _, _ = select.select([sys.stdin], [], [], 0.1)
    #这段代码检查rlist列表是否非空。如果列表非空,说明在等待期间有数据可读。
    #此时,通过sys.stdin.read(1)读取一个字符,并将其赋值给key变量。
    #如果列表为空,则说明在等待期间没有数据可读,此时将key变量赋值为空字符串。
    if rlist:
        key = sys.stdin.read(1)
    else:
        key = ''
    #这行代码使用termios模块的tcsetattr()函数来恢复标准输入的设置。
    #TCSADRAIN参数表示在所有排队的输出都被传输和处理之后才生效。
    #将标准输入的属性设置为之前保存的settings值。它使用termios.tcsetattr函数来设置终端的属性。
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)
    #最后,函数返回变量key的值,即读取到的字符(如果有)或空字符串(如果没有读取到字符)。
    return key



def print_msg():
        print(msg2all)


#主函数
if __name__=="__main__":
#设置终端为标准输入流
    settings = termios.tcgetattr(sys.stdin)

    rospy.init_node('my_keyboard_control')
    multi_cmd_ser = rospy.ServiceProxy("/iris_0/mavros/set_mode",SetMode)
    multi_arm_ser=rospy.ServiceProxy("/iris_0/mavros/cmd/arming",mavros_msgs.srv.CommandBool)

    print_msg()
    cmd=""
    while(1):
        key = getKey()#获取读取到的字符
        if key == 'r':
            cmd = 'AUTO.RTL'
            print_msg()
            print('Returning home')
        elif key == 't':
            cmd = 'ARM'
            print_msg()
            print('Arming')
        elif key == 'y':
            cmd = 'DISARM'
            print_msg()
            print('Disarming')
        elif key == 'v':
            cmd = 'AUTO.TAKEOFF'
            print_msg()
            #print('Takeoff mode is disenabled now')
        elif key == 'b':
            cmd = 'OFFBOARD'
            print_msg()
            print('Offboard')
        elif key == 'n':
            cmd = 'AUTO.LAND'
            print_msg()
            print('Landing')
        elif key in ['k', 's']:
            cmd = 'HOVER'
            print_msg()
            print('Hover')
        elif(key == '\x03'):
                break

        if (cmd=='ARM'):
            multi_arm_ser(True)
        elif (cmd=='DISARM'):
            multi_arm_ser(False)
        else:
            multi_cmd_ser(custom_mode=cmd)


        cmd = ''

    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)

到了这里,关于(无人机方向)ros小白之键盘控制无人机(终端方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PX4无人机 - 键盘控制飞行代码

    仿真效果 实机效果 由于图片限制5M以内,只能上传一小段了,整段视频请点击链接 Pixhawk 6c | 无人机 | 键盘控制无人机 | Offboard模式 核心: 发布 mavros/setpoint_velocity/cmd_vel_unstamped 话题,控制x y z三个方向的速度 运行前先运行PX4自带仿真,例如 接着运行以下代码(根据WHEELTEC麦

    2024年02月16日
    浏览(49)
  • 【PX4&Simulink&Gazebo联合仿真】在Simulink中使用ROS2控制无人机进入Offboard模式起飞悬停并在Gazebo中可视化

    本篇文章介绍如何使用ROS2控制无人机进入Offboard模式起飞悬停并在Gazebo中可视化,提供了Matlab/Simulink源代码,以及演示效果图。 环境: MATLAB : R2022b Ubuntu :20.04 LTS Windows :Windows 10 ROS :ROS2 Foxy Python: 3.8.2 Visual Studio :Visual Studio 2019 PX4 :1.13.0 ROS2的应用程序管道非常简单,这要

    2024年02月22日
    浏览(58)
  • 【PX4&Simulink&Gazebo联合仿真】在Simulink中使用ROS2控制无人机沿自定义圆形轨迹飞行并在Gazebo中可视化

    本篇文章介绍如何使用ROS2控制无人机沿自定义圆形轨迹飞行并在Gazebo中可视化,提供了Matlab/Simulink源代码,以及演示效果图。 环境: MATLAB : R2022b Ubuntu :20.04 LTS Windows :Windows 10 ROS :ROS2 Foxy Python: 3.8.2 Visual Studio :Visual Studio 2019 PX4 :1.13.0 ROS2的应用程序管道非常简单,这要

    2024年02月22日
    浏览(69)
  • ROS无人机开发常见错误

    解决办法: 打开地面站的遥控器一栏 首先检查右下角Channel Monitor是否有识别出遥控各通道的值,如果没有,检查遥控器是否打开,遥控器和接收机是否对频成功,接收机和飞控的接线是否正确。 如果Channel Monitor可以识别出遥控各通道的值,再检查上方横滚/俯仰/水平/油门四

    2024年01月21日
    浏览(54)
  • 超维空间M1无人机使用说明书——61、ROS无人机物体识别与精准投放

    一、视频演示: 二、源代码下载链接 三、使用说明 1、启动二维码识别与降落程序 未出现红色报错,表明程序运行正常 2、launch文件详解 launch文件启动了四个节点,节点作用如下

    2024年02月01日
    浏览(53)
  • 超维空间M1无人机使用说明书——41、ROS无人机使用yolo进行物体识别

    一、启动darknet_ros物体识别 当终端无报错出现以上界面,表示物体识别正常运行 1、bringup_darknet.launch文件分别启动了USB摄像头和darknet_ros节点,其中摄像头节点主要是发布图像话题,提供给darknet_ros节点订阅,相反,darknet_ros订阅图像话题,根据订阅到的图像数据进行识别处理

    2024年01月22日
    浏览(48)
  • 从ROS1到ROS2无人机编程实战指南

    亲爱的读者们,我今天非常荣幸地向大家推荐一本本人的全新力作——《从ROS1到ROS2无人机编程实战指南》。这本书站在初学者的角度,从入门到进阶,再到实战,循序渐进,是学习ROS1和ROS2的最佳选择。如今已在全国范围内上市,购书即可享受次日达的快捷服务! 本书的创

    2024年02月10日
    浏览(46)
  • 无人机遥控器方案定制_MTK平台无人设备手持遥控终端PCB板开发

    随着科技的不断发展和无人机技术的逐步成熟,无人机越来越受到人们的关注。作为一种高新技术,无人机的应用范围不断拓展,包括农业、环境监测、城市规划、运输物流等领域。同时,无人机的飞行控制技术也得到了不断的优化和提升。 早期,无人机的飞行控制大多以机

    2024年02月03日
    浏览(41)
  • 超维空间S2无人机使用说明书——11、使用3维激光雷达实现ROS无人机的精准定位

    一、视频演示 视频演示: 3D雷达定位效果展示 二、源码连接 后续补充 三、启动雷达节点,确保雷达发布数据 未出现红色报错,表明程序运行正常 launch文件详解

    2024年01月23日
    浏览(50)
  • 超维空间M1无人机使用说明书——53、ROS无人机二维码识别与降落——V2升级版本

    一、启动二维码识别与降落程序 未出现红色报错,表明程序运行正常 launch文件详解 launch文件启动了四个节点,节点作用如下 二、视频演示 视频演示: 二维码降落

    2024年02月03日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包