文章目录
- 准备
- 换源
- 安装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操作
-
- 安装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的方法总结
- 打开软件更新 Software&Update,勾选所有Ubuntu Software页面的选项
- 添加ROS软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- 添加秘钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- 安装
sudo apt update
sudo apt install ros-noetic-desktop-full
- 初始化rosdep(这一步我跳过了没有做,有没有问题再说吧)
sudo rosdep init
rosdep update
- 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 安装rosinstall
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
- 启动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
- 包名写错了
- 工作空间真的没有这个包存在
- 包所在的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
在代码开头加上下面两行:
找不到自定义的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>
在功能包中的 CMakeLists.txt 中编辑相关配置
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-python
和opencv-contrib-python
,然而都没有用,尝试了以下方法成功了:
1、卸载opencv-python
和opencv-contrib-python
pip3 uninstall opencv-python
pip3 uninstall opencv-contrib-python
2、到清华镜像下载对应Python版本的opencv-python
和opencv-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-python
和opencv-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'])
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(使用前将#替换为@)