自动化Trae Apollo参数解释的批量获取
一、背景介绍
在自动驾驶开发中,百度Apollo平台提供了大量参数用于调整系统行为。Trae添加Apollo工程后,可以通过交互的方式询问参数的作用,但存在两个痛点:
- Trae没有提供API接口,无法通过编程方式获取参数解释
- 手动查询大量参数效率极低(如Apollo 9.0有2000+参数)
为解决这些问题,准备了一个Python自动化脚本,通过模拟人工操作的方式:
- 自动输入参数名
- 触发Trae查询
- 捕获并保存解释文本
实现了Apollo参数解释的批量获取,大幅提升参数研究效率。
二、设计思路
整个自动化流程模拟人类操作行为,核心解决三个关键问题:
-
界面交互定位
通过图像识别确定按钮状态(特别是发送按钮的"空闲"状态)
-
操作模拟链
输入参数 → 点击发送 → 等待响应 → 复制结果 → 保存数据
-
状态检测机制
使用OpenCV比对按钮区域截图,精确判断Trae响应状态
是 是 否 否 开始 检测发送按钮状态 是否空闲? 输入参数名称 点击发送按钮 等待响应完成 点击复制按钮 保存到Markdown 还有参数? 结束 等待1秒
三、操作步骤
1. 环境准备
安装依赖库:
bash
pip install pyautogui opencv-python pillow keyboard pyperclip pywin32
2. 获取界面坐标
-
启动Trae,添加工程,打开聊天界面,创建一个智能体,输入提示词
-
运行脚本(取消注释以下代码):
python
# 第一步: 获取底图
screenshot1 = capture_screen()
screenshot1.save("base.bmp")
# 第三步: 保存空闲时发送按钮的图标
img=cv2.imread('base.bmp')
x,y=btn_snd_pos
w,h=btn_snd_size
ico=img[y:y+h,x:x+w,:]
cv2.imwrite("idle.bmp",ico)

3. 定位关键元素
使用画图工具打开base.bmp
,记录以下坐标(示例值需替换):
python
btn_snd_pos=(862,914) # 发送按钮中心坐标
btn_snd_size=(29,29) # 发送按钮尺寸
btn_copy_pos=(296,754) # 复制按钮坐标
edt_input_pos=(362,871) # 输入框坐标
4. 执行自动化查询
- 将要查询的参数写入列表:
python
args = [
'enable_multi_agent_vehicle_evaluator',
'prediction_eval_mode',
'enable_multi_thread'
# 添加更多参数...
]
- 运行主程序:
bash
python trae_automation.py
5. 获取结果
所有参数解释将保存到result.md
,按参数名分章节存储。
四、完整代码
python
import pyautogui
import keyboard
from PIL import Image, ImageGrab
import pyperclip
import time
import cv2
import win32clipboard
def clear_clipboard():
"""清空剪切板内容"""
try:
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.CloseClipboard()
return True
except Exception as e:
print(f"清空剪切板失败: {e}")
return False
def capture_screen(region=None):
"""截取全屏或指定区域"""
screenshot = ImageGrab.grab()
return screenshot
def mouse_click(x, y, clicks=1, interval=0.1):
"""模拟鼠标点击"""
pyautogui.click(x, y, clicks=clicks, interval=interval)
def copy_to_clipboard(text):
"""复制文本到剪切板"""
pyperclip.copy(text)
def paste_from_clipboard():
"""获取剪切板内容"""
return pyperclip.paste()
def send_ctrl_v():
"""发送Ctrl+V粘贴"""
keyboard.press_and_release('ctrl+a')
keyboard.press_and_release('del')
keyboard.press_and_release('ctrl+v')
def cacl_distance(img1, img2):
diff = cv2.absdiff(img1, img2)
return diff.sum()
def wait_ico(name,btn_snd_pos,btn_snd_size):
'''# 图像状态检测(等待发送按钮空闲)'''
idle=cv2.imread(name)
idle_gray = cv2.cvtColor(idle, cv2.COLOR_RGB2GRAY)
x,y=btn_snd_pos
w,h=btn_snd_size
while True:
screenshot1 = capture_screen()
screenshot1.save("temp.bmp")
img=cv2.imread('temp.bmp')
ico=img[y:y+h,x:x+w,:]
ico_gray = cv2.cvtColor(ico, cv2.COLOR_RGB2GRAY)
distance = cacl_distance(ico_gray, idle_gray)
# 计算与空闲状态的差异值
if distance<10: # 差异小于阈值说明状态相同
break
time.sleep(1)
def input_message(text,edt_input_pos):
copy_to_clipboard(text)
mouse_click(edt_input_pos[0],edt_input_pos[1])
time.sleep(1)
send_ctrl_v()
def get_message(btn_copy_pos):
mouse_click(btn_copy_pos[0]+16,btn_copy_pos[1]+16)
return paste_from_clipboard()
def main():
# 第一步: 获取底图
#screenshot1 = capture_screen()
#screenshot1.save("base.bmp")
# 第二步: 用画图工具,得到发送按钮,复制按钮,输入框的坐标
btn_snd_pos=(862,914)
btn_snd_size=(29,29)
btn_copy_pos=(296,754)
edt_input_pos=(362,871)
# 第三步: 保存空闲时发送按钮的图标
#img=cv2.imread('base.bmp')
#x,y=btn_snd_pos
#w,h=btn_snd_size
#ico=img[y:y+h,x:x+w,:]
#cv2.imwrite("idle.bmp",ico)
args=[
'enable_multi_agent_vehicle_evaluator',
'prediction_eval_mode',
'enable_multi_thread'
]
# 等待空闲
wait_ico('idle.bmp',btn_snd_pos,btn_snd_size)
fo=open("result.md","a+")
for arg in args:
print(arg)
# 发送请的请求
input_message(arg,edt_input_pos)
time.sleep(3)
mouse_click(btn_snd_pos[0]+16,btn_snd_pos[1]+16)
time.sleep(3)
# 移动走鼠标
mouse_click(btn_copy_pos[0]+16,btn_copy_pos[1]+16)
# 等待空闲
wait_ico('idle.bmp',btn_snd_pos,btn_snd_size)
# 保存结果
fo.write(f"# {arg}\n")
msg=get_message(btn_copy_pos)
print(msg)
fo.write(f'{msg}\n')
fo.flush()
# 清空剪切板
clear_clipboard()
if __name__ == "__main__":
main()
关键技术点解析
防干扰设计
- 每次操作后移动鼠标到非交互区
- 清空剪贴板避免内容污染
- 双保险等待机制(固定延时+状态检测)
健壮性保障
python# 清空输入框再粘贴 keyboard.press_and_release('ctrl+a') keyboard.press_and_release('del')
五、扩展应用
此方案不仅适用于Trae,还可迁移到其他无API的桌面应用,例如:
- 自动化测试GUI软件
- 批量操作ERP系统
- 游戏自动化脚本
- 定时填报网页表单
注意事项:自动化操作需遵守目标软件的用户协议,本方案仅用于技术研究,请勿用于商业侵权用途。