当前位置: 首页 > news >正文

树莓派buster安装ROS完整记录

我敢说这一教程全网找不到相同的。我今天在安装ROS时查了各方教程:官方Wiki,Google,CSDN都各查了不下10篇,终于综合各教程内容花了大半天下好了。

使用硬件及软件:
树莓派3B搭载Debian 10 (buster)操作系统。

ROS每一个版本都只能和特定的linux系统版本对应,buster系统对应版本为ROS Noetic

查看系统版本:

lsb_release -a

1 将软件源换为国内源
使用国内源可以加快下载速度,我这里使用清华源。
打开文件/etc/apt/sources.list进行修改,注释掉已有内容,添加以下几行:

 deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
 deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-update main contrib non-free
 deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
 deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster/updates main contrib non-free

在这里插入图片描述
同时系统源也要换一下,位置: /etc/apt/sources.list.d/raspi.list
注释点已有内容,添加如下内容:

deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

在这里插入图片描述

2 获取ROS软件源及密钥

sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’
sudo apt-key adv --keyserver ‘hkp://keyserver.ubuntu.com:80’ --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3 更新软件源

sudo apt update
sudo apt upgrade

4 初始化rosdep

sudo rosdep init
rosdep update

这里第一条指令多半会出问题,是访问国外网站不稳定导致的。此时的思路时把rosdep init本来放在云端的程序下载到本地,然后在本地调用即可
具体步骤如下:
1 在github上下载rosdep库

git clone github.com/ros/rosdistro

2 修改文件rosdep/source.list.d/20-defaults.list

# os-specific listings first
yaml file:///home/xxx/rosdistro/rosdep/osx-homebrew.yaml osx

# generic
yaml file:///home/pi/rosdistro/rosdep/base.yaml
yaml file:///home/pi/rosdistro/rosdep/python.yaml
yaml file:///home/pi/rosdistro/rosdep/ruby.yaml
gbpdistro file:///home/pi/rosdistro/releases/fuerte.yaml fuerte

# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

这里把文件路径改为///home/用户名/rosdistro/…
在这里插入图片描述
3 修改/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py文件,还是改路径

# default file to download with 'init' command in order to bootstrap
# rosdep
DEFAULT_SOURCES_LIST_URL = 'file:///home/pi/rosdistro/rosdep/sources.list.d/20-default.list'

# seconds to wait before aborting download of rosdep data

在这里插入图片描述
4 修改/usr/lib/python2.7/dist-packages/rosdep2/rep3.py文件:

# location of targets file for processing gbpdistro files
REP3_TARGETS_URL = 'file:///home/pi/rosdistro/releases/targets.yaml'

# seconds to wait before aborting download of gbpdistro data

还是修改路径,懒得截图了

5 修改/usr/lib/python2.7/dist-packages/rosdistro/init.py的文件:

# index information

DEFAULT_INDEX_URL = 'file:///home/pi/rosdistro/index-v4.yaml'

def get_index_url():

此时rosdep init应该就可以成功
注意:如果在rosdep update时发现有路径被忽略(显示IGN而非HIT)就说明此时路径有误,需要重新修改。修改完后要删掉rosdep init时生成的文件,然后重新init,否则修改依然无效

备注:
据说有一个鱼香ROS大佬开发的自动配置rosdep程序,这个程序我没有亲自使,但可以附上链接

wget http://fishros.com/install -O fishros && . fishros

我试过该程序里的一键安装ROS,结果不但安装失败,还把我本来的软件源删了

5 下载ROS noetic
我找的所有网上教程都说直接apt install ros-noetic-desktop即可,但在我这里始终显示找不到软件包。以下方法亲测可以解决我的问题:

sudo apt install aptitude

然后使用aptitude下载ros-desktop,而不是ros-noetic-desktop。

sudo aptitude install ros-desktop

这一步中多半会弹出依赖问题,此时aptitude的好处就是会自动创建一个解决方案,如果直接用apt就需要手动解决依赖问题。对于解决方案选yes,如果运行完该方案后还无法安装,就对当前方案选no,aptitude会自动生成下一个方案。这样一个一个试后我在第三次就成功了。

6 测试ROS

roscore

在这里插入图片描述
roscore能显示应该就差不多成功了,我这个linux系统没有装图形界面,小海龟模拟程序跑不了

参考文章:

https://blog.csdn.net/weixin_45315065/article/details/113420784
https://blog.csdn.net/weixin_44457994/article/details/123343885

相关文章:

  • Linux进程状态、进程优先级、环境变量、进程地址空间
  • 面试官:ArrayList扩容机制,你了解吗?
  • 应用链的兴起将带来哪些风险和机遇?未来将会如何发展?
  • 2022年接口测试面试题大全
  • 软件流程和管理(十):配置管理
  • 红黑树RBTree的模拟实现
  • 基于JAVA智能选课系统设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署
  • PostgreSQL13主从同步异步流复制
  • HDFS读写流程+NameNode和DataNode工作机制
  • 百战c++(数据库2)
  • GO语法学习
  • 【国庆活动】Tomcat 的优化方式
  • Vue3 reactive响应式原理详解
  • 基于HAL库的STM32的串口DMA发送数据(解决只发送一次数据)及DMA+空闲中断接受数据
  • 【图灵MySQL】SQL底层执行原理详解
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Kibana配置logstash,报表一体化
  • MaxCompute访问TableStore(OTS) 数据
  • springMvc学习笔记(2)
  • Swift 中的尾递归和蹦床
  • web标准化(下)
  • 程序员最讨厌的9句话,你可有补充?
  • 多线程事务回滚
  • 基于HAProxy的高性能缓存服务器nuster
  • 将 Measurements 和 Units 应用到物理学
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何设计一个微型分布式架构?
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #pragam once 和 #ifndef 预编译头
  • #pragma multi_compile #pragma shader_feature
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (备忘)Java Map 遍历
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)Linq学习笔记
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .htaccess配置重写url引擎
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 8.0 发布到 IIS
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 使用 XPath 来读写 XML 文件
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递