树莓派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中发现凸性缺陷? [根据给定的输入图像崩溃..]

    我有一个计算图像凸包的程序 我正在尝试使用此信息来计算fingers存在于输入图像中 从一些冲浪中我发现做到这一点的方法 数手指 是 寻找轮廓 凸包 凸性缺陷 但我在使用凸性缺陷函数时遇到了麻烦 它编译得很好 但在运行时程序会因某些输入图像
  • 将四边形(四边形)拟合到斑点

    应用不同的过滤和分割技术后 我最终得到如下图像 我可以访问一些轮廓检测函数 这些函数返回该对象边缘上的点列表 或者返回一个拟合的多边形 尽管有很多边 远多于 4 个 我想要一种将四边形适合该形状的方法 因为我知道它是应该是四边形的鞋盒的正面
  • 带有 OpenCV 的增强现实 SDK [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用requirements.txt 在 Heroku python Web 应用程序中安装 Dlib?

    我构建了一个涉及机器学习的 Python Flask Web API 但在 Heroku 上部署它时遇到了很多挫折 问题是 我的应用程序依赖于 Dlib 一个库 我似乎找不到在我的 Heroku 服务器中安装的方法 我正在试图解决这个问题
  • 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
  • 收据褪色部分可以恢复吗?

    我有一些包含一些扫描收据的文件 我需要使用 OCR 从中提取文本 由于收据上打印的文字在一段时间后会褪色 导致收据上的某些文字不清晰 影响OCR结果 褪色单词的一些示例 有什么方法可以恢复褪色的部分 以便提高 OCR 结果吗 我在OpenC
  • 在 Python 3.5 64 位上通过 pip 安装 OpenCV

    我尝试安装 OpenCV 但找不到任何合适的 pip 软件包 我决定上网查找有关如何安装它的官方文档 并发现this https opencv python tutroals readthedocs io en latest py tuto
  • bitblt 在 Windows 10 版本 1703 上失败 (15063.138)

    使用 Visual Studio 2017 vc141 以下代码应该从前游戏窗口获取屏幕截图 但现在它返回黑色和空白图像 唯一的游戏问题 尝试过 OpenGL 和 Vulkan ogl 返回黑色 vulkan 返回白色 在升级到 Windo
  • 如何使用 OpenCV 检测图像帧中的对象?

    我正在使用 Raspberry Pi 开发一个漫游器 它将清扫房间并捡起掉落在地上的物体 为了检测物体 我使用了在流动站操作开始时拍摄的参考图像 以及每 10 秒单击一次的图像 新图像 为了确定图像帧是否发生变化 我在参考图像和新图像之间进
  • brew 链接 jpeg 问题

    我正在尝试安装opencv在 Mac OSX Lion 上 brew install opencv 我收到以下错误 以及其他一些类似的错误 Error The linking step did not complete successful
  • opencv createsamples没有错误,但是没有找到样本

    我在用着this http coding robin de 2013 07 22 train your own opencv haar classifier html教程 我正在根据我的正面图像创建大量样本 我正在使用 Windows 这是
  • 我是否必须使用我的数据库训练 Viola-Jones 算法才能获得准确的结果?

    我尝试提取面部数据库的面部特征 但我认识到 Viola Jones 算法在两种情况下效果不佳 当我尝试单独检测眼睛时 当我尝试检测嘴巴时 运作不佳 检测图像的不同部分 例如眼睛或嘴巴 或者有时会检测到其中几个 这是不可能的情况 我使用的图像
  • OpenCV的拼接模块可以拼接平行运动相机拍摄的图像吗?

    我想知道是否缝合 http docs opencv org modules stitching doc stitching html http docs opencv org modules stitching doc stitching
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • 多视图几何

    我从相距一定距离的两台相同品牌的相机捕获了两张图像 捕获了相同的场景 我想计算两个相机之间的现实世界旋转和平移 为了实现这一点 我首先提取了两张图像的 SIFT 特征并进行匹配 我现在有基本矩阵也单应性矩阵 然而无法进一步进行 有很多混乱
  • 从图像坐标获取对象的世界坐标

    I have been following this http docs opencv org modules calib3d doc camera calibration and 3d reconstruction html docume
  • 使用 OpenCV 和/或 Numpy 对两个图像进行 Alpha 混合 [重复]

    这个问题在这里已经有答案了 我想将一个填充纯色的半透明矩形添加到已加载的半透明 PNG 中 这是我正在使用的输入图像示例 该图像加载了标准cv2 IMREAD UNCHANGED标志 以便完美保留 alpha 通道 该输入图像存储在imag
  • 使用 OpenCV 改进特征点匹配

    我想匹配立体图像中的特征点 我已经用不同的算法找到并提取了特征点 现在我需要一个良好的匹配 在本例中 我使用 FAST 算法进行检测和提取 BruteForceMatcher用于匹配特征点 匹配代码 vector lt vector
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo

随机推荐