jetson nano 智能小车1.0(实现键盘控制、加装摄像头)

这篇具有很好参考价值的文章主要介绍了jetson nano 智能小车1.0(实现键盘控制、加装摄像头)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

实验剩了一个jetson nano 开发板,闲着也是闲着,拿过来搞点好玩的,jetson nano 和树莓派差不多,加个L298N电机驱动板模块,买两个直流电机就行,目前图省事儿使用无线键盘控制,缺点是不知道程序目前的执行状态,后面考虑加个led指示灯

一、jetson nano 小车 1.0版本 

1.1主要硬件

jetson nano主控板一个

jetson nano 控制4电机,计算机外设

L298N电机驱动板模块

jetson nano 控制4电机,计算机外设

直流电机*2

直流电源 7号电池*4

1.2接线方式

jetson nano 控制4电机,计算机外设

1.3 代码

电机调节就不细讲了,可以看文章:树莓派控制直流电机_树莓派3b+控制直流电机正反转-CSDN博客

控制代码:

import time
import RPi.GPIO as GPIO    # 引入GPIO模块
import tty, sys, select, termios



def getKey(settings):
    tty.setraw(sys.stdin.fileno())
    rlist = select.select([sys.stdin], [], [], 0.1)

    if rlist:
        key = sys.stdin.read(1)
    else:
        key = ""

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

# 前进
def Forward():
    GPIO.output(ENA, GPIO.HIGH)
    GPIO.output(ENB, GPIO.HIGH)
    GPIO.output(INT3, GPIO.HIGH)
    GPIO.output(INT4, GPIO.LOW)
    GPIO.output(INT1, GPIO.HIGH)
    GPIO.output(INT2, GPIO.LOW)
    

# 后退
def Back():
    GPIO.output(INT1, GPIO.LOW)
    GPIO.output(INT2, GPIO.HIGH)
    GPIO.output(INT3, GPIO.LOW)
    GPIO.output(INT4, GPIO.HIGH)
    GPIO.output(ENA, GPIO.HIGH)
    GPIO.output(ENB, GPIO.HIGH)

# 右转
def Right():
    GPIO.output(INT1, GPIO.HIGH)
    GPIO.output(INT2, GPIO.LOW)
    GPIO.output(INT3, GPIO.LOW)
    GPIO.output(INT4, GPIO.LOW)
    GPIO.output(ENA, GPIO.HIGH)
    GPIO.output(ENB, GPIO.HIGH)

def Left():
    GPIO.output(INT1, GPIO.LOW)
    GPIO.output(INT2, GPIO.LOW)
    GPIO.output(INT3, GPIO.HIGH)
    GPIO.output(INT4, GPIO.LOW)
    GPIO.output(ENA, GPIO.HIGH)
    GPIO.output(ENB, GPIO.HIGH)

def stop():
    GPIO.output(INT1, GPIO.LOW)
    GPIO.output(INT2, GPIO.LOW)
    GPIO.output(ENA, GPIO.LOW)
    GPIO.output(INT3, GPIO.LOW)
    GPIO.output(INT4, GPIO.LOW)
    GPIO.output(ENB, GPIO.LOW)


ENA = 38       #定义对应的引脚变量(等一下用)
INT1 = 37
INT2 = 35
INT3 = 33
INT4 = 31
ENB = 29


GPIO.setmode(GPIO.BOARD)       # 使用BCM编号方式
GPIO.setup(ENA, GPIO.OUT)    # 将连接ENA的GPIO引脚设置为输出模式
GPIO.setup(INT1, GPIO.OUT)     # 将连接IN1的GPIO引脚设置为输出模式
GPIO.setup(INT2, GPIO.OUT)     # 将连接IN2的GPIO引脚设置为输出模式
GPIO.setup(INT3, GPIO.OUT)     # 将连接IN3的GPIO引脚设置为输出模式
GPIO.setup(INT4, GPIO.OUT)     # 将连接IN4的GPIO引脚设置为输出模式
GPIO.setup(ENB, GPIO.OUT)     # 将连接INB的GPIO引脚设置为输出模式


print('ready')
while True:

    setting = termios.tcgetattr(sys.stdin)
    InPut = getKey(setting)

    if InPut == 'w':   #如果键盘输入w,则电机正转
        Forward()
        print('前进')

    elif InPut == 's':    #如果键盘输入s,则电机反转
        Back()
        print('后退')
    elif InPut == 'd':
        Left()
        print('左转')
    elif InPut == 'a':
        Right()
        print('右转')
    elif InPut == 'q':    #如果键盘输入的数值为q,退出
        stop()
        print('退出程序')
        break
    else :
        stop()
        print("Input Error,Please give a true index!!")


GPIO.cleanup()

二、jetson nano小车 1.1版本 加装摄像头

加装一个usb摄像头,基于flask框架写了一个前端web,将摄像头数据传到前端,可以在同一局域网下的手机设备、电脑设备、平板设备看到小车的视角

后端代码:

from flask import Flask, Response, render_template
import cv2
from threading import Thread
import RPi.GPIO as GPIO 
import tty, sys, select, termios

# 定义对应的GPIO引脚
ENA = 38
INT1 = 37
INT2 = 35
INT3 = 33
INT4 = 31
ENB = 29


GPIO.setmode(GPIO.BOARD)
GPIO.setup(ENA, GPIO.OUT) 
GPIO.setup(INT1, GPIO.OUT)
GPIO.setup(INT2, GPIO.OUT)
GPIO.setup(INT3, GPIO.OUT)
GPIO.setup(INT4, GPIO.OUT)
GPIO.setup(ENB, GPIO.OUT)


app = Flask(__name__)
camera = cv2.VideoCapture(0)

def generate_frames():
    while True:
        ret, frame = camera.read()
        #将视频流转成图像用于传向前端
        frame = cv2.imencode('.jpg', frame)[1].tobytes()
        yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/video_feed')
def video_feed():
    return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')




#小车控制
def getKey(settings):
    tty.setraw(sys.stdin.fileno())
    rlist = select.select([sys.stdin], [], [], 0.1)

    if rlist:
        key = sys.stdin.read(1)
    else:
        key = ""

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

def carControl():
    print('ready')
    while True:
        setting = termios.tcgetattr(sys.stdin)
        InPut = getKey(setting)

        if InPut == 'w':  # 如果键盘输入w,则电机正转
            GPIO.output(ENA, GPIO.HIGH)
            GPIO.output(ENB, GPIO.HIGH)
            GPIO.output(INT3, GPIO.HIGH)
            GPIO.output(INT4, GPIO.LOW)
            GPIO.output(INT1, GPIO.HIGH)
            GPIO.output(INT2, GPIO.LOW)
            #print('前进')
        elif InPut == 's':  # 如果键盘输入s,则电机反转
            GPIO.output(INT1, GPIO.LOW)
            GPIO.output(INT2, GPIO.HIGH)
            GPIO.output(INT3, GPIO.LOW)
            GPIO.output(INT4, GPIO.HIGH)
            GPIO.output(ENA, GPIO.HIGH)
            GPIO.output(ENB, GPIO.HIGH)
            #print('后退')
        elif InPut == 'd':
            GPIO.output(INT1, GPIO.LOW)
            GPIO.output(INT2, GPIO.LOW)
            GPIO.output(INT3, GPIO.HIGH)
            GPIO.output(INT4, GPIO.LOW)
            GPIO.output(ENA, GPIO.HIGH)
            GPIO.output(ENB, GPIO.HIGH)
            #print('左转')
        elif InPut == 'a':
            GPIO.output(INT1, GPIO.HIGH)
            GPIO.output(INT2, GPIO.LOW)
            GPIO.output(INT3, GPIO.LOW)
            GPIO.output(INT4, GPIO.LOW)
            GPIO.output(ENA, GPIO.HIGH)
            GPIO.output(ENB, GPIO.HIGH)
            #print('右转')
        elif InPut == 'q':  # 如果键盘输入的数值为q,退出
            GPIO.output(INT1, GPIO.LOW)
            GPIO.output(INT2, GPIO.LOW)
            GPIO.output(ENA, GPIO.LOW)
            GPIO.output(INT3, GPIO.LOW)
            GPIO.output(INT4, GPIO.LOW)
            GPIO.output(ENB, GPIO.LOW)
            #print('退出程序')
            break
        else:
            GPIO.output(INT1, GPIO.LOW)
            GPIO.output(INT2, GPIO.LOW)
            GPIO.output(ENA, GPIO.LOW)
            GPIO.output(INT3, GPIO.LOW)
            GPIO.output(INT4, GPIO.LOW)
            GPIO.output(ENB, GPIO.LOW)
            #print("Input Error,Please give a true index!!")

if __name__ == '__main__':

    # 创建线程
    car = Thread(target=carControl, args=())
    car.daemon = True
    car.start()
   
    app.run(host='0.0.0.0', port="5000", threaded=True)

    while True:
        pass


前端代码:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>smart car</title>
</head>
<body>
	<img id="stream" src="{{ url_for('video_feed') }}">
</body>
</html>

效果:

jetson nano 控制4电机,计算机外设

视频后续上传(转弯速度太快,摄像头太晃,后期控制一下转弯速度,并对外观升级一下): 文章来源地址https://www.toymoban.com/news/detail-857668.html

到了这里,关于jetson nano 智能小车1.0(实现键盘控制、加装摄像头)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Jetson Nano配置YOLOv5并实现FPS=25

    JetPack 4.6——2021.8 yolov5-v6.0版本 使用的为yolov5的yolov5n.pt,并利用tensorrtx进行加速推理,在调用摄像头实时检测可以达到FPS=25。 在打开的文档的末尾添加如下: 保持并退出,终端执行 1.打开终端输入: 2.修改nvzramconfig.sh文件 3.重启Jetson Nano 4.终端中输入: 可查看到swap已经变为

    2024年02月13日
    浏览(32)
  • Jetson nano+T265+PX4实现室内定点飞行

    目录 前言 一、MAVROS的安装 二、Realsense SDK和Realsense-ROS的安装 四、给予串口权限 五、在QGC中修改PX4参数 六、启动VIO节点 七、参考文献 1.硬件 飞控:Pixhawk 6C 机载电脑:Jetson nano 4GB B01 视觉定位模块:Intel RealSense T265 2.软件 操作系统:Ubantu 18.04 控制平台:ROS1 melodic,MAVROS,

    2024年02月16日
    浏览(37)
  • 厚积薄发的一年---用Jetson Nano实现入侵检测的项目分享

    回顾2023,有为了一个BUG或知识熬过夜,也有为了项目连续几天三点一线,在这期间的积累的一砖一瓦中,除了直接获得专业知识,提高专业技能外,更多的是从项目中得到足以使我终生受益的其他收获。 下面就一今年收获最多的项目来总结我的2023 ————————————

    2024年01月16日
    浏览(35)
  • ROS小车研究笔记1/31/2023 小车硬件结构及键盘移动控制节点

    1 小车硬件结构 1 中控设备 上方的单片机用于控制电机运动,搭载wifi模块和电量显示屏。下方为树莓派,安装了ROS系统和Ubuntu系统,用于整个小车控制。显示屏和树莓派相连 2 传感器系统 激光雷达及转换器。激光雷达和转换器相连,再由转换器连接树莓派以控制激光雷达 摄

    2024年02月09日
    浏览(64)
  • 【jetson nano】jetson nano环境配置+yolov5部署+tensorRT加速模型

    断断续续地前后花了一个多星期配置环境以及部署模型,期间也报了无数错误,参考了很多文档,求助了身边的朋友,因此尽可能详细的记录一下这个过程。 此处感谢Xnhyacinth在配置过程中对我的帮助哈哈哈꒰ঌ( ⌯’ \\\'⌯)໒꒱ 我主机上的环境是python3.9,cuda11.6 jetson nano环境

    2023年04月12日
    浏览(52)
  • 【nano系列】jetson nano 迁移系统、制作SD卡启动扩展内存(二)

    我的SD卡在nano中显示的名称为 /dev/sda1 ,不同于其他文章 的 /dev/mmcblk1p1。 Micro SD卡是一种极细小的快闪存储器卡,其格式源自SanDisk创造,原本这种记忆卡称为T-Flash,及后改称为Trans Flash。TF卡是Micro SD卡的旧称呼,两者没有区别。 nano编辑器无需图形界面,操作比vim更方便 下

    2023年04月19日
    浏览(36)
  • Jetson nano系统安装和环境部署

    使用sdk-manager安装CUDA,这个安装可前面安装JetPack系统操作类似,然后将板子上Micro USB通过数据线和电脑链接。如下图: 这一步就不用接跳线了!选中红框的所有文件,开始下载安装。 安装完成后会自动添加路径,这点不错,如果没有自动添加则要手动添加。手动添加方式:

    2024年02月15日
    浏览(39)
  • 对于jetson nano 的docker部署jetson-inference等模型

    对于Nvidia jetson nano来说是一款十分优秀的网络模型部署设备我对于nano来说也是学习了2个星期左右.这也是对我这一阶段做一个复习总结吧! 目录 烧录  下载jetson-inference dock镜像部署操作  跑个例程助助兴 找到函数接口进行调整 我用的是jetson nano a02 版本 是4GB内存大小的 首先

    2024年02月05日
    浏览(35)
  • jetson nano装opencv4.1.1

    一:下载opencv4.1.1及其相关的安装包,修改一下 可以去官网下载(opencv4和opencv-contrib的版本要对应): opencv4.1.1: https://github.com/opencv/opencv/tags?after=4.3.0 opencv-contrib-4.1.1: https://github.com/opencv/opencv_contrib/tags?after=3.4.12 也可以去这里下载:https://download.csdn.net/download/weixin_45235219/87

    2024年02月05日
    浏览(47)
  • 在 Jetson Nano 上安装 ncnn 深度学习框架。

    本页面将指导您在 Jetson Nano 上安装腾讯的 ncnn 框架。由于 ncnn 框架面向移动设备(例如 Android 手机),因此它不支持 CUDA。然而,大多数 Android 手机使用 Vulkan API 对其 GPU 进行低级访问。 ncnn 框架可以使用 Vulkan 例程来加速深度学习模型的卷积。 Jetson Nano 具有 ncnn 将使用的

    2024年02月11日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包