树莓派4B作为一款高性能的单板计算机,在机器人开发领域有着广泛的应用。选择Ubuntu 20.04 Server版作为操作系统,主要是考虑到其对ROS Noetic的完美支持。相比带桌面的版本,Server版更加轻量,能节省宝贵的系统资源。
首先需要准备一张至少16GB的microSD卡(建议使用U3级别的存储卡以获得更好的性能)。官方推荐的Raspberry Pi Imager工具确实是最便捷的选择,但要注意的是:
注意:虽然Ubuntu 22.04等新版本也可用,但ROS Noetic官方仅支持到20.04,这也是我们坚持使用这个LTS版本的主要原因。
插入SD卡启动后,系统会要求设置初始用户和密码。这里有几个关键点需要注意:
bash复制sudo apt update
sudo apt install openssh-server -y
sudo systemctl enable ssh
如果需要图形界面(虽然不推荐),可以通过以下命令安装:
bash复制sudo apt install ubuntu-desktop -y
但要注意这会占用约2GB的额外存储空间,并可能影响系统实时性能。
稳定的网络连接是无人机开发的基础。树莓派4B提供了有线以太网和双频WiFi 5(802.11ac)支持,我们需要针对不同场景进行优化配置。
当有可用有线网络时,建议优先使用,因为:
编辑网络配置文件:
bash复制sudo nano /etc/netplan/50-cloud-init.yaml
典型配置示例:
yaml复制network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
dhcp4: true
addresses: [192.168.99.1/24]
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
应用配置:
bash复制sudo netplan apply
对于移动应用场景,可靠的WiFi自动连接至关重要。推荐使用NetworkManager方案:
安装必要工具:
bash复制sudo apt update
sudo apt install network-manager wireless-tools -y
设置国家码(中国为CN):
bash复制sudo iw reg set CN
扫描可用网络:
bash复制sudo nmcli device wifi rescan
sudo nmcli device wifi list
连接指定WiFi并设为自动连接:
bash复制sudo nmcli dev wifi connect "你的SSID" password "你的密码"
sudo nmcli connection modify "你的SSID" connection.autoconnect yes
实战技巧:如果遇到连接不稳定,可以尝试禁用电源管理:
bash复制sudo iwconfig wlan0 power off
对于需要固定IP的场景(如地面站连接),可以这样配置:
yaml复制network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
显著提升软件下载速度:
bash复制sudo sed -i 's/ports.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo apt update
推荐使用一键安装脚本:
bash复制wget http://fishros.com/install -O fishros && . fishros
在交互菜单中选择:
安装完成后验证:
bash复制source /opt/ros/noetic/setup.bash
roscore &
应该能看到ROS master正常启动。
关闭图形界面(如果安装了):
bash复制sudo systemctl set-default multi-user.target
sudo systemctl isolate multi-user.target
调整交换空间(建议512MB-1GB):
bash复制sudo nano /etc/dphys-swapfile
# 修改CONF_SWAPSIZE=1024
sudo systemctl restart dphys-swapfile
禁用不必要的服务:
bash复制sudo systemctl disable avahi-daemon
sudo systemctl disable bluetooth
安装MAVROS核心包:
bash复制sudo apt install ros-noetic-mavros ros-noetic-mavros-extras -y
安装地理数据库(必须):
bash复制sudo /opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh
这个过程可能需要10-30分钟,取决于网络速度。
验证安装:
bash复制rospack find mavros
应该返回/opt/ros/noetic/share/mavros
首先确认飞控设备节点:
bash复制ls /dev/ttyACM*
典型输出可能是/dev/ttyACM0
启动MAVROS节点(以PX4为例):
bash复制roslaunch mavros px4.launch fcu_url:=/dev/ttyACM0:115200
连接状态检查:
bash复制rostopic echo /mavros/state -n 1
关键是要看到connected: true
权限问题:
bash复制sudo usermod -a -G dialout $USER
sudo reboot
波特率不匹配:
连接不稳定:
bash复制sudo chmod 666 /dev/ttyACM*
bash复制mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make
source devel/setup.bash
创建功能包:
bash复制cd ~/catkin_ws/src
catkin_create_pkg offboard_control std_msgs mavros_msgs geometry_msgs roscpp
典型offboard_node.cpp结构:
cpp复制#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/SetMode.h>
int main(int argc, char **argv) {
ros::init(argc, argv, "offboard_control");
ros::NodeHandle nh;
// 在这里添加你的控制逻辑
}
修改CMakeLists.txt:
cmake复制add_executable(offboard_node src/offboard_node.cpp)
target_link_libraries(offboard_node ${catkin_LIBRARIES})
编译并运行:
bash复制cd ~/catkin_ws
catkin_make
rosrun offboard_control offboard_node
安装必要工具:
bash复制sudo apt install python3-catkin-tools python3-osrf-pycommon
创建Python包:
bash复制cd ~/catkin_ws/src
catkin_create_pkg py_control rospy mavros_msgs geometry_msgs
典型Python节点示例(py_control_node.py):
python复制#!/usr/bin/env python3
import rospy
from geometry_msgs.msg import PoseStamped
def main():
rospy.init_node('py_control_node')
# 添加你的控制逻辑
if __name__ == '__main__':
main()
设置可执行权限:
bash复制chmod +x py_control_node.py
对于需要严格实时性的应用:
bash复制sudo apt install linux-rt-rpi4
sudo reboot
验证实时内核:
bash复制uname -a
应该看到包含PREEMPT RT字样
安装监控工具:
bash复制sudo apt install lm-sensors
sensors
设置温度阈值:
bash复制sudo nano /etc/default/raspi-firmware-custom
添加:
code复制temp_soft_limit=70
temp_limit=80
检查电源状态:
bash复制vcgencmd get_throttled
理想输出是throttled=0x0,其他值表示遇到过压/欠压情况。
建议使用官方5V/3A电源,或质量可靠的PD充电器。
安装VSCode Server:
bash复制curl -fsSL https://code-server.dev/install.sh | sh
systemctl --user enable --now code-server
配置ROS环境变量:
bash复制echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
使用rosbag记录数据:
bash复制rosbag record -a -O flight.bag
回放数据:
bash复制rosbag play flight.bag --clock
安装htop:
bash复制sudo apt install htop
实时监控:
bash复制htop
关键指标: