树莓派4B, ubuntu20.04, 安装Ros Noetic[踩坑记录]

一、安装过程

1. 硬件要求

  • 树莓派4B (建议4GB或8GB内存版本)

  • 至少16GB的microSD卡

2. 下载并安装Ubuntu 20.04

Ubuntu 20.04 LTS (Focal Fossa) for Raspberry Pi

使用Raspberry Pi Imager或BalenaEtcher将镜像写入microSD卡

3. 安装ROS Noetic

​# 设置sources.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list'​# 设置密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654​# 安装ROS Noetic完整版
sudo apt update
sudo apt install ros-noetic-desktop-full -y​# 初始化rosdep
sudo rosdep init
rosdep update​

4. 环境配置

# 添加ROS环境变量到bashrc
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc# 安装构建工具和依赖
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y

5. 创建工作空间

# 创建并初始化catkin工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make# 添加工作空间到环境变量
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

6. 测试ROS安装

​# 启动roscore
roscore# 新开终端测试ROS工具
rosnode list  # 应该显示/rosout
rostopic list  # 应该显示几个默认话题

7. 树莓派特定优化

# 启用GPU加速(如果需要RViz等图形工具)
sudo apt install libgles2-mesa-dev -y
# 调整交换空间(提高编译性能)
sudo nano /etc/dphys-swapfile
# 修改 CONF_SWAPSIZE=2048
sudo systemctl restart dphys-swapfile

8. 配置ROS开发环境

安装常用ROS包

sudo apt install ros-noetic-rviz ros-noetic-turtlebot3 ros-noetic-gmapping -y

配置远程开发

# 安装VS Code
sudo snap install code --classic# 安装ROS插件
code --install-extension ms-iot.vscode-ros

安装ROS扩展

code --install-extension ms-iot.vscode-ros
code --install-extension ms-python.python

创建工作区配置

在VS Code中按Ctrl+Shift+P,输入

ROS: Create a ROS Workspace

二、测试是否安装成功

安装完ROS Noetic后,可以通过以下步骤全面验证安装是否成功:

1. 基础环境测试

# 检查环境变量
printenv | grep ROS# 正常应显示:
ROS_ROOT=/opt/ros/noetic/share/ros
ROS_PACKAGE_PATH=/opt/ros/noetic/share
ROS_MASTER_URI=http://localhost:11311
ROS_VERSION=1
ROS_PYTHON_VERSION=3
ROS_DISTRO=noetic#验证ROS核心工具
which roscore
which rosrun
which rosnode# 每个命令都应返回有效路径(如/opt/ros/noetic/bin/roscore)

2. 核心功能测试

# 启动ROS核心
roscore# 正常输出应包含
... logging to /home/ubuntu/.ros/log/xxx
started core service [/rosout]

# 保持此终端运行,另开新终端进行以下测试。# 测试ROS节点通信
rosnode list# 应显示:
/rosout
# 测试话题系统
rostopic list# 应显示至少
/rosout
/rosout_agg

3. 可视化工具测试

  • 启动RViz
rosrun rviz rviz# 如果安装了桌面版,应弹出RViz可视化界面。
  • 测试小乌龟模拟器
# 第一个终端
roscore# 第二个终端
rosrun turtlesim turtlesim_node# 第三个终端
rosrun turtlesim turtle_teleop_key# 此时应能通过键盘方向键控制乌龟移动

4. 构建系统测试

# 创建测试包
mkdir -p ~/test_ws/src
cd ~/test_ws/src
catkin_create_pkg test_pkg roscpp rospy std_msgs# 编译测试
cd ~/test_ws
catkin_make# 应看到成功编译输出,最后显示:
[100%] Built target test_pkg

5. Python/C++接口测试

# Python测试
python3 -c "import rospy; print('ROS Python接口正常')"# C++测试(需安装g++)
sudo apt install g++ -y
echo -e '#include <ros/ros.h>\nint main() { ros::init(0,0,"test_node"); return 0; }' > test.cpp
g++ -I/opt/ros/noetic/include test.cpp -L/opt/ros/noetic/lib -lroscpp
./a.out

6. 综合诊断命令

roscheck# 如果显示"ROS is ready to use",则安装完整。

或者创建roscheck.sh并执行

#!/bin/bash
echo "=== ROS 环境检查 ==="
echo -n "ROS 版本: " && rosversion -d
echo -n "roscore 路径: " && which roscore || echo "未找到"
echo -n "Python ROS 测试: " && python3 -c "import rospy; print('OK')" 2>/dev/null || echo "失败"
echo -n "C++ ROS 头文件: " && ls /opt/ros/noetic/include/ros/ros.h >/dev/null 2>&1 && echo "OK" || echo "失败"
echo "=== 检查完成 ==="

三、常见问题排查

问题1: roscore无法启动

# 检查端口占用
netstat -tuln | grep 11311
# 清理残留进程
killall -9 roscore rosmaster

问题2: RViz无法打开

# 检查OpenGL支持
glxinfo | grep "OpenGL version"
# 安装缺失组件
sudo apt install libgl1-mesa-dri libgl1-mesa-glx -y

问题3: Python导入错误

# 检查Python路径
python3 -c "import sys; print(sys.path)" | grep ros
# 重新配置环境
source /opt/ros/noetic/setup.bash

通过以上测试步骤,您可以全面验证ROS Noetic是否已正确安装并配置完成。所有测试通过后,您的ROS开发环境就可以投入使用了。

问题4: rosdep初始化失败

sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
sudo rosdep init
rosdep update

问题5: 内存不足导致编译失败

临时增加交换空间:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

问题6: 图形性能问题

安装轻量级桌面环境:

sudo apt install lubuntu-desktop -y

问题7: VS Code安装错误

报错信息:error: snap "code" is not available on stable for this architecture (arm64) but exists on other architectures (amd64).

树莓派4B为ARM64架构。安装VS Code时遇到的错误是因为官方Snap商店没有为ARM64架构提供稳定版的VS Code。推荐使用.deb包直接安装

# 下载ARM64架构的.deb包
wget https://update.code.visualstudio.com/latest/linux-deb-arm64/stable -O vscode-arm64.deb# 安装
sudo apt install ./vscode-arm64.deb# 启动
code

问题8:启动时报GLIBC错误

sudo apt update && sudo apt upgrade -y

问题9:无法打开GUI界面

确保已安装桌面环境:

sudo apt install ubuntu-desktop -y

问题10:扩展安装失败

尝试使用--force参数:

code --install-extension ms-iot.vscode-ros --force

问题11:unable to open display

这个错误通常发生在尝试在无图形界面的服务器版Ubuntu上运行图形应用程序,或者SSH连接时没有正确转发X11显示时。选择哪种方法取决于您的具体使用场景:如果您直接连接显示器推荐方法1;如果您主要使用SSH远程连接,推荐方法3。解决方案如下,

方法1:安装完整桌面环境(推荐)

sudo apt update
sudo apt install ubuntu-desktop -y
sudo reboot

方法2:配置SSH X11转发

# 确保服务器端已安装X11转发组件
sudo apt install xauth xorg -y# 修改SSH服务器配置
sudo nano /etc/ssh/sshd_config# 确保包含:
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no# 然后重启SSH服务:
sudo systemctl restart ssh# 从客户端连接时启用X11转发
ssh -X ubuntu@your-pi-ip

如果仍然显示"unable to open display",检查显示权限

xhost +
# 确认DISPLAY变量
echo $DISPLAY

问题12:出现GLX错误

sudo apt install mesa-utils libgl1-mesa-glx -y
glxinfo | grep OpenGL

四、学习资源:

  • ROS官方教程

  • 树莓派ROS社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视觉slam--框架

视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图&#xff1f; 建图并没有一个固定的形式和算法…

每日算法 -【Swift 算法】删除链表的倒数第 N 个结点

🧩 Swift | 删除链表的倒数第 N 个结点(含详细注释) 在刷算法题时,我们经常会遇到关于链表的题目,而「删除链表的倒数第 N 个节点」是其中一个非常经典的题。今天我们就用 Swift 来实现它,并梳理清楚整个思路。 🧠 一、题目描述 给你一个链表,删除链表的倒数第 n 个…

Truffle 和 Ganache 使用指南

Truffle 和 Ganache 使用指南 Truffle 命令详解 Truffle 是一个流行的以太坊开发框架,提供了许多有用的命令来简化智能合约的开发、测试和部署。 常用 Truffle 命令 初始化项目 truffle init 创建一个新的 Truffle 项目结构。 编译合约 truffle compile 编译项目中的 Solid…

docker进阶之架构

一、OCI 名为OCI&#xff0c;全称 Open Container Initiative/开放容器倡议,其目的主要是为了制定容器技术的通用技术标准。目前主要有两种标准&#xff1a; 1、容器运行时标准 &#xff08;runtime spec&#xff09; 2、容器镜像标准&#xff08;image spec&#xff09; …

企业产品网络安全日志6月10日-WAF资费消耗排查

发生了什么事&#xff1f; 上个的费用账单出来了&#xff0c;WAF费用有点飙升。比平时多了50%到100%。 周五的时候就已经知道这个事情了&#xff0c;但当时考虑肯定是拦截了一些恶意请求&#xff0c;所以。 反正也是上个月的事情了&#xff0c;所以周一过来复盘一下 数了下&a…

vue3+el-table 利用插槽自定义数据样式

<el-table-column label"匹配度" prop"baseMatchingLevel"><template #default"scope"><div :style"{ color: scope.row.baseMatchingLevel > 0.8 ? #00B578 : #FA5151 }">{{ scope.row.baseMatchingLevel }}&l…

[密码学实战]C语言使用SDF库构建国密算法RESTful服务(五)

[密码学实战]C语言使用SDF库构建国密算法RESTful服务(五) 引言 在现代信息安全领域,国密算法(SM系列算法)作为中国自主研发的密码算法标准,在金融、政务等领域得到广泛应用。本文将详细介绍如何使用C语言结合SDF(Security Device Function)库,构建一个提供国密算法服…

ubuntu 22.04搭建SOC开发环境

目录 AArch64位编译器命名规则 安装交叉工具链编译 安装aarch64-none-elf工具链 安装aarch64-none-linux-gnu工具链 启动板载系统 板卡启动方式 硬件连接 准备阶段 硬件连接 udev规则配置 启动流程 开发板外观图 硬件准备清单 硬件连接 SSH登录系统 设置Windows为…

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…

Java项目中常用的中间件及其高频问题避坑

Java项目中常用的中间件及其高频问题避坑如下: 一、常用中间件分类及作用 1. ​​消息队列中间件​​ ​​作用​​:解耦系统、异步通信、削峰填谷。​​代表产品​​: ​​Kafka​​:高吞吐量流处理,适合日志收集、实时分析。​​RocketMQ​​:金融级可靠性,支持事务消…

发布一个angular的npm包(包含多个模块)

为什么要发布npm包 根本原因时为了能够在更广泛的区域复用代码&#xff0c;比如公司不支持一般的外部网络&#xff0c;但是支持npm包的下载&#xff0c;那么就可以发布npm包&#xff0c;然后在公司内使用。 angular的npm不同吗 angular library angular 目前已经到angular20…

Web后端基础:Maven基础

课程内容&#xff1a; 初始MavenMaven概述 Maven模型Maven仓库介绍Maven安装与配置 IDEA集成Maven依赖管理单元测试 1.初始Maven 1.1介绍 Maven 是一款用于管理和构建Java项目的工具&#xff0c;是Apache旗下的一个开源项目 。 Apache 软件基金会&#xff0c;成立于1999年7月…

http协议同时传输文本和数据的新理解

首先&#xff0c;承认本人对于http协议认知确实不够&#xff0c;从来没有仔细研究这一块。 其次&#xff0c;这回确实要把自己十几年的理解更新一下了&#xff0c;主要还是自己过去没有认真研究过http协议。 这一次是这么回事&#xff0c;碰到一个情况&#xff0c;要在一次消…

《安富莱嵌入式周报》第354期: 开源36通道16bit同步数据采集卡,开源PoE以太网GPIB,分体式键盘DIY,微软WSL开源,USB转车载以太网

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1kJThzxETY/ 《安富莱嵌入式周报》第354期: 开源36通道16bit同…

Hyperlane 框架详解与使用指南

hyperlane 是一个高性能且轻量级的 Rust HTTP 框架&#xff0c;设计目标是简化现代 Web 服务的开发&#xff0c;同时兼顾灵活性和性能表现。本文将详细介绍 hyperlane 框架的核心功能、API 设计、生命周期模型、路由支持及性能测试结果&#xff0c;帮助开发者快速掌握和应用该框…

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…

一个小小的 flask app, 几个小工具,拼凑一下

1. 起因&#xff0c; 目的: 自己的工具&#xff0c;为自己服务。给大家做参考。项目地址&#xff1a; https://github.com/buxuele/flask_utils 2. 先看效果 3. 过程: 一个有趣的 Flask 工具集&#xff1a;从无到有的开发历程 缘起&#xff1a;为什么要做这个项目&#xff…

织梦dedecms怎样用标签调用随机数?

​在使用织梦模板建站中&#xff0c;随机数作为一个偶尔使用到的参数&#xff0c;在具体使用中虽然用的少&#xff0c;但是今天跟版网小编给大家介绍下&#xff0c;大家可以参考下&#xff1a; 实现随机数的调用可以使用下面的js&#xff1a; 方法一&#xff1a;js代码 Math…

访问服务器项目,服务器可以ping通,但是端口访问不到

原因&#xff1a;端口未开放 假设项目部署服务器为205&#xff0c;在90服务器访问205项目 1、首先在205确定项目启动&#xff0c;看端口是否占用 # Windows&#xff08;检查端口占用&#xff09; netstat -ano | findstr "8103"期望输出&#xff1a; TCP 0.0.…