【树莓派】Ubuntu-mate安装及ROS安装

前言:上一次写的时候是因为Raspberry Pi 4B 8G版本(2020/7/28),隐约记得是因为Ubuntu-mate没有对新的大内存进行优化所以开机就闪退,这次先拿Raspberry Pi 4B 4G版本写一次Ubuntu-mate的教程,很多步骤在这里更详细了,虽然烧录这些可能真的异常简单… 但是本着记录的原则我还是都写下来吧,
测试环境:树莓派4B 4G ubuntu-mate 20.04,但是其他版本的也是一样的操作,换源那里注意一下就好了

烧录镜像至SD卡

下载镜像

官方镜像下载地址 Ubuntu-mate
2021年1月7日下载的 上传到了百度云->提取码:33nz
在这里插入图片描述

烧录SD卡

balenaEtcher软件下载地址
官方 往下滑可以看见关于系统选择的下载 但是应该会很慢
2021年1月7日下载的 上传到了百度云 提取码:ev19
插入自己的电脑,打开balenaEtcher软件,如下GIF:
在这里插入图片描述
烧录完成:
在这里插入图片描述

将SD插入树莓派

实物GIF

在这里插入图片描述

安装流程

这里的安装流程真的… 不用说因为不像给双系统或者主机安装ubuntu还得设置分区啥的,这个就直接没有那一步,该填啥填啥直接下一步,下一步,等待安装完成即可【我本来还录了个视频 但是发现… 没啥用】
但是这里申明两点:
1.如果发现频繁闪退,关机 -> 换SD卡 -> 烧录树莓派官方系统
2.第一条如果没有成功 恭喜你可能是树莓派硬件出了问题,不要犹豫直接问淘宝寄回返修 【千分之一的几率没错就被我碰到过】

树莓派开机

sudo reboot

如果发现自己没有WIFI连接就是搜索不到WIFI 执行重启操作,重启后你就能看到了WIFI列表了

sudo reboot

换源

这一步无论哪个版本都是一样的 注意看一下focal网址后面的这个,象征着Ubuntu的版本 所以可以只复制网址替换原来的也行

sudo nano /etc/apt/sources.list

将里面的内容替换为下面这些,#后面的是注释的官方的源

#deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
#deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
#deb http://us.archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse

更新源内容,一定要换源后更新不然sudo apt install的命令还是走的主网站US那边的

sudo apt update

在这里插入图片描述

下载SSH

首先得下载net-tools

因为远程操作的话你要知道这个树莓派的IP地址,对于树莓派原生系统来说这些都是已经在系统离了的

sudo apt install net-tools

在这里插入图片描述
这条指令就可知道现在IP地址

ifconfig

下载openssh

但是树莓派官方的Pi OS同样也已经内嵌了SSH,无需下载

sudo apt install openssh-server

在这里插入图片描述
然后安装这个ubuntu-mate 20.04的树莓派就可以拿你的电脑连接了

电脑远程操作

下载 Xshell

官方下载地址

设置远程

在这里插入图片描述
黄色的箭头就是你在树莓派看到的IP地址
然后剩下的就是用户名&密码(是你安装系统的时候设置的)
例如我的用户名就是:kin【然后看看上面截图 聪明的你一定发现了用户名在每一行命令的顶头会显示@前面的】

连接成功

在这里插入图片描述
最后的箭头是shutdown关机操作哈 大家别直接对着就打上去了 hhh😂

安装ROS

ROS Wiki Ubuntu安装ROS 官方网址

添加ROS源和密钥

清华源

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

密钥

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

更新

sudo apt update

安装ROS

sudo apt install ros-noetic-desktop-full

在这里插入图片描述

环境设置

source /opt/ros/noetic/setup.bash

将环境写入bashrc文件,后续就不需要每次都source了

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

小乌龟

roscore

在这里插入图片描述

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

在这里插入图片描述

<think>好的,我现在需要帮助用户构建一个基于树莓派运行Ubuntu 20.04和ROS Noetic的小车项目,并且涉及STM32微控制器。首先,我得理清整个项目的结构和需要的步骤。用户可能已经具备一定的硬件基础,但具体的软件配置和通信部分可能需要详细指导。 首先,根据引用[1]和[4],用户已经在树莓派安装Ubuntu 20.04和ROS Noetic,这是基础。接下来需要考虑的是如何将STM32与树莓派连接,并在ROS中实现通信。通常,STM32可以通过串口(UART)或者USB与树莓派通信。ROS中的串口通信包可能会用到,比如rosserial或者自定义的串口节点。 然后,引用[3]提到了raspi-config的安装和摄像头配置,这可能与小车的传感器有关,比如摄像头用于视觉导航。不过用户的问题主要涉及STM32,所以重点可能在电机控制和传感器数据的获取上。STM32通常负责底层控制,如电机驱动、读取传感器数据(如编码器、超声波等),而树莓派运行ROS处理高层逻辑,比如路径规划、SLAM等。 接下来要考虑的是ROS与STM32之间的通信协议。常见的方法是在STM32上编写固件,通过串口发送和接收数据,然后在ROS中创建一个节点来管理串口通信。例如,使用ROS的serial包来读写串口数据,或者使用rosserial库,后者允许STM32作为ROS节点直接发布和订阅话题。但rosserial可能需要STM32具备足够的资源来运行客户端库,这需要确认STM32的型号和内存是否足够。 另外,用户可能需要配置STM32的开发环境,比如使用STM32CubeMX和Keil或者PlatformIO来编写固件。这部分可能需要指导用户如何搭建开发环境,编写代码处理PWM输出控制电机,读取GPIO输入获取传感器数据,并通过串口与树莓派通信。 然后,在ROS端,需要创建相应的包来发布控制指令(如速度、方向)到STM32,并订阅来自STM32的传感器数据。例如,创建一个motor_controller节点,订阅/cmd_vel话题,将Twist消息转换为STM32能理解的指令,通过串口发送。同时,STM32可能发布编码器计数或IMU数据,ROS节点将其转换为Odometry消息。 还需要考虑通信协议的设计,比如定义数据帧的格式,校验机制,以确保数据传输的可靠性。例如,使用固定的帧头、数据长度、指令类型、数据和校验和的结构。 另外,电源管理也是一个问题,树莓派和STM32可能需要独立的电源,或者设计一个稳压电路,确保两者稳定工作。同时,GPIO引脚的连接需要正确,避免电压不匹配导致损坏,树莓派的GPIO是3.3V,而STM32可能有5V容忍的引脚,但需要注意电平匹配。 用户可能还会遇到ROS Noetic的依赖问题,比如安装必要的软件包,创建catkin工作空间,编译自定义的消息类型等。需要指导用户如何配置ROS环境,编写launch文件,以及调试节点。 最后,测试和调试阶段可能需要分步骤进行,比如先测试STM32与树莓派的串口通信,再逐步集成ROS节点,确保数据能够正确传输和处理。可能还需要使用工具如rostopic、rviz来监控和可视化数据。 总结下来,步骤大致分为:硬件连接、STM32固件开发、ROS节点开发、通信协议设计、系统集成与测试。需要逐一解决每个环节的问题,并参考用户提供的引用内容中的相关配置,如UbuntuROS安装,raspi-config的使用等,确保环境正确设置。</think>### 分步指南:树莓派Ubuntu 20.04 + ROS Noetic)与STM32的小车项目开发 #### **1. 硬件准备与连接** - **树莓派配置** 确保已安装Ubuntu 20.04 Mate系统并完成ROS Noetic的配置[^1][^4]。通过`raspi-config`开启必要的硬件接口(如UART、I2C等)[^3]。 - **STM32与树莓派通信** 使用USB转TTL模块或直接通过UART引脚连接STM32与树莓派。注意电平匹配(树莓派GPIO为3.3V,STM32需配置为兼容模式)。 #### **2. STM32固件开发** - **开发环境搭建** 使用STM32CubeMX生成代码框架,选择适合的IDE(如Keil、PlatformIO)编写固件。 关键功能: - 电机驱动(PWM输出) - 传感器数据读取(如编码器、超声波、IMU) - 串口通信协议实现(接收控制指令,发送传感器数据) - **通信协议设计** 定义数据帧格式,例如: $$ \text{帧头(2B)} + \text{数据长度(1B)} + \text{指令类型(1B)} + \text{数据(nB)} + \text{校验和(1B)} $$ 校验和可采用异或或CRC算法。 #### **3. ROS节点开发** - **创建ROS包** ```bash cd ~/catkin_ws/src catkin_create_pkg stm32_driver roscpp rospy std_msgs serial ``` - **串口通信节点** 使用`ros-serial`库或自定义节点实现: ```python # 示例:读取STM32数据并发布到ROS话题 import serial import rospy from sensor_msgs.msg import Imu def serial_node(): ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1) pub = rospy.Publisher('/imu_data', Imu, queue_size=10) rospy.init_node('stm32_serial') while not rospy.is_shutdown(): data = ser.readline().decode().strip() # 解析数据并填充Imu消息 # pub.publish(imu_msg) ``` - **控制指令下发** 订阅`/cmd_vel`话题,将速度指令转换为STM32协议: ```cpp // C++示例:将Twist消息转为字节流 void cmdVelCallback(const geometry_msgs::Twist& msg) { uint8_t buffer[10]; // 填充速度数据到buffer serial_port.write(buffer, sizeof(buffer)); } ``` #### **4. 系统集成与测试** - **功能验证** - 使用`rostopic pub`发送测试指令,观察电机响应。 - 通过`rostopic echo`监控传感器数据流。 - **调试工具** - `rqt_graph`可视化节点通信关系。 - `rviz`显示SLAM建图或传感器数据(如激光雷达需额外配置)。 #### **5. 扩展功能(可选)** - **SLAM与导航** 集成`gmapping`或`cartographer`实现建图,使用`move_base`进行路径规划。 - **远程控制** 通过xrdp或VNC远程访问树莓派,或使用ROS的`rosbridge`实现Web控制。 --- ### **常见问题与解决方案** - **Q1:串口通信失败** - 检查权限:`sudo usermod -aG dialout $USER`并重启。 - 确认波特率、数据位配置一致。 - **Q2:STM32数据解析错误** - 添加帧头/帧尾校验,使用状态机解析数据。 -ROS节点中增加数据过滤和异常处理。 - **Q3:实时性不足** - 优化STM32中断优先级。 - 使用ROS实时线程(需内核补丁)。 --- ### **相关问题** 1. 如何通过ROS实现树莓派与STM32的无线通信(如WiFi或蓝牙)? 2. STM32如何通过ROS发布传感器数据(如编码器)并生成里程计信息? 3. 在ROS Noetic中如何调试串口通信的丢包问题?
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kin-Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值