树莓派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记录 的相关文章

  • 使用 openCV 锐化视频图像

    我想使用 OpenCV 锐化我的图像 我在网上查看了一个示例 该示例正在对灰度图像执行锐化 我尝试了它 它工作得很好 然而 我现在尝试做同样的事情 但使用 RGB 颜色 所以我分别在三个通道上执行相同的功能 但它没有给我任何结果 图像与原始
  • 从一个 Mat 复制到另一个 Mat 仅接近黑色像素

    I have Mat difference其中有一些黑色像素 或者几乎是黑色像素 gt 如果发生地震 建筑物会移动等 并且Mat current它由具有自然色彩的真实图像组成 我想替换中的像素Mat current这些黑色像素Mat dif
  • 检测骰子的上侧

    是否可以检测骰子的上面 虽然从顶部看这将是一项简单的任务 但从许多角度来看 可以看到多个侧面 Here is an example of a dice feel free to take your own pictures 您通常想知道自己
  • `opencv.android.JavaCameraView` 和 `opencv.android.NativeCameraView` 有什么区别

    正如主题中所述 有什么区别opencv android JavaCameraView and opencv android NativeCameraView 与其他主要优点相比 有哪些优点可以提供更多选择 来自OpenCV 文档 http
  • 如何将 opencv mat 图像转换为 gdi 位图

    我想将 openCV Mat 文件转换为 GDI 位图图像 我找不到任何有关如何执行此操作的信息 我认为没有直接的方法可以做到这一点 但我希望它不涉及将其写入文件并读回 http opencv users 1802565 n2 nabble
  • OpenCV 完美识别物体

    我有一个应用程序 我想一次跟踪 2 个在图片中相当小的对象 该应用程序应该在 Android 和 iPhone 上运行 因此算法应该是高效的 对于我的客户来说 如果我们提供一些模式以及附加到要跟踪的对象的软件 以获得易于识别的目标 那就完全
  • OpenCV Android - 无法解析相应的JNI函数

    我正在尝试按照此处概述的本教程使用 Opencv 设置 Android Studio https www youtube com watch v OTw GIQNbD8 https www youtube com watch v OTw G
  • OpenCV,捕获的视频比原始相机视频运行得更快!

    我正在使用 openCV 从相机捕获视频并将其存储到 avi 文件 问题是当我完成捕获并运行 avi 文件时 视频流看起来速度很快 这是代码 void main CvCapture capture cvCaptureFromCAM 0 in
  • 如何在 opencv 3.0 Beta 中从文件读取 UMat?

    我想用UMat所以我的代码可以使用 OpenCL OpenCV 3 0 0 Beta 在 GPU 和 CPU 上运行 但我找不到将图像文件读入的方法UMat或转换一个Mat to UMat 如何将图像读入UMat 样品用于Mat to UM
  • Haar训练时正样本和负样本使用多少张图片?

    我已经阅读了大量有关 Haar 训练的内容 但我不清楚应该为正样本集和负样本集使用多少图像 我看到建议使用很多图像 有些人推荐数千张 我也不清楚正负样本图像的数量是否应该相同 这是关于 Haar 训练的最佳教程 你试过这个吗 http no
  • 使用 cv2 在 python 中创建多通道零垫

    我想用 cv2 opencv 包装器在 python 中创建一个多通道 mat 对象 我在网上找到了一些例子 其中 c Mat zeros 被 numpy zeros 替换 这看起来不错 但似乎没有多通道类型适合 看代码 import cv
  • opencv如何使用鼠标事件不规则地选择图像区域? c/c++ [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 最近在学习opencv 有没有办法使用鼠标事件选择图像区域 我已经尝试过三角形的了 如果我想选择特定区域而不是三角形怎么办 谢谢你 我对此进
  • 操作系统和元操作系统有什么区别

    最近听到这个词元操作系统当我学习ros时 你能帮我区分一下吗操作系统 and 元操作系统 ROS 是什么和不是什么最好的解释是这张纸 http www robotics stanford edu ang papers icraoss09 R
  • 如何将k4a_image_t转换为opencv矩阵? (Azure Kinect 传感器 SDK)

    我开始尝试使用 Azure Kinect Sensor SDK 我经历了官方操作指南 https learn microsoft com en us azure Kinect dk about sensor sdk sensor sdk 我
  • 在 Python 中使用音频流 RTMP 通过管道和 OpenCV 到 FFmpeg

    我正在尝试使用音频流式传输 FFmpeg 我将在下面展示我的代码 导入模块 import subprocess as sp 创建变量 rtmpUrl rtmp a rtmp youtube com live2 key camera path
  • 将向量 转换为大小为 (n x 3) 的 Mat,反之亦然

    我有 Point3d 向量 向量形式的点云 如果我使用 OpenCV 提供的转换 比如 cv Mat tmpMat cv Mat pts Here pts is vector
  • 如何识别与我的对象相关的轮廓并找到它们的几何质心

    问题陈述和背景信息 EDIT 约束 法兰上的红色会随着时间的推移而变化 所以我此时不会尝试使用颜色识别来识别我的对象 除非它足够强大 此外 外部照明也可能是一个因素 因为将来这将是在室外区域 我有 RGB 深度相机 有了它 我就能捕捉到这个
  • 如何使用Android opencv使图像的白色部分透明

    我无法链接超过 2 个网址 因此我将我的照片发布到此博客 请在这里查看我的问题 http blog naver com mail1001 220650041897 http blog naver com mail1001 220650041
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数

随机推荐

  • 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