Jetson Nano 开发环境搭建与实战、开发入门与进阶指南:系统、远程桌面及深度学习工具,包含基础配置、编程开发与视觉应用

Jetson Nano

80b8d750a7bb432286e91468c6970552.jpeg

Jetson Nano系统安装

系统安装参考Jetson nano (4GB B01) 系统安装

基本配置

        首先SD卡扩容,一般只有32G及以上的卡才能装上Nano系统,打开disk选择resize将剩下的空间补上。

eebfd764bb7d4ff2b6bc5d022196f076.png

安装基础依赖

sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git

输入法

        nano没有中文输入法,国内网络搜索会有很大的阻碍,因此安装fcitx-googlepinyin输入法:

sudo apt-get install fcitx fcitx-tools fcitx-config* fcitx-frontend* fcitx-module* fcitx-ui-* presage fcitx-googlepinyin

        在语言支持language support当中的键盘输入方法系统keyboard input method system当中选择fcitx

71e52bfa33bb44f38ae9246d7252de34.png

        然后再输入下列指令重启:

sudo reboot

        重启后在右上角键盘设置当中选择配置Fcitx

02ff71a708d145708c94071ebb5ee63f.png

        在输入方法配置选择框当中按左下角加号添加google pinyin后即可

3f4a55d854c6491f881efcfda076d86d.png

        同时在全局配置选项当中可以设置中英切换按键,默认是ctrl加空格

fc6063bd0c234641aacf95114d6d86fd.png

基础软件

        Jetson nano相当于一台小电脑,为了方便开发需要一部分好用的软件帮助我们达成目的。

远程桌面

        nano开发板其中一个好处在于其便携性,但不可能每次都带一个nano加显示屏幕,安装一款远程桌面可以方便我们控制nano

option1:Todesk

        利用todesk可以跨平台控制,只要连接上任意的网络就可以实现远程桌面控制,控制的方便程度和网络传输相关,但同时需要注意的是todesk只支持gnome-desktop的桌面,部分系统如果没有连接显示屏幕那么就不会输出显示画面,导致todesk显示的是黑屏。解决方法通常有修改系统配置或者购买一个显卡欺骗器

        我们只需要在Jetson当中打开浏览器搜索todesk然后下载:

45c91e6dfb61477687b35014903c828b.png

        选择arm64架构并在下载目录打开终端按照界面内的安装指令输入即可

039bfd3f71264ce48f60bba27119c3ab.png

        登录自己的账号,然后在任意其他平台设备上下载todesk便可以远控各种设备了:

54b53f057f194de29f0bbc37d5b52104.png

option2:nomachine或者VNC

        VNC或者nomachine都是利用jetson nano连接的网络的IP来连接控制的,因此需要控制设备和Jetson nano连接在同一个网络下,通过IP访问。

        以Nomachine为例:

        网络浏览器搜索Nomachine进入官网并选择linux操作平台arm64,网址:NoMachine - NoMachine for Arm

5e42ba18e6814b5885b4f54007bc4603.png

        安装后会自动在右上角显示NoMachine Services,它自己会设置一个开机自启服务用于开启NoMachine服务,服务口能够显示IP地址。同样可以在终端输入:

ifconfig

        会显示如下界面:

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:14:7c:d1:0b  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 48:b0:2d:c1:27:3c  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 151  base 0x7000  

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 8548  bytes 664893 (664.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8548  bytes 664893 (664.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

rndis0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 4a:4c:3a:fd:ea:e9  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

usb0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether ##:##:##:##:##:##  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet ###.###.###.###  netmask 255.255.255.0  broadcast ###.###.###.###
        inet6 fe80::###  prefixlen ##  scopeid 0x##<link>
        ether ##:##:##:c0:5e:e7  txqueuelen 1000  (Ethernet)
        RX packets 111615  bytes 40187332 (40.1 MB)
        RX errors 0  dropped 1584  overruns 0  frame 0
        TX packets 260908  bytes 198071760 (198.0 MB)
        TX errors 0  dropped 6 overruns 0  carrier 0  collisions 0

        根据你的nano连接的网络类型选择,例如你连接的是wifi那么就从wlan0或者wlan1当中找ip,一般wlan当中连接的是inet后的ip地址,如果是usb网络共享或者RJ45网口则可能需要从usb或者eth当中寻找ip,详见:使用 ifconfig 查看本机 ip_终端怎么查看本地ip

        通过在其他设备上安装Nomachine连接查看远程桌面,点击Add添加设备,名字任意取,Host当中输入对应的IP地址即可

99b9fc5af6bb45b083646a20968c8ada.png

f3568e1f788345969590ae36ff564b41.png

编程开发

VScode或者VScode-OSS

        VScode支持多种编程语言,还可以添加插件,相当好用。因此在nano上面安装VScode可以极大提高开发效率

        由于老版本的ubuntu可能不一定支持最新版本的VScode,可以安装旧版本的VScode或者直接安装VScode-OSS

        我们前往网址Visual Studio Code September 2023点击Linux:后的deb便可以下载安装包

9c5f2aca12c845d19ab57e756a77b103.png

09a3da4b7bb749bfa2c31f1dd83beb24.png

安装方式(注意jetson应该安装arm版本,由于我在x86-64设备上下载的安装包成了AMD,下载时注意即可,下面的指令当中也要将amd改为arm):

sudo dpkg -i code_1.83.1-1696982868_amd64.deb

        安装完成后在开始菜单当中搜索code便可以找到VScode,可以将其Pin到左侧菜单栏当中

d6e7584a66d04f2dbda40b330544a924.png

        可以在extension拓展插件,必要插件有Python、C/C++等。

477b4efcaaed479ab1bdf170f04832c9.png

以python为例,在vscode界面右下角点击python可以选择对应版本的python的解释器

18d153142099424b89d6ce166d41d1ff.png

文件下载

        例如迅雷等软件,直接前往网址【免费】WPS、迅雷等软件的arm64linux版本deb直接安装所有软件包

安装方式:

sudo dpkg -i #对应的安装包名字#

工作空间

输入下列指令创建ROS1工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
catkin_make
source devel/setup.bash

然后可以参考机器人Rviz+matlab仿真详细步骤,从solidworks到urdf以及机器人编程控制,以ER50-C20为例-优快云博客

正文部分并利用此环境开发机器人仿真以及运动学分析

外接设备

PWM风扇

        Jetson nano的功耗还是较大的,为了及时散热需要使用PWM风扇连接主板上的PWM风扇口,然后我们在系统终端输入:

sudo apt install lm-sensors
sudo -H pip3 install -U jetson-stats
sudo sh -c 'echo 100 > /sys/devices/pwm-fan/target_pwm'

        就可以控制风扇转到到正常转速,同时我们需要让转速和温度正相关,编写下列函数:

import os
import time

def get_cpu_temp():
    temp = os.popen("cat /sys/devices/virtual/thermal/thermal_zone0/temp").readline()
    return int(temp) / 1000  

def set_fan_speed(pwm_value):
    pwm_value = max(0, min(255, pwm_value))  
    os.system(f"sudo sh -c 'echo {pwm_value} > /sys/devices/pwm-fan/target_pwm'")

def adjust_fan_speed():
    temp = get_cpu_temp()
    if temp < 40:
        pwm_value = 0  
    else:
        pwm_value = int((temp - 40) * 6.375)  
    set_fan_speed(pwm_value)
    print(f"Current CPU Temp: {temp}°C, Fan Speed PWM: {pwm_value}")

if __name__ == "__main__":
    while True:
        adjust_fan_speed()
        time.sleep(10)  

        上述代码可以实现温控PWM风扇,其中get_cpu_temp函数主要用于读取CPU温度并转化为一个数值,并设置一个函数adjust_fan_speed将PWM的0到255和CPU温度数值对应起来,如果温度低于40PWM为0,如果温度大于40则建立线性表达式pwm_value = int((temp - 40) * 6.375),最后将这个对应的PWM数值利用set_fan_speed函数控制风扇转动。

        注意有些PWM风扇刚好逻辑是反的,例如此处0是不转,但是有些是255不转,只需要在set_fan_speed函数开头添加一句代码即可:

pwm_value = 255 - pwm_value

        将上述代码命名为fanctrl.py然后输入下列指令:

crontab -e

        选择nano或者vim来显示内部代码,然后在最后加入下列指令,其中“/home/jetson/Workspace/Startup/”代表的是你的fanctrl.py所在的路径,注意路径不要输入错误

@reboot python3 /home/jetson/Workspace/Startup/fanctrl.py

        这样就可以在每次开机的时候自启动该程序实现自动风扇控制。同时我们也可以使用系统自带的服务来实现开机自启,详见:Jetson Nano开机自动启动Python程序

OLED

        OLED是许多嵌入式板子都支持的显示模块,有SPI协议和IIC协议两种。此处利用IIC协议的OLED为例显示NANO的部分信息。

首先是准备工作,在终端输入下列指令安装必要的库:

sudo apt-get install python3-tk
sudo apt-get install python3-pip
sudo apt-get install python3-dev
sudo pip3 install psutil smbus requests datetime Jetson.GPIO eyed3 adafruit-circuitpython-ssd1306 board adafruit-blinka adafruit-circuitpython-typing

引用对应库并设置显示OLED的分辨率,一般OLED设置有128*64和128*32这两种。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import time
import smbus
import board
import busio
import psutil
import subprocess
from adafruit_ssd1306 import SSD1306_I2C
from datetime import datetime
from PIL import Image, ImageDraw, ImageFont

i2c = busio.I2C(board.SCL, board.SDA)
disp = SSD1306_I2C(128, 32, i2c)

width = disp.width
height = disp.height
image = Image.new("1", (width, height))

draw = ImageDraw.Draw(image)
font = ImageFont.load_default()

padding = -2
top = padding
bot
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值