树莓派3B+安装ROS Noetic一些总结

近期弄个ros扫图机器人玩玩,准备用家里闲置的3b+做服务器。尝试用一堆esp8266来做底盘等功能,来学习一下ros系统。来达到最便宜的机器人解决方案。

为啥要用ros不用ros2呢,感觉ros2的系统需要服务器资源更多,对于每个node的资源需求更多,怕3B+和esp8266性能吃不消。暂时开始学习ros吧。

好吧,准备

1. 安装ubuntu

# 进入网页 可以选择或者用下面连接直接下载
https://cdimage.ubuntu.com/releases/20.04.5/release/
# 下载
# Raspberry Pi Generic (64-bit ARM) preinstalled server image
# 直接下载url:
https://cdimage.ubuntu.com/releases/20.04.5/release/ubuntu-20.04.5-preinstalled-server-arm64+raspi.img.xz

然后用Raspberry Pi Imager

选择下载的image来烧入!记得!在设置页面缺省打开ssh哦。

BTW: 设置的wlan好像不起作用,设置页面改的密码,在安装之后会被设置成一个encoded的密码。需要系统安装好之后去改。

2. 关闭ubuntu的自动更新设置wifi

切记,先关自动更新哦。wifi设好,还没有来得及改 apt 源,系统就开始更新。这个速度非常慢还会锁apt的lock。

当然,关掉自动更新在后期使用时候也避免时不时的系统变慢问题。

# 关闭系统自动更新
sudo systemctl stop unattended-upgrades
sudo systemctl disable unattended-upgrades

# 删除 upgrade的lock文件确保后续apt install不出问题
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock

然后可以设置wifi了

cd /etc/netplan
sudo vi 50-cloud-init.yaml

文件内容如下,按照自己路由器配置来弄哦

# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    version: 2
    wifis:
        renderer: networkd
        wlan0:
            access-points:
                xxxxxx:
                    password: yyyyyyyy
            dhcp4: true
            optional: true
            addresses: [192.168.1.2/24]
            gateway4: 192.168.1.1

写好配置,重启network服务

sudo netplan apply
#看下连接是否成功
ip a

3. 修改增加swap空间

使用时候发现有的时候服务器很慢,最终发现3b的内存太小,使得服务器内存和swap内存全部占满。修改1G之后问题改善。

sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo vi /etc/fstab

# 修改成功能可以用以下命令来验证
free -h

fstab修改一定要当心哦。在fstab文件的内容最后 添加下面一行后重启

/swapfile swap swap defaults 0 0

4. apt 换源

这个没啥说的。国外源速度不行,换成清华的,顺便吧ros的源也加进去吧。

sudo vi /etc/apt/sources.list

内容如下

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse

# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse

# 以下是清华源的ros的源
deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu focal main

更新一下key也更新一下系统吧

# 添加 ros 的 key
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
sudo apt update
sudo apt upgrade #升级一下系统 - 就是一些系统包一起打包升级了

5. 安装桌面环境和远程桌面(这个至少我用到现在可以不用)

桌面环境可以用树莓派来做开发ros代码。当然不需要的话可以不装。
推荐使用xfce,这个资源用的少。在选择显示核心的时候,选择"lightdm",这个速度快。另外一个试了几次都有这样那样的问题。
sudo apt update
sudo apt install xubuntu-desktop

安装xrdp远程桌面

# 安装xrdp
sudo apt install xrdp 
# 看一下xrdp状态
sudo systemctl status xrdp

# 设置xrdp
sudo adduser xrdp ssl-cert  
sudo systemctl restart xrdp

# 设置防火墙 允许所有机器访问
sudo ufw allow 3389

安装完我这儿出现了黑屏问题按照以下选择运行吧,就能解决

# 修改.ICEauthority文件权限
ls -al ~/.ICEauthority
sudo chown username:username ~/.ICEauthority
sudo service xrdp restart

# 安装缺失的依赖项
sudo apt install dbus-x11
sudo systemctl restart xrdp

# 确保.xsession文件中配置了正确的桌面环境。例如,使用XFCE桌面环境。
echo xfce4-session > ~/.xsession
# 如果是gnome用 
echo gnome-session > ~/.xsession

chmod +x ~/.xsession
sudo systemctl restart xrdp.service

# 重装XRDP和相关包
sudo systemctl disable xrdp
sudo systemctl stop xrdp
sudo apt purge xrdp xserver-xorg-core xserver-xorg-input-all xorgxrdp

sudo apt install xrdp xserver-xorg-core xserver-xorg-input-all xorgxrdp

sudo adduser xrdp ssl-cert
sudo systemctl start xrdp
sudo systemctl enable xrdp

sudo reboot

6. 安装ros

sudo apt install ros-noetic-desktop-full
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential python3-roslaunch

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc

设置远程服务器

这样可以使用性能好一点的机器来开rivx啥的,可以使用资源有限的树莓派来开这些吃资源的服务。

# 在主机服务器设置
export ROS_MASTER_URI=http://192.168.1.2:11311 #主机的地址
export ROS_HOSTNAME=192.168.1.2 #主机的地址

# 在客户端设置
export ROS_MASTER_URI=http://192.168.50.2:11311 #主机的地址
export ROS_HOSTNAME=192.168.50.3 #从机的地址

7. 设置ros服务器

应为和arduino通讯,需要安装服务rosserial

sudo apt-get install arduino
sudo apt-get install ros-noetic-rosserial-arduino
sudo apt-get install ros-noetic-rosserial
sudo apt-get install ros-noetic-rosserial-server
rospack profile

sudo ufw allow 11411/tcp

# 用socket开服务器,缺省的服务器端口是11411
roslaunch rosserial_server socket.launch

8. 设置自动启动服务

这部分按照自己需求来吧。我的方法只用1个service来启动2个服务不是很好

使用 systemctl 启动服务的方法来设置

首先需要ros-local.service文件 (也可以是其他名字 比如: ros.service)

创建rc.local执行文件

使用sudo systemctl enable rc-ros.service来设置服务

sudo vi /lib/systemd/system/rc-ros.service

文件内容如下

[Unit]
Description=/etc/rc-ros.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc-ros.sh
After=network.target

[Service]
Type=forking
ExecStart=su - onwebbe -c "/etc/rc-ros.sh"
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
Restart=on-failure
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
Alias=rc-local.service

创建/etc/rc-ros.sh

#!/bin/bash
source /opt/ros/noetic/setup.bash
roscore &
sleep 30
roslaunch rosserial_server socket.launch &

修改权限

sudo chmod +x /etc/rc-ros.sh

systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接,当然,直接在/etc/systemd/system下创建服务文件也行

启用rc-local.service服务,并检查状态

sudo systemctl enable rc-local.service 
sudo systemctl status rc-local.service
好吧服务器已成:D
后面好好研究ros吧。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值