樹莓派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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84477.shtml
英文地址,請注明出處:http://en.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.…