Xuất sang OpenDRIVE / OpenSCENARIO / esmini
drawtonomy chuyển bản vẽ tay thành mạng lưới đường ASAM
OpenDRIVE (.xodr)
kèm kịch bản
OpenSCENARIO (.xosc),
đóng gói trong một file zip để phát lại trực tiếp trên
esmini.
Quá trình chuyển đổi được thiết kế đơn giản có chủ đích — chỉ những hình vẽ nào ánh xạ rõ ràng sang mô hình dữ liệu ASAM mới được xử lý, phần còn lại bị bỏ qua. Trang này ghi lại chính xác những gì được chuyển đổi, xe xuất ra thực sự hoạt động ra sao, và những gì nằm ngoài phạm vi hỗ trợ — để đầu ra không bao giờ hứa hẹn quá mức.
Xem toàn bộ luồng làm việc
Phần tiêu đề “Xem toàn bộ luồng làm việc”Video dưới đây được quay một lần liên tục: vẽ giao lộ, vẽ đường đi, tạo dấu chân, xuất zip esmini, rồi phát lại file .xosc xuất ra trong esmini.
Xuất từ trình chỉnh sửa
Phần tiêu đề “Xuất từ trình chỉnh sửa”Chỉ có một điểm xuất ASAM duy nhất. drawtonomy không tách riêng mục .xodr / .xosc trong menu — cả hai file luôn được tạo cùng nhau và nén vào một zip.

- Vẽ cảnh của bạn (làn đường, giao lộ, phương tiện, đường đi…).
- Mở menu → Export →
.zip (esmini). - Nhập tên cơ sở khi được hỏi (mặc định là
drawtonomy-<ngày>). - File
<tên>.zipđược tải xuống, chứa<tên>.xodr,<tên>.xosc, và các tài sản mô hình 3D esmini mà kịch bản tham chiếu.
Toàn bộ trang hiện tại được xuất — không có chế độ “chỉ xuất vùng chọn” cho mục tiêu ASAM.
Phát lại trong esmini
Phần tiêu đề “Phát lại trong esmini”unzip drawtonomy-2026-05-30.zipcd drawtonomy-2026-05-30esmini --osc drawtonomy-2026-05-30.xosc --window 60 60 1024 768
Xe chạy dọc theo đường màu cam — đường đó chính là FollowTrajectoryAction được tạo từ đường đi bạn đã vẽ.
Những gì được chuyển đổi
Phần tiêu đề “Những gì được chuyển đổi”Sang OpenDRIVE (.xodr)
Phần tiêu đề “Sang OpenDRIVE (.xodr)”| Hình vẽ drawtonomy | Phần tử OpenDRIVE | Ghi chú |
|---|---|---|
| Lane | một <road> | 1 làn = 1 đường độc lập |
| Traffic light | <signal> trên đường gần nhất | chỉ loại xe / người đi bộ |
| Crosswalk | <object type="crosswalk"> | đặt vuông góc với đường |
| Polygon (≥3 điểm) | <object type="patch"> với <outline> | hiển thị giao lộ / vùng diện tích |
Tất cả những gì còn lại — phương tiện, người đi bộ, điểm đơn lẻ, đường linestring tự do, văn bản, hình ảnh — không được ghi vào .xodr.
Các giới hạn của từng đường:
- Hình học chỉ là đường thẳng. Đường tham chiếu được lấy mẫu từ biên trái/phải của làn và phát ra dưới dạng các đoạn
<line>. Không có hình họcarc,spiral, haypoly3. - Bố cục làn cố định. Mỗi đường có đúng một làn trái (
id=1), một làn trung tâm (id=0), và một làn phải (id=-1), tất cảtype="driving". Đường nhiều làn và nhiều phần làn không được biểu diễn. - Vạch đường được mã hóa cứng là
solid white 0.13 m. - Không có junction. Mỗi đường mang
junction="-1"và không có phần tử<junction>nào được tạo ra. Giao lộ chỉ được thể hiện qua mảng polygon (hình ảnh) và các liên kết predecessor/successor suy ra từ kết nốinext/prevcủa làn (chỉ mục đầu tiên). - Không có độ cao / siêu cao —
elevationProfilevàlateralProfileđược phát ra rỗng (đường phẳng). - Tỷ lệ cố định 16,67 px/m; gốc địa lý là
0.
Sang OpenSCENARIO (.xosc)
Phần tiêu đề “Sang OpenSCENARIO (.xosc)”| Hình vẽ drawtonomy | Phần tử OpenSCENARIO |
|---|---|
| Vehicle | một <ScenarioObject> (<Vehicle> hoặc <Pedestrian>) |
| Dấu chân đường đi (xe dẫn đầu) | một <FollowTrajectoryAction> |
“Người đi bộ” là hình xe mà tên template khớp với mẫu pedestrian/walk — được phát ra dưới dạng <Pedestrian> thay vì <Vehicle>. Làn đường, vạch qua đường, đèn giao thông và đường linestring tự do không được đưa vào .xosc.
Kịch bản xuất ra được giữ tối giản có chủ đích:
- Hành vi động duy nhất là
FollowTrajectoryAction— một polyline có dấu thời gian. Không có hành động tốc độ, đổi làn, phản ứng đèn giao thông, tránh va chạm, hay bất kỳ điều kiện tương tác nào. - Mỗi thực thể di chuyển bắt đầu ở
SimulationTime ≥ 0và kịch bản cóStopTriggercứng ở 60 giây.
Cách dấu chân đường đi trở thành chuyển động xe
Phần tiêu đề “Cách dấu chân đường đi trở thành chuyển động xe”Đây là phần cốt lõi của xuất động, vì vậy cần giải thích rõ ràng.

Đường đi là một linestring bạn vẽ, còn dấu chân là các bản sao ma của xe được rải dọc theo đó (vệt bạn thấy trong trình chỉnh sửa). Khi xuất:
- Chỉ dấu chân đầu tiên (dấu chân dẫn đầu) trở thành
<ScenarioObject>di chuyển. Các bản sao phía sau chỉ là xem trước trên canvas và bị bỏ — bạn nhận được một xe chạy toàn bộ đường đi, không phải một đoàn xe. - Các điểm điều khiển của đường đi trở thành các đỉnh quỹ đạo, tính bằng mét (tọa độ ENU).
- Mỗi đỉnh được gán một giá trị
time, và kết quả được ghi dưới dạng<Trajectory>→<Polyline>gồm các<Vertex time="…">bên trong<FollowTrajectoryAction>.
Tốc độ cố định (đây là giới hạn quan trọng nhất)
Phần tiêu đề “Tốc độ cố định (đây là giới hạn quan trọng nhất)”Quỹ đạo được tính thời gian ở tốc độ cứng 10 m/s (≈ 36 km/h). drawtonomy không có trường tốc độ nào trong giao diện, và bộ xuất không bao giờ ghi đè giá trị mặc định này. Trong esmini, xe sẽ báo ~36 km/h bất kể bạn vẽ gì. Bạn không đặt tốc độ trực tiếp — mà thay vào đó định hình thời điểm qua bố cục dấu chân, như được mô tả tiếp theo.
Hai chế độ tính thời gian
Phần tiêu đề “Hai chế độ tính thời gian”Công tắc “Variable positioning” của đường đi quyết định cách phân bổ thời gian dọc theo quỹ đạo:
- Đồng đều (tắt công tắc) — các dấu chân được đặt cách nhau bằng Interval đều theo độ dài cung và thời gian là
khoảng cách / 10 m/s. Chuyển động là tốc độ không đổi. Thay đổi Interval chỉ thay đổi số lượng đỉnh được ghi (mật độ lấy mẫu); hình dạng đường và tổng thời gian không thay đổi. - Biến thiên (bật công tắc) — mỗi dấu chân được ghim vào một vị trí dọc theo đường đi, và tổng thời gian được chia thành các khoảng thời gian bằng nhau giữa các dấu chân. Nơi các dấu chân dày đặc thì xe chạy chậm; nơi chúng thưa thớt thì xe chạy nhanh. Đây là cách duy nhất để thay đổi tốc độ hiệu quả dọc theo lộ trình.
Thao tác trong trình chỉnh sửa ↔ thay đổi trong .xosc
Phần tiêu đề “Thao tác trong trình chỉnh sửa ↔ thay đổi trong .xosc”| Thao tác trong trình chỉnh sửa | Tác động lên xuất |
|---|---|
| Di chuyển điểm điều khiển đường đi | Tọa độ đỉnh quỹ đạo + tổng thời gian (độ dài thay đổi, tốc độ vẫn 10 m/s) |
| Kéo dấu chân trong chế độ Variable | Vị trí chuẩn hóa của dấu chân → time của đỉnh → tốc độ cục bộ (hiệu quả) của đoạn đó |
| Bật/tắt Variable positioning | Chuyển đổi giữa tính thời gian đều và tính thời gian bằng tốc độ |
| Thay đổi Interval (chế độ đồng đều) | Chỉ số lượng đỉnh — hình dạng và tốc độ quỹ đạo không thay đổi |
| Thay đổi Anchor | Chỉ bù vẽ dấu chân — không có tác động lên quỹ đạo xuất |
| Đổi template xe | vehicleCategory, mô hình 3D, chiều cao bounding box, cấu hình hiệu năng |
| Thay đổi kích thước xe (w, h) | Kích thước BoundingBox và hình học trục bánh xe |
| Xoay xe | Hướng ban đầu (chỉ khi xe không có quỹ đạo) |
| Di chuyển xe | WorldPosition khởi tạo (snap về điểm đầu quỹ đạo nếu có) |
Trả lời thẳng câu hỏi thường gặp: đúng — kéo dấu chân đến vị trí khác trên đường đi trong chế độ Variable sẽ thay đổi kế hoạch tốc độ xuất, vì nó tính lại thời gian đoạn đó. Kéo trong chế độ Uniform, hay thay đổi Anchor, thì không.
Các giá trị được mã hóa cứng
Phần tiêu đề “Các giá trị được mã hóa cứng”Để minh bạch về phạm vi, những giá trị này đến từ bản đồ hoặc hằng số cố định, không phải từ bất kỳ thứ gì bạn có thể chỉnh sửa: danh mục/cấu hình hiệu năng xe, đường dẫn mô hình 3D, chiều cao xe theo danh mục, hình học trục bánh xe (suy ra từ kích thước), chế độ theo dõi (position), trigger dừng 60 giây, và — quan trọng nhất — tốc độ quỹ đạo 10 m/s.
Xuất theo chương trình
Phần tiêu đề “Xuất theo chương trình”Bộ xuất được tích hợp trong @drawtonomy/sdk và chạy mà không cần trình chỉnh sửa. Không giống như menu, SDK còn cho phép xuất riêng từng file:
import { exporter, createSnapshot } from '@drawtonomy/sdk'
const snapshot = createSnapshot(shapes)
// Đóng gói (giống menu):const { blob, baseName } = exporter.buildEsminiZip(snapshot, { baseName: 'my-scene',})
// Hoặc từng định dạng riêng lẻ:const xodr = exporter.exportToOpenDrive(snapshot)const xosc = exporter.exportToOpenScenario(snapshot, { xodrFilename: 'my-scene.xodr',})Để xem toàn bộ API và các điểm mở rộng, xem tham khảo Exporter SDK.
Phiên bản được phát ra
Phần tiêu đề “Phiên bản được phát ra”| Định dạng | Phiên bản |
|---|---|
| OpenDRIVE | 1.8 |
| OpenSCENARIO | 1.3 |
Tóm tắt phạm vi hỗ trợ
Phần tiêu đề “Tóm tắt phạm vi hỗ trợ”Được hỗ trợ: đường thẳng từ làn đường; tín hiệu, vạch qua đường và mảng giao lộ dưới dạng object OpenDRIVE; một xe mỗi đường đi theo quỹ đạo có thời gian; file zip esmini hoạt động được ngay.
Chưa hỗ trợ: junction OpenDRIVE, hình học cong, đường nhiều làn, độ cao đường; hành động tốc độ OpenSCENARIO, đổi làn, logic đèn giao thông, tương tác nhiều tác nhân, hay bất kỳ điều khiển tốc độ nào theo từng xe.
Xem thêm
Phần tiêu đề “Xem thêm”- Kiến trúc bộ xuất — pipeline làm gì giữa snapshot và file.
- Thêm định dạng đích mới — kết nối CARLA, SUMO, Unity, hoặc bất kỳ thứ gì khác.