Ubuntu20.04 arduino 与 ros通信
时间: 2025-06-21 13:29:59 浏览: 9
### 设置 Arduino 和 ROS 在 Ubuntu 20.04 上进行通信
#### 准备工作
为了使 Arduino 成为 ROS 节点并与之交互,需先完成一系列准备工作。
确保已安装最新版的 Arduino IDE 及其依赖项[^1]。对于 ROS Noetic 版本而言,还需确认已经正确配置好环境变量以及更新包列表[^2]。
#### 配置串口权限
Arduino 设备连接至计算机后会分配特定设备文件名(通常是 `/dev/ttyUSB*` 或者 `/dev/ttyACM*`)。为了让 ROS 程序能够访问该端口,建议将当前用户加入 `dialout` 用户组:
```bash
sudo usermod -a -G dialout $USER
```
此命令执行完毕之后需要重新启动系统以便更改生效[^3]。
#### 编写 Arduino 代码
创建一个简单的 Arduino Sketch 来发送传感器数据给 ROS 主节点。这里以读取模拟输入为例展示基础框架:
```cpp
// 定义常量与全局变量
#define ANALOG_PIN A0 // 使用A0作为模拟信号采集引脚
int sensorValue; // 存储来自指定引脚的数据值
void setup() {
Serial.begin(9600); // 初始化串行通讯波特率为9600bps
}
void loop() {
sensorValue = analogRead(ANALOG_PIN);
if (Serial.available()) {
char receivedChar = Serial.read();
if(receivedChar == 'r') {
String dataString = "sensor_value:" + String(sensorValue);
Serial.println(dataString);
delay(500); // 延迟一段时间再继续循环
}
} else {
delay(100); // 如果没有收到字符,则等待更短时间
}
}
```
上述程序会在接收到字符'r'时通过串行接口返回一次最新的传感数值字符串表示形式。
#### 创建 ROS 发布订阅器
接下来构建 Python 脚本来处理从硬件接收的信息并将它们发布成标准消息类型供其他组件消费。新建名为 `arduino_node.py` 的文件并编辑如下所示的内容:
```python
#!/usr/bin/env python3
import rospy
from std_msgs.msg import Int32, String
import serial
class ArduinoNode(object):
def __init__(self):
self.node_name = rospy.get_name()
# Initialize the publisher and subscriber.
self.pub_sensor_data = rospy.Publisher(
"~sensor_data", String, queue_size=1)
try:
self.ser = serial.Serial('/dev/ttyUSB0', baudrate=9600,
timeout=None)
while not rospy.is_shutdown():
line = str(self.ser.readline().decode('utf-8').strip())
if(line.startswith("sensor_value")):
value_str = line.split(":")[1]
msg = String()
msg.data = f"{value_str}"
self.pub_sensor_data.publish(msg)
except Exception as e:
rospy.logerr(f"[{self.node_name}] Error opening serial port.")
raise(e)
if __name__ == '__main__':
rospy.init_node('arduino_node')
node = ArduinoNode()
rospy.spin()
```
这段代码实现了监听指定串口号上的所有传入流量,并过滤出由之前定义好的格式组成的有效载荷部分来转发出去。
#### 启动 ROS Master 并运行节点
最后一步就是激活整个体系结构使之正常运作起来。打开终端窗口依次键入下列指令开启核心服务进程与其他相关联的功能模块:
```bash
source /opt/ros/noetic/setup.bash
roscore &
rosrun your_package arduino_node.py _serial_port:=/dev/ttyUSB0
```
以上操作完成后即完成了基于Ubuntu平台下的Arduino同ROS之间的初步集成过程。
阅读全文
相关推荐


















