树莓派问题集

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_42136833/article/details/102576353

在玩树莓派小车的过程中遇到的问题记录嗷。

工具:

  • 电脑,Linux,ubuntu 16.04
  • 树莓派3B

目录:

  1. 电脑连接树莓派
  2. 查看opencv的版本
  3. 电脑传文件到树莓派
  4. Opencv的使用
  5. CMake的使用
  6. Qt的安装
  7. Qt的使用
  8. 树莓派系统的安装
  9. 树莓派新系统启动ssh
  10. 树莓派重装系统后电脑ssh连接树莓派时被告知不安全
  11. 树莓派系统设置
  12. CMake的安装
  13. 树莓派更换清华源
  14. OpenCV的安装
  15. 各种压缩文件的解压方式
  16. 删除文件或文件夹
  17. 修改文件或文件夹名称
  18. 树莓派开热点
  19. 树莓派配置wifi
  20. 扩展树莓派SWAP分区
  21. 两台电脑间用nfs远程传输文件

0.  注意事项
00. 血泪史
00.1  为了关掉树莓派连接到电脑的wlan0


1. 电脑连接树莓派

通过ssh(Secure shell,建立在应用层基础上的网络安全协议)。
可以通过电脑连接树莓派热点,再ssh树莓派的ip比如: 192.168.12.1,但是这样电脑就不能上网了。
所以为了电脑可以上网,又可以远程控制树莓派,选择用一根网线将树莓派和电脑连接起来。以下是配置方法:

  • 命令ps -e|grep ssh可以用来查看是否安装了ssh服务,如果显示sshd则表示已安装,如果没有的话,先去安装吧。
  • 打开电脑右上角wifi配置,选择底部“编辑连接...”,下拉至“以太网”部分,选择那个“有线连接”,“编辑”,在“IPv4设置”中将“方法(M)”改为“与其他计算机共享”。电脑与树莓派之间的连接就建立好了。
    • 注意不是编辑电脑正在使用的那个wifi,而是编辑下边以太网中连着树莓派的有线连接。
  • 在电脑终端中输入arp -asudo arp -a命令,可以看到局域网下本机和树莓派的ip信息。其中192.168.1.1在是所在路由器,另外一个(比如10.42.0.78)是树莓派。
    • 前者位于wlsp2s0,后者位于enp3s0是什么意思?
  • 这个时候就可以ssh pi@树莓派的ip了。
    • 注意,是ssh [email protected],@前面是目标的用户名。不要直接ssh+ip。
  • 输入树莓派的密码,就好了。

还有一种方法,就是把树莓派通过网线连接到路由器,电脑上打开浏览器进入192.168.1.1,查看路由器配置,可以找到树莓派的ip地址,此时电脑和树莓派也在同一局域网下。这个时候可以ssh [email protected](树莓派的ip,因情况而异)

  • 退出ssh可以用logoutexit命令。

2. 查看opencv的版本

  • 命令行中输入python(默认使用的python版本)或python3(如果装了python3.x的话)进入python。
    • python --versionpython3 --version可查看已有python的版本。
  • import cv2,如果不报错则表明装上了,如果报错则没装上,安装opencv的方法见第X点。
  • 命令cv2.__version__可查看已安装的opencv版本。
    • 我们的咋才2.4.9.1?包的名字上写的3.4.1呢?。。。重装重装

3. 电脑传文件到树莓派

  • 使用scp(secure copy)命令,该命令用于在Linux下远程拷贝文件。
  • 格式为:
    scp local_file remote_username@remote_ip:remote_folder(不改变文件名)

    scp local_file remote_username@remote_ip:remote_file(改变文件名)

4. Opencv的使用

  • OpenCV(Open Source Computer Vision)

  • 投向OpenCV的官网。OpenCV官网
    果然有Online Documentation和Tutorials!

  • 打开Tutorials。

  • 先跳过安装步骤。(已经安装好了,安装见第X点)

  • Let’s see Using OpenCV with gcc and CMake。它说,用OpenCV最简单的方法就是使用CMake,因为它不仅兼容多平台(Linux和Windows),还可以使很容易和其他工具结合起来(比如Qt,ITK和VTK)。

  • 笔者的opencv安装在了usr/local/include

5. CMake的使用

6. Qt的安装

  • Qt是…

  • Qt官网

  • 使用命令行安装Qt:
    sudo apt-get install qt5-default
    sudo apt-get install qtcreator

7. Qt的使用

  • 终端命令行输入qtcreator可打开Qt
  • 选择要创建的项目类别,这里选择’console`控制台类别,接下来按照提示步骤依次设置项目名称和项目地址(location)、设置要包含的包(kits)(kit是干什么的?)、确认项目信息(summary)。

8. 树莓派系统的安装

  • 工具:
    • 树莓派一个,笔者使用的是树莓派3B(目前最新版是树莓派4);
    • Micro SD卡一张,笔者使用的是32G的Micro SD卡;
    • 电源,用于给树莓派供电,树莓派4需要至少3A的电源,树莓派4则是2.5A;
    • 键盘和鼠标(初次配置需要USB连接的键鼠,以后可以使用蓝牙连接的)(我没有)
    • 显示器 (我没有)
  • 树莓派官网,下载最新的树莓派系统到SD卡里,然后烧写到树莓派上。下面是详细步骤(参考官方教程Setting up your Raspberry Pi):
  • 格式化(format)SD卡。
  • 下载树莓派系统源码。
    • 官网的教程里推荐NOOBS(New Out Of the Box Software),这是适合新手的树莓派系统,里面有Raspbian和LibreELEC。(我想下的版本是2019年9月30日发布的NOOBS 3.2.1,压缩包有2.3G,因为网速原因,怎么都下不下来。找朋友要了已经下载好的压缩包,通过电脑发给我。ubuntu下两台电脑间远程文件传输方法见第8点。。。啊,最后我没有下那NOOBS,下的是2019-09-26发布的raspbian-baster,有2.7G,包含桌面和一些相关软件)
  • 现在得到了树莓派最新系统的源码压缩包。
    • 下载balenaEtcher镜像制作软件。将系统源码做到SD卡里很方便,运行这个软件选择系统源码压缩包,选择要写入的移动设备,确认开始(FLASH)就可以了。
    • 我在制作镜像的时候遇到了问题,检测不到我的卡呃。
      • 一气之下关电脑去睡觉,第二天重启电脑之后就可以正常使用这个软件了。重启大法好。
  • 如果有键盘鼠标显示屏的话,先把它们接到树莓派上,然后树莓派上电启动。树莓派默认不开ssh。
    • 有显示屏的话,树莓派很容易就配置了。进入树莓派桌面(用网线将电脑和树莓派连接起来,在里面sudo raspi -config,在里面找找怎么开启ssh。
    • 如果没有显示屏,可以给树莓派系统的根目录里新建一个名称为ssh的空文件,没有后缀,再把SD卡插进树莓派,就开启了ssh。

9. 树莓派新系统启动ssh

  • 因为树莓派新系统默认不开ssh(据说是16年以后的版本会这样),所以电脑连接树莓派的时候会被拒绝。解决方式是:
    1. 烧写好系统的SD卡通过读卡器连接到电脑;
    2. 在根目录boot下新建一个空文件,名为ssh,不要后缀;
    3. 弹出SD卡,插入树莓派;
    4. 上电启动,则开启了ssh。

10. 树莓派重装系统后电脑ssh连接树莓派时被告知不安全

  • 报错信息如下:
    报错
  • 这是因为树莓派系统被重装了
  • 更新一下电脑里存储的host key即可,命令为:
    ssh-keygen -R 树莓派的ip
  • 树莓派的初始密码是raspberry

11. 树莓派系统设置

  • 命令sudo raspi-config
    系统设置
  • 第一行可以给它改密码。我的密码改成了raspberry1 (记下来备忘)
  • 第二行里的第一项可以设置树莓派的名称(hostname)。我的名字改成了lovelypi

12. CMake的安装

  1. 如果有旧版本,则先卸载旧版本:
    sudo apt-get autoremove cmake
  2. 到官网下载安装包(cmake官方下载地址)或者使用wget命令:
    wget https://github.com/Kitware/CMake/releases/download/v3.15.4/cmake-3.15.4.tar.gz        
    + wget是a non-interactive network retriever,用法是:
    wget [OPTION]... [URL]...
    比如:
    + 用wget指令如果下载到一半僵死了,可以使用Ctrl + z暂停下载(不是 + c),然后wget -c url继续下载。正在下载(进度条好可爱呀):
    下载进度
  3. 解压:
    tar -xvzf cmake-3.15.4.tar.gz
  4. 进入目录:
    cd cmake-3.15.4
  5. 该文件夹中有一个README.rst文件(cat指令可打开该文件),里面有cmake使用方法,包括编译方法:
    cmake编译方法
    • 首先得有gcc和g++(一般都有)
    • 然后依次run以下三个指令:
      ./bootstrap (我的电脑太慢了,这一步执行了好久)
      make (这一步也执行了好久)
      sudo make install
  6. 最后检验是否装好:
    cmake --version
    如果这样就是ok了:
    检查cmake

13. 树莓派更换清华源

  • 参考清华大学开源软件镜像站:https://mirror.tuna.tsinghua.edu.cn/help/raspbian/
  • 选择自己树莓派系统对应的版本,根据提示更改两个文件:
    换源
    • 注意: 一定要选择自己的pi对应的版本,别瞎换!之前我在网上找了一个教程,人家对应的是上一代Debian,stretch版本。以至于后来我apt-get install东西的时候一堆依赖库的问题,以及broken package。

14. OpenCV的安装

  1. 先安装编译软件及依赖库等:
	[compiler] sudo apt-get install build-essential
	[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
	[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
  1. 下载源码并解压
    • 从官网下载:https://opencv.org/releases/
    • 或从git仓库下载,比如:
      cd ~/<my_working_directory>
      git clone https://github.com/opencv/opencv.git
      git clone https://github.com/opencv/opencv_contrib.git
      
  2. 进入解压后的文件夹,创建一个名为build的文件夹用于存放临时文件,并进入:
		cd opencv-4.1.1
		mkdir build
		cd build
  1. Configuring一下,比如:
    cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
  2. Build一下,建议多开几个核,比如:
    make -j4 # runs 4 jobs in parallel
    (教程给的是j7,但我担心我电脑跑崩,所以只开了j4)
    不幸的是 ,这一步在运行过程中有报错:
    error
    我的解决方法是sudo make -j4,继续试一遍。。。
    运行了一会儿,又有问题了:
    error2
    和刚才一样。走了一会儿,又出错了:
    error3
    过了会儿,又:error4
    搜索解决方案无果,我头铁地准备再来一次,这次去掉了-j4,用的sudo make
    error5
    好像问题都出在了那个atomic上。
    参考了这篇文章:https://www.lizenghai.com/archives/29641.html
    重新cmake,加了一句-DCMAKE_SHARED_LINKER_FLAGS='-latomic还是不行,
    改成
    cmake -D CMAKE_BUILD_TYPE=RELEASE
    -D CMAKE_INSTALL_PREFIX=/usr/local
    -D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv-4.1.1/modules
    -D ENABLE_NEON=ON
    -D ENABLE_VFPV3=ON
    -D BUILD_TESTS=OFF
    -D OPENCV_ENABLE_NONFREE=ON
    -D INSTALL_PYTHON_EXAMPLES=OFF
    -DCMAKE_SHARED_LINKER_FLAGS=’-latomic’
    -D BUILD_EXAMPLES=OFF …
    还是不ok。认真读报错信息,发现:
    Linking CXX executable …/…/bin/opencv_test_core
    erooror
    执行sudo apt-get install libgtk-3-dev后解决了找不到gtk的问题,但是其他几个还是有问题。部分报错信息粘贴如下,似乎很明了,但是我现在不想看了:
		-- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
		-- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
		-- Could NOT find Atlas (missing: Atlas_CBLAS_INCLUDE_DIR Atlas_CLAPACK_INCLUDE_DIR Atlas_CBLAS_LIBRARY Atlas_BLAS_LIBRARY Atlas_LAPACK_LIBRARY) 
		-- Could NOT find BLAS (missing: BLAS_LIBRARIES) 
		-- LAPACK requires BLAS
		-- A library with LAPACK API not found. Please specify library location.
		-- Found apache ant: /usr/bin/ant (1.10.5)
		-- Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH) 
		-- VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file
		 > /home/pi/Downloads/opencv-4.1.1/modules/calib3d

目前尝试的解决方法是重新建一个build文件夹(原来的可以删掉,也可以改个名儿扔在原来地方),在里面重新编译。
这次还make的时候还没有报错,不过每次到百分之八十多的一个地方就卡住不动了:
stop
我对树莓派swap进行了扩容(参考第20点)。耐心等了一下午,终于没有error地make完了。
进行下一步!
(一般来说直接make不会出这么多破问题,要是有了上述问题,删掉这个build文件夹,重新建一个,再来一遍就好了。)
6. sudo make install

安装好之后可以自己测试一下,官网上有方法。

15. 各种压缩文件的解压方式

		$ xz  -d     ***.tar.xz
		$ tar -xvf   ***.tar
		$ tar -zxvpf ***.tar.gz
		$ tar -jxvpf ***.tar.bz2
		$ unzip ***.zip

16. 删除文件或文件夹

  • 删除文件
    • 带提示的:rm -i filename
    • 不带提示的:rm filenamerm -f filename
  • 删除文件夹
    • 带确认的:rm -ir filedir
    • 不带确认的:rm -rf filedir

17. 修改文件或文件夹名称

  • 使用mv(move)指令,格式为:
    mv 原文件名 目标文件名

18. 树莓派开热点

  • 配置ap热点及自启动,参考文章:用树莓派3B+开AP热点
  • 首先关掉wlan0,因为Your adapter can not be a station (i.e. be connected) and an AP at the same time:
    sudo ifconfig wlan0 down
  • 创建WiFi热点使用GitHub上一个开源项目: https://github.com/oblique/create_ap
    • 将代码copy到本地,安装:
      sudo git clone https://github.com/oblique/create_ap
      cd create_ap
      sudo make install
    • 安装依赖的库
      sudo apt-get install util-linux procps hostapd iproute2 iw haveged dnsmasq
    • 输入ifconfig显示网络接口
    • 打开热点
      sudo create_ap --no-virt wlan0 eth0 lovelypi raspberry123
      • 其中–no-virt是一个参数,如果没有的话我这边会报warning;wlan0是要发出去的口,eth0是我连了网线的口。
  • 开机自启动
    • 在/etc/rc.local最后添加
      sudo create_ap --no-virt wlan0 eth0 lovelypi raspberry123 &
      wifi
      重启树莓派。
      还有一个方法,我还没试:树莓派3B开热点并自动启动
      给树莓派的eth0配置一个静态ip地址:sudo ifconfig eth0 192.168.12.1 (我也不知道这步要干啥,先别做吧。。。)

19. 树莓派配置wifi

  • sudo iwlist wlan0 scan列出所有可连接wifi
  • 更改wifi配置文件:
    sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
  • 在文件的底部添加下面内容:
		network={
		    ssid="Your_wifi_ssif"
		    psk="Your_wifi_password"
		}
  • 保存退出(:wq)

  • 几秒钟后应该就会连接上wifi

    • 附:开关wifi的方式:
    		sudo ifconfig wlan0 down
    		sudo ifconfig wlan0 up
    
  • 更多内容可以参考文章:树莓派 3B+ 配置无线WiFi

  • 另一个更简便的方法是直接进树莓派系统设置,在里面连接wifi:
    sudo raspi-config

20. 扩展树莓派SWAP分区

21. 两台电脑间用nfs远程传输文件

  • nfs(Network File System,网络文件系统),可以在两台电脑上共享文件。(包括树莓派和电脑之间)
  • 以下分为两部分,一是电脑把文件挂载上去,二是树莓派获取文件
  • 电脑将文件挂载上去:
    • 先安装相关服务:
      sudo apt-get install nfs-common nfs-kernel-server
      sudo apt-get install portmap
      • 第二条指令执行完显示下面这个,所以这条语句可能没啥用。
        portmap
    • 修改export里面的设置,命令为:
      sudo vim /etc/exports
    • 将原文注释掉,加上要共享的文件夹。语法为:
      • 前面是文件夹路径;
        • 注意:一定要每一步都写对写完整,并且和后面树莓派要访问的路径一致,否则在后面mount时会出现reason given by server: No such file or directory这样的报错。
      • *表示所有ip均可共享,若要指定某个ip则用其具体ip地址替代;
      • 括号里面是选项,参数说明:
        • ro 只读访问
        • rw 读写访问
        • sync 所有数据在请求时写入共享
        • async nfs在写入数据前可以响应请求
        • secure nfs通过1024以下的安全TCP/IP端口发送
        • nsecure nfs通过1024以上的端口发送
        • subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
        • no_subtree_check 不检查父目录权限。
      • 举例如下图:
        export
    • 冒号加wq,保存并退出编辑;
    • 启动nfs服务:
      sudo /etc/init.d/nfs-kernel-server restart
    • 检查是否启动:
      showmount –e
      startnfs
    • 至此电脑就将nfs服务设置好了。
  • 树莓派端设置:
    • 第一次需要安装nfs相关服务(pi可能自带了)
      sudo apt install nfs-common
    • 接收文件:
      • 在本地建一个文件夹用于挂载发送方的节点,比如
        mkdir pcshare
      • 用mount指令将发送方节点挂载到该文件夹下,格式为:
        sudo mount 发送方的ip:发送方文件夹路径 本地要挂载到的文件夹
        比如:
        sudo mount 192.168.1.107:/home/glourier/picar/pishare pcshare
      • 此时,刚才新建的文件夹就变成一个共享文件夹。打开该文件夹,可以看到里面的共享文件:
        cd pcshare
        ls
      • 将共享文件夹里的内容拷贝到本机其他地方即可,用cp指令(copy):
        cp [选项] 源文件或目录 目标文件或目录
        • 拷贝结束后,为了检查传输是否出错,可以核对双方md5信息。
          • md5是……
          • md5sum 文件名称可以查看该文件md5信息。
          • checksum指令可以核对,恩,怎么用呢?
  • 结束服务
    使用umount指令加共享文件夹名称即可结束该文件夹的共享状态,比如
    sudo umount pcshare

0. 注意事项

  • 为避免树莓派因不正常关机造成的系统错误,树莓派关机时不要直接拔掉电源,而是使用shutdown命令先关机。
  • 显示没有权限的时候可以sudo嗷。

00. 血泪史

00.1 为了关掉树莓派连接到电脑的wlan0

  • 树莓派不可以同时连接wifi和开热点。所以为了让树莓派开热点,我需要关掉之前树莓派连接到电脑的wlan0,我参考了一种更改配置文件的方法。
    (可能是我没有理解到更改配置的精髓,所以在下面这个文件里加了后面那两句之后小车就挂了)
    in
    • 后面我用了reboot命令让树莓派重启,可是它断开之后就再也连不上了。
    • 树莓派之前一直是通过网线连接电脑,电脑开了共享网络。
      • 现在arp -a看不到树莓派的MAC地址了,那里显示incomplete,ping不通,ssh不上;
      • 通过网线把树莓派连接到路由器上,尽管路由器的DHCP里有它,但是已连设备里没有,而且依旧ping不通,ssh不上,显示no route to host;
      • 取下树莓派的内存卡,通过读卡器连接到电脑上,到树莓派系统里找到我改了关键文件的地方(/etc/network/interfaces),直接鼠标双击打开文件,显示是只读文件,没有权限更改;
      • 在命令行打开文件所在目录,用sudo把加了的那两行删掉,保存,弹出。
      • 重新把SD卡装回树莓派,就可以了。
    • 幸好挽回了,不然就要重装系统了。

猜你喜欢

转载自blog.csdn.net/weixin_42136833/article/details/102576353