树莓派4B ubuntu20.04 安装ROS noetic和opencv记录

2023-05-16

文章目录

  • 准备
  • 换源
  • 安装ROS
  • 一些遇到的坑
    • 连接wifi
    • 添加秘钥时出错 E:could not get lock /var/lib/apt/list……
    • catkin_make时出现错误:Could not find the required component 'serial'.
    • RLException: [xxx.launch] is neither a launch file in package [abcdefg] nor is [abcdefg] a launch file name
    • 使用python代码时不能import
    • 找不到自定义的msg
  • 常用ROS操作
    • 创建功能包
    • 创建自己的msg
  • 安装opencv
    • 安装
    • 使用opencv中遇到的坑
      • 打开摄像头,提示cannot open camera by index
      • 报错AttributeError: module ‘cv2.cv2‘ has no attribute ‘TrackerCSRT_create‘
  • 其他的坑
    • 查看树莓派的ip
    • 赋予文件777权限:任何用户可读写执行
    • 安装raspi-config
    • 树莓派ubuntu系统RPi.GPIO引脚库需要root权限问题 不使用sudo操控RPi库方法
    • 用windows自带的远程桌面连接树莓派时出现黑屏,或只有终端能显示的问题

准备

  • 树莓派4B
  • ubuntu20.04(用的是ubuntu server 加安装桌面)
  • 自带的python3.8.10

换源

我没有换源,用的是默认源

安装ROS

参考链接:

  • Ubuntu20.04以及ROS系统的安装(避坑指南)
  • 【超详细】树莓派4B+Ubuntu18.04.5+ROS配置安装教程
  • 树莓派4B安装ROS的方法总结
  1. 打开软件更新 Software&Update,勾选所有Ubuntu Software页面的选项
  2. 添加ROS软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  1. 添加秘钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  1. 安装
sudo apt update
sudo apt install ros-noetic-desktop-full
  1. 初始化rosdep(这一步我跳过了没有做,有没有问题再说吧)
sudo rosdep init
rosdep update #输入这一句时不能添加sudo,否则会导致系统混乱
  1. 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  1. 安装rosinstall
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
  1. 启动roscore
roscore

测试小乌龟,分别再另外两个终端页面里输入

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key 

安装成功
9.通过以下命令创建并构建一个catkin工作空间。

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一些遇到的坑

连接wifi

最开始连上显示器开机,发现wifi列表里什么都没搜索到

使用

sudo lshw

查看是否有wlan0
发现有wlan0,于是重启,这次有wifi了

添加秘钥时出错 E:could not get lock /var/lib/apt/list……

解决参照:Could not get lock /var/lib/apt/lists/lock
我的步骤:
用:

ps aux | grep "[a]pt"

查看有没有占用apt的进程。
这里我找到了一个进程,并等待那个进程自己结束,然后就ok了。参考链接里说了可以用kill的方式去杀进程,但是在这个报错出现时,系统有提示过不要简单粗暴的删除锁什么的,因此我没敢轻举妄动。没办法等进程自己结束的,可以试试参考链接里的方法

catkin_make时出现错误:Could not find the required component ‘serial’.

当catkin_make时出现找不到serial组件的错误。此时需要安装serial。
使用sudo apt-get install ros-<distro>-serial下载 ROS 对应版本distro的工具包。

sudo apt-get install ros-noetic-serial

如果是roscpp、 rospy、 rosmsg等其他组件找不到,尝试使用同样的办法安装

RLException: [xxx.launch] is neither a launch file in package [abcdefg] nor is [abcdefg] a launch file name

  1. 包名写错了
  2. 工作空间真的没有这个包存在
  3. 包所在的ros工作空间没有在ros环境中,此时可以按照以下步骤进行检查:
env | grep ros 

查看环境设置
ROS_PACKAGE_PATH= 是否有你工作空间的路径
若没有则设置

gedit ~/.bashrc 

在该文件的最后添加

source ~/catkin_ws/devel/setup.bash
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/

然后重启bashrc

source ~/.bashrc

查看ROS路径是否添加上

echo $ROS_PACKAGE_PATH

使用python代码时不能import

在代码开头加上下面两行:

#!/usr/bin/env python3
#!coding=utf-8

找不到自定义的msg

catkin_make后再执行:

source devel/setup.bash

常用ROS操作

创建功能包

ROS的学习(四)创建一个ROS包

catkin_create_pkg <package_name> [depend1] [depend2] …… [depend1]
# 这里直接使用如下命令进行创建
catkin_create_pkg abc_topic roscpp rospy std_msgs geometry_msgs 

创建自己的msg

在功能包下创建msg文件夹,写好的.msg文件放进去
在功能包中的 package.xml 文件中添加编译依赖与执行依赖

  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>
  <!-- exce_depend 以前对应的是 run_depend 现在非法 -->

在功能包中的 CMakeLists.txt 中编辑相关配置

  • 在 find_package 中添加编译依赖
message_generation
# 加入 message_generation,必须得有 std_msgs
  • 在 add_message_files 中添加自定义的msg文件名,注意FILES那行也取消注释
  • 解除 generate_messages 的注释(不需要做修改)
  • 在 catkin_package 处添加执行的依赖
  CATKIN_DEPENDS roscpp rospy std_msgs message_runtime

安装opencv

安装

参考链接:树莓派4B安装ubuntu20,opencv,pytorch,miniconda3,……
由于只用python进行开发,所以只进行下面的操作:

pip install opencv-python

验证是否成功:

python3
import cv2
cv2.__version__

出现版本号代表成功

使用opencv中遇到的坑

打开摄像头,提示cannot open camera by index

检查设备里是否有video0或者video1

ls /dev

报错AttributeError: module ‘cv2.cv2‘ has no attribute ‘TrackerCSRT_create‘

需要安装对应版本的opencv-contrib-python库,我尝试过重新卸载再安装opencv-pythonopencv-contrib-python,然而都没有用,尝试了以下方法成功了:
1、卸载opencv-pythonopencv-contrib-python

pip3 uninstall opencv-python
pip3 uninstall opencv-contrib-python

2、到清华镜像下载对应Python版本的opencv-pythonopencv-contrib-python
网址:
Links for opencv-python (tsinghua.edu.cn)
Links for opencv-contrib-python (tsinghua.edu.cn)
其中,opencv_python指扩展库名,cp39指适配的python3.9版本,按自己的python版本选,win_amd64是电脑操作系统位数,按自己的操作系统选。

3、运行以下代码安装opencv-pythonopencv-contrib-python。.whl文件的位置换成刚下载的那两个,注意先cd到下载的文件夹里

pip3 install opencv_python-3.4.15.55-cp39-cp39-win_amd64.whl
pip3 install opencv_contrib_python-3.4.15.55-cp39-cp39-win_amd64.whl

其他的坑

查看树莓派的ip

sudo apt install net-tools
ifconfig

赋予文件777权限:任何用户可读写执行

sudo chmod 777 文件名

安装raspi-config

在ubuntu server上安装raspi-config并开启CSI摄像头
官网地址
进入官网地址,下载最新的deb程序,然后进入文件夹安装:

sudo dpkg -i raspi-config_xxxxxxxx.deb 

树莓派ubuntu系统RPi.GPIO引脚库需要root权限问题 不使用sudo操控RPi库方法

直接搜会出现的答案是:先安装rpi.gpio-common,然后添加用户组再重启什么的,但是不论是把用户添加进dialout还是gpio组,都不能解决问题

sudo apt install rpi.gpio-common
sudo apt --fix-broken install

找到的管用的方法:
参考链接:树莓派ubuntu系统RPi引脚库权限问题 不使用sudo操控RPi库方法
RPi.GPIO提供了一个获取权限的脚本:create_gpio_user_permissions.py,内容如下

import grp
import subprocess

def ensure_gpiogroup():
    try:
        grp.getgrnam('gpio')
    except KeyError:
        print('GPIO group does not exist - creating...')
        subprocess.call(['groupadd', '-f', '-r', 'gpio'])
        subprocess.call(['adduser', 'pi', 'gpio'])
        # in future, also for groups:
        #   spi
        #   i2c
        add_udev_rules()

def add_udev_rules():
    with open('/etc/udev/rules.d/99-gpio.rules','w') as f:
        f.write("""SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'"
SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"
""")

if __name__ == '__main__':
    ensure_gpiogroup()

可以直接把这段代码复制下来放进本地创建的create_gpio_user_permissions.py 中,运行一下,然后重启(不重启的话还是不行!)

python3 create_gpio_user_permissions.py
reboot

用windows自带的远程桌面连接树莓派时出现黑屏,或只有终端能显示的问题

参考链接:完美方案——解决XRDP连接黑屏,以及桌面优化!
重点就是,如果树莓派连着显示器,也就是已经本地登录的状态,此时远程就不显示,需要在显示器上操作log out,这样远程就显示了。
同理,开机时不接显示器,直接用远程桌面登录,那就会直接显示(我的是登录后先黑屏十几秒,然后灰一下,就显示出来了正常桌面了)
附上安装的东西:

sudo apt-get install xrdp
sudo apt-get tightvncserver
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派4B ubuntu20.04 安装ROS noetic和opencv记录 的相关文章

  • 改进 cvFindChessboardCorners

    不幸的是 我无法找到我的问题的任何解决方案 我想做的是使用 OpenCV 方法改进结果cvFindChessboardCorners为了能够实现更好的相机校准 因为我认为这就是为什么我在不扭曲 校正图像时得到较差结果的原因 就像我之前的问题
  • OpenCV Java:如何访问 findNonZero() 返回的坐标?

    在我的 Android 应用程序中 我正在使用findNonZero 查找并访问二值图像中的白点 我得到了图像 binMat大小 595 800 作为方法的输入 然后我有 Mat wLocMat Mat zeros binMat size
  • Python OpenCV cv.WaitKey 在 Ubuntu 模 256 映射上正确返回奇怪的输出

    我正在使用 OpenCV 2 2 运行 Ubuntu 11 10 Lenovo T400 我相信导入是通过 import cv2 cv as cv 完成的 如果我只是 导入简历 也会发生这个问题 我最近开始遇到这个问题 这有点奇怪 我不知道
  • 如何对使用 SimpleITK 读取的 DICOM 图像进行直方图均衡化

    我正在尝试对从 nii gz 文件读取的所有图像进行直方图均衡 我试过这段代码 import SimpleITK as sitk flair file content gdrive My Drive Colab Notebooks FLAI
  • 如何使用python opencv2减去两个图像以获得前景对象

    有没有办法在 python opencv2 中减去两个图像 图片 1 任何图像 例如房屋图像 静态图像 图 2 带有物体的同一图像 在房子里 一个人站着 静态图像 动态物体 图片 3 图片 2 图片 1 如果我们减去Image2 from
  • 使用python opencv从zip加载图像

    我能够成功地从 zip 加载图像 with zipfile ZipFile test zip r as zfile data zfile read test jpg how to open this using imread or imde
  • 在白色背景上将透明 PNG 保存为 JPEG

    假设我有一张 BGRA 图像numpy数组看起来非常像这样 233 228 230 128 233 228 230 128 233 228 230 0 164 160 159 65 199 197 196 65 255 255 254 12
  • 在 Mac OS X 上使用 pip 安装 pyopencv

    我正在尝试在 OS X Mountain Lion 中使用 pip 安装 pyopencv 但导入 setuptools 失败 以下是我的作品 setuptools中的 库 是什么 我以前没见过 我已经通过 homebrew 和其他东西安装
  • 从霍夫线中选择线

    I m using Hough Lines to do corner detection for this image i plan to find the intersection of the lines as the corner T
  • 如何在 OpenCV 中更好地计算射线线段交点?并得到它的交点和距原点的距离?

    我有 4 条线段 A B C 和 D 每条线都表示为两个点 例如 线A由点A1和点A2表示 我想要的是 点 X 即线 A 射线与线 B 相交的点 X与A1 原点 之间的距离 测试相交时 线 A 射线不应 与线段 D 相交 与线段C相交 我该
  • 使用高斯混合模型进行皮肤检测

    我正在根据以下进行皮肤检测算法本文 http www cc gatech edu rehg Papers SkinDetect IJCV lowres pdf 第 21 页有两个模型 高斯皮肤混合模型和非皮肤颜色模型 第一个皮肤检测模型效果
  • 尝试导入 cv2(opencv-python) 包时出错

    我正在尝试使用 cv2 opencv python 包访问我的网络摄像头 当我尝试导入它时 出现此错误 Traceback most recent call last File server py line 6 in
  • 在 OpenCV 中对 RGB 图像进行阈值处理

    我有一个彩色图像 我想在 OpenCV 中设置阈值 我想要的是 如果任何 RGB 通道低于某个值 则将所有通道中的值设置为零 即黑色 因此 我使用 opencv 阈值函数 cv Mat frame thresholded read fram
  • 使用 OpenCL 支持构建 OpenCV

    在 CMake 中 我使用 OpenCL Enable ON 构建了 OpenCV 它自动检测到OPENCL INCLUDE DIR路径但是OPENCL LIBRARY即使单击配置后也是空的 为了OPENCL LIBRARY我也没有看到浏览
  • Python opencv排序轮廓[重复]

    这个问题在这里已经有答案了 我正在关注这个问题 如何从左到右 从上到下对轮廓进行排序 https stackoverflow com questions 38654302 how can i sort contours from left
  • 使用 OpenCV 进行车牌识别

    我有一个项目 需要使用 OpenCV 识别汽车的车牌 我想加载数字或字母的图像 让 OpenCV 识别它并将其打印到控制台 有一个函数可以做到这一点吗 如果没有 我该怎么办 Note 我正在研究灰度级 请帮忙 我必须在一周后完成 谢谢你的快
  • cv2.imread:检查图像是否正在被读取

    我正在用 python 编写一个 OpenCV 程序 在某些时候我有类似的东西 import cv2 import numpy as np img cv2 imread myImage jpg do stuff with image her
  • 屏幕截图中低分辨率文本的 OCR

    我正在编写一个 OCR 应用程序来从屏幕截图图像中读取字符 目前 我只关注数字 我的方法部分基于这篇博文 http blog damiles com 2008 11 basic ocr in opencv http blog damiles
  • opencv 视频上的颜色阈值

    I am thresholding for a color range in an opencv video The goal is to seperate the B mode black and white information on
  • brew 链接 jpeg 问题

    我正在尝试安装opencv在 Mac OSX Lion 上 brew install opencv 我收到以下错误 以及其他一些类似的错误 Error The linking step did not complete successful

随机推荐

  • Latex自动化学报模板学习和问题解决总结

    根据自动化学报模板的自己摸索 目录 根据自动化学报模板的自己摸索1 前言2 模板内部文件简介3 生成自己的模板4 内部代码理解关于aas cls和aas cfg文件整个模板固定结构 5 编译时有用的模板双栏显示用的小表格插入小图片 6 遇到
  • SLAM算法总结1

    目录 前言旋转矩阵 xff0c 旋转向量 xff0c 四元数李群李代数BCH公式非线性最小二乘一阶和二阶梯度法一阶梯度法二阶梯度法 xff08 牛顿法 xff09 高斯牛顿法代码实现手写 xff08 片段 xff09 用Ceres实现 xf
  • ROS下使用串口发送数据

    ROS下使用串口发送数据 span class token macro property span class token directive keyword include span span class token string lt
  • 新手如何使用postman(新手使用,简单明了)

    如何使用postman 一 了解postman 1 什么是postman xff1f 软件测试用来做接口测试的工具 2 如何下载postman https www getpostman com xff08 官方下载 xff09 链接 xff
  • 字符串的截取、分割,截取指定字符前面(后面)所有字符

    关于字符串截取问题 xff0c 从网上搜到总结一下 xff1a 已知一个字符串 xff0c 截取第一个指定字符后面所有字符 首先得知道indexof 34 34 的用法 xff0c 例如String i 61 abcdefg xff0c 那
  • [资料分享] 好赢60A无刷电调设置说明书【详细】

    完全针对车模而设计的全新程序算法 xff0c 具有优异的启动效果 加速性能 刹车性能及线性度 xff1b 支持所有无感 xff08 即无霍尔传感器 xff09 无刷电机 xff1b 高品质用料 xff0c 具有强大的耐电流能力 xff1b
  • 单片机学习笔记 —— 串口通信原理

    一 串口通信电路 电路图 xff1a 说明 xff1a 当RXD TXD为低电平时 xff0c 对应的led灯会亮起 二 串口通信控制寄存器 下图为80C51串行口的结构 xff1a SCON serial Control Register
  • 四种方法计算字符串的长度

    在这里我提供四种方法计算字符串的长度 1 使用递归函数 2 数数 xff0c 从第一个字符开始数数 xff0c 没遇到一个字符 xff0c 长度加一 xff0c 直到遇到 34 0 34 停止数数 3 使用strlen函数 xff0c 使用
  • 汉诺塔问题—C语言实现

    一 题目描述 相传在古印度圣庙中 xff0c 有一种被称为汉诺塔 Hanoi 的游戏 该游戏是在一块铜板装置上 xff0c 有三根杆 编号A B C xff0c 在A杆自下而上 由大到小按顺序放置64个金盘 如下图 游戏的目标 把A杆上的金
  • linux三大剑客

    awk是一种很棒的语言 xff0c 适合文本处理和报表生成 使用方法 awk pattern 43 action filenames 尽管操作可能会很复杂 xff0c 但是语法总是这样 xff0c 其中pattern表示AWK再数据中查找的
  • 数据结构与算法之栈

    目录 顺序栈 xff1a 链式栈 xff1a 栈的使用 xff1a 首先 xff1a 栈是一个特殊的线性表 xff0c 只允许在一端进行插入 xff08 压栈 xff09 和删除元素 xff08 进栈 xff09 xff0c 这一端称为栈顶
  • 二叉树的典型习题总结

    二叉树的三种遍历方式 xff1a 1 给定一个二叉树 xff0c 返回它的前序遍历 root left right 递归实现 xff1a public List lt Integer gt preorderTraversal TreeNod
  • javascript简介及基本语法

    这两天了解到一门新的脚本语言 javascript xff0c 貌似能干的事情好多呀哈哈哈哈 xff0c 言归正传啧 目录 javascript简介 js的简介 js的特点 javascript和java的区别 javascript的组成
  • Postman~做接口测试

    在工作中 xff0c 接口测试势必是最有效的测试途径 因此 xff0c 学习接口测试的基础和工具是很有必要的 xff0c 从Postman开始吧 xff5e 目录 1 接口测试简介 2 接口测试流程及用例设计 3 使用Postman执行接口
  • pytest接口测试自动化框架

    目录 pytest简介及安装 pytest的使用规则 pytest运行方式 主函数方式 命令行方式 跳过 标记及预期失败特殊场景处理 pytest前后置 夹具 pytest高级用法fixture pytest接口断言 pytest结合all
  • 测试的阶段性小小总结

    转眼入职2年之余 xff0c 毕业后就投入测试行业 在日常的工作中也有自己的一些思考和总结 2021到2023是多变的两年 xff0c 加入教培行业 xff0c 受双减政策影响 xff0c 注定艰难 参与了各种类型的测试项目 xff0c 不
  • 关于Charles抓包

    目录 抓包的原理 抓包的步骤 1 下载Charles 2 PC抓HTTPS协议的包 3 移动端抓包步骤 证书的原理 抓包的原理 抓包的软件非常多 xff0c 其实底层逻辑充当了一个中间人代理的角色来对HTTPS进行抓包 xff0c 结合日常
  • Ubuntu下使用CMakeLists.txt管理C/C++代码

    Ubuntu下使用CMakeLists txt管理C C 43 43 代码 一 CMakeLists txt入门知识1 CMakeLists txt的编译方法2 CMakeLists txt的文件内容3 编译的C文件 二 CMakeList
  • C语言中的__FILE__、__LINE__和__func__等预定义宏和注意事项

    C语言预处理要求定义某些对象宏 xff0c 运用这些预定义宏能使调试变得更简单 xff0c 每个预定义宏的名称一两个下划线字符开头和结尾 xff0c 这些预定义宏不能被取消定义 xff08 undef xff09 或由编程人员重新定义 常用
  • 树莓派4B ubuntu20.04 安装ROS noetic和opencv记录

    文章目录 准备换源安装ROS一些遇到的坑连接wifi添加秘钥时出错 E could not get lock var lib apt list catkin make时出现错误 Could not find the required com