树莓派和ESP32通信
1. 环境准备
树莓派安装Ubuntu 24.04
使用 Raspberry Pi Imager 将 Ubuntu 24.04(代号 Noble)写入树莓派的 SD 卡。
2. ROS 2 安装
选择 ROS 2 版本
在 Ubuntu 24.04 上,建议安装 ROS 2 Jazzy Jalisco 版本,以确保最佳兼容性。
环境准备
- 确保已更新系统:
sudo apt update && sudo apt upgrade -y
- 添加 ROS 2 的 APT 仓库:
sudo apt install software-properties-common -y sudo add-apt-repository universe sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
- 设置全局代理,解决 DNS 或网络问题:
export http_proxy="http://192.168.0.103:7892" export https_proxy="http://192.168.0.103:7890" export ftp_proxy="http://192.168.0.103:7890" export all_proxy="socks5://192.168.0.103:7891"
添加 ROS 2 仓库源
echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/ros2-latest.list
安装 ROS 2
- 更新 APT 缓存并安装:
sudo apt update sudo apt install ros-jazzy-desktop -y
- 添加环境变量:
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc source ~/.bashrc
3. micro-ROS Agent 安装
安装依赖
sudo apt install -y build-essential cmake python3-colcon-common-extensions python3-pip git
克隆 micro-ROS 源码
mkdir -p ~/microros_ws/src
cd ~/microros_ws
git clone https://github.com/micro-ROS/micro-ROS-Agent.git src/micro_ros_agent
安装 rosdep
- 创建虚拟环境:
python3 -m venv ~/rosdep_venv
- 激活虚拟环境并安装
rosdep
:source ~/rosdep_venv/bin/activate pip install rosdep
- 初始化
rosdep
:sudo ~/rosdep_venv/bin/rosdep init ~/rosdep_venv/bin/rosdep update
安装 micro-ROS Agent 依赖
rosdep install --from-paths src --ignore-src -r -y
编译 micro-ROS Agent
colcon build --symlink-install
source install/setup.bash
配置环境变量
echo "source ~/microros_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
4. 启动 micro-ROS Agent
启动 micro-ROS Agent:
ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0 -b 115200
解决串口权限问题
如果遇到 errno: 13
的权限错误:
- 查看串口权限:
ls -l /dev/ttyUSB0
- 将当前用户添加到
dialout
组:sudo usermod -a -G dialout $USER newgrp dialout
5. ESP32 程序调试
ESP32 示例代码
以下是 ESP32 程序的简化代码片段:
#include <Arduino.h>
#include <micro_ros_platformio.h>
#include <rcl/rcl.h>
#include <rclc/rclc.h>
#include <std_msgs/msg/int32.h>
rcl_publisher_t publisher;
std_msgs__msg__Int32 msg;
void setup() {
Serial.begin(115200);
set_microros_serial_transports(Serial);
// 初始化 micro-ROS 节点和发布者
rcl_allocator_t allocator = rcl_get_default_allocator();
rclc_support_t support;
rclc_support_init(&support, 0, NULL, &allocator);
rcl_node_t node;
rclc_node_init_default(&node, "optimized_micro_ros_node", "", &support);
rclc_publisher_init_default(&publisher, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32), "optimized_micro_ros_node_publisher");
msg.data = 0;
}
void loop() {
rcl_publish(&publisher, &msg, NULL);
msg.data++;
delay(2000);
}
6. 验证通信
列出主题
运行以下命令确认主题已注册:
ros2 topic list
查看主题消息
ros2 topic echo /optimized_micro_ros_node_publisher
示例输出:
data: 0
---
data: 1
---
data: 2
总结
通过以上步骤,成功实现了树莓派与 ESP32 的串口通信,并通过 ROS 2 和 micro-ROS 完成了消息发布与接收。