近期弄个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. 安装桌面环境和远程桌面(这个至少我用到现在可以不用)
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
880

被折叠的 条评论
为什么被折叠?



