You are on page 1of 30

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA KỸ THUẬT MÁY TÍNH


----------------------------

ĐÁNH GIÁ CHẤT LƯỢNG STREAM VIDEO


CHO HỆ THỐNG BAY KHÔNG NGƯỜI LÁI

BÁO CÁO THỰC TẬP DOANH NGHIỆP


Sinh viên thực hiện: Phạm Trọng Huỳnh
MSSV: 19521651
Lớp: KTMT2019
Người hướng dẫn: Nguyễn Hoài Phong

Thành phố Hồ Chí Minh – Năm 2022


LỜI CẢM ƠN
Lời mở đầu em xin cảm ơn các thầy cô trường Đại học Công nghệ Thông tin
nói chung, các thầy cô khoa Kỹ thuật Máy tính nói riêng đã giúp em có được kiến
thức nền tảng vững chắc để có thể tự tin bắt đầu quá trình thực tập tại doanh
nghiệp. Em cũng xin cảm ơn các anh Hùng, anh Phong là nhân viên thuộc Công ty
Realtime Robotics Việt Nam đã hướng dẫn và hỗ trợ em hết mình trong quá trình
em thực tập tại công ty. Cuối cùng em xin cảm ơn thầy Hùng vì đã giám sát chặt
chẽ em trong cả quá trình thực tập và giúp đỡ em hoàn thiện bài báo cáo này.
TP.HCM, tháng 12 năm 2022
Sinh viên thực hiện
Phạm Trọng Huỳnh

ii
MỤC LỤC
LỜI CẢM ƠN ......................................................................................................... ii

MỤC LỤC .............................................................................................................. iii

DANH MỤC BẢNG .............................................................................................. iv

DANH MỤC HÌNH ẢNH ...................................................................................... v

I. Lịch làm việc .................................................................................................... 1

1. Lịch làm việc công ty..................................................................................... 1

2. Lịch làm việc cá nhân .................................................................................... 1

II. Giới thiệu công ty Real-time Robotics Việt Nam ......................................... 2

III. Danh sách các công việc được giao ................................................................ 3

IV. Chi tiết các nhiệm vụ được giao ..................................................................... 4

1. Công việc thứ nhất: Chuẩn bị các kiến thức nền tảng ................................... 4

2. Công việc 2: Test Zoom Visca ...................................................................... 7

3. Công việc 3: Kiểm thử hệ thống Ragas ....................................................... 13

4. Công việc 4: Tìm hiểu công cụ gst-launch-1.0 ............................................ 14

5. Công việc 5: Đánh giá chất lượng bay thực tế của Vian Sight .................... 17

6. Công việc 6: Đánh giá chất lượng stream của hệ thống .............................. 18

7. Công việc 7: Ẩn các thông số trên ứng dụng chỉnh sửa cơ sở dữ liệu ........ 20

V. Kết quả đạt được qua đợt thực tập ............................................................. 22

1. Về kiến thức ................................................................................................. 22

2. Về kĩ năng .................................................................................................... 22

VI. Nhận xét về chương trình đào tạo ............................................................... 23

iii
DANH MỤC BẢNG
Bảng 1: Thông tin chung về công ty RtR ......................................................... 2
Bảng 2: Danh sách các công việc được giao trong giai đoạn thực tập ............. 3
Bảng 3: PEP 8 quy ước đặt tên được ứng dụng vào sản phẩm ....................... 10

iv
DANH MỤC HÌNH ẢNH
Hình 1: Mô hình làm việc với Git ..................................................................... 5
Hình 2: Kiến trúc pipeline gstreamer ................................................................ 7
Hình 3: Màn hình của videotestsrc ................................................................... 9
Hình 4: Hiển thị thông tin FPS lên màn hình stream ...................................... 14
Hình 5: Thay đổi độ phân giải và fps cho stream ........................................... 15
Hình 6: Kiểm tra các thông số video .............................................................. 15
Hình 7: Video được sử dụng để kiểm tra chức năng ...................................... 16
Hình 8: Kiểm tra hình ảnh và video đã được lưu ............................................ 17
Hình 9: Các thư mục được tạo tự động theo thời gian thực............................ 18
Hình 10: Các sheet của testcase ...................................................................... 18
Hình 11: Mô hình ứng dụng chỉnh sửa database ............................................ 21

v
I. Lịch làm việc
1. Lịch làm việc công ty
▪ Công ty làm việc 8 tiếng/ngày
o Ca sáng từ 8:00 đến 12:00
o Ca chiều từ 13:00 đến 17:00
▪ 5 ngày/tuần từ Thứ Hai đến Thứ Sáu.
2. Lịch làm việc cá nhân
Giai đoạn 1: 14/7/2022 đến ngày 14/09/2022
▪ Làm việc 8 tiếng/ngày
▪ Làm việc 5 ngày/tuần từ Thứ Hai đến hết Thứ Sáu.
Giai đoạn 2: 15/09/2022 đến ngày 14/10/2022
▪ Làm việc 8 tiếng/ngày
▪ Làm việc 3 ngày/tuần từ Thứ Hai đến thứ hết Thứ Tư.

1
II. Giới thiệu công ty Real-time Robotics Việt Nam
Bảng 1: Thông tin chung về công ty RtR
Tên chính thức Công Ty TNHH Real-time Robotics Việt Nam
Tên giao dịch Real-time Robotics Vietnam Company Limited
Mã số thuế 0314718578
Loại hình doanh nghiệp Công ty TNHH
Ngành nghề kinh doanh Sản xuất máy bay, tàu vũ trụ và máy móc liên quan
chính
Địa chỉ giao dịch 40/10 Khổng Tử, Phường Hiệp Phú, Thành phố Thủ
Đức, Thành phố Hồ Chí Minh
Website công ty https://rtrobotics.com
Ngày thành lập 06/11/2017
Người đại diện pháp luật Lương Việt Quốc

RtR (Real-time Robotics Việt Nam) là nhà sản xuất máy bay không người lái
thuộc sở hữu của Hoa Kỳ và là nhà cung cấp giải pháp máy bay không người lái.
RtR thiết kế và chế tạo máy bay không người lái ứng dụng cho lực lượng thực thi
pháp luật như phòng cháy chữa cháy, công nghệ chế tạo máy bay không người lái
từ phần cứng đến phần mềm.
RtR có một đội ngũ R&D bao gồm: chuyên gia composite, kỹ sư hàng không
vũ trụ, kỹ sư cơ khí, kỹ sư điện tử, kỹ sư firmware, kỹ sư phần mềm và kỹ sư AI.
RtR tự thiết kế và sản xuất máy bay không người lái của mình bao gồm khung
máy bay, thiết bị điện tử, tải trọng, trạm điều khiển mặt đất, pin, bộ sạc, chương
trình cơ sở điều khiển và phần mềm phân tích.

2
III. Danh sách các công việc được giao
Bảng 2: Danh sách các công việc được giao trong giai đoạn thực tập
S Thời gian thực hiện
T Tên công việc
Bắt đầu Kết thúc
T
Chuẩn bị các kiến thức nền tảng: Cài đặt và làm
quen với hệ điều hành Fedora; hoàn thành bài kiểm
1 4/7/2022 7/7/2022
tra về git; học cách tương tác với máy tính nhúng
thông qua một số lệnh cơ bản.
Test Zoom Visca: kiểm tra chức năng thu phóng
2 8/7/2022 15/7/2022
của Camera.
Kiểm thử hệ thống Ragas: Đánh giá trải nghiệm
3 người dùng, cũng như phát hiện lỗi trên phần mềm 16/7/2022 19/7/2022
điều khiển hệ thống.
Tìm hiểu công cụ gst-launch-1.0: sử dụng
gstreamer pipeline bao gồm các element, cách để
4 20/7/2022 29/7/2022
chạy một ứng dụng cơ bản sử dụng gstreamer
pipeline như stream video, chụp ảnh, quay phim.
Đánh giá chất lượng bay thực tế của Vian Sight:
5 29/7/2022 2/8/2022
ghi lại các thông số quan trọng trong khi bay.
Đánh giá chất lượng stream của hệ thống: thực
6 hiện nhiều bài đánh giá ở những phiên bản khác 3/8/2022 11/9/2022
nhau của hệ thống cũng như các thiết bị khác nhau.
Ẩn các thông số trên ứng dụng chỉnh sửa cơ sở
dữ liệu: đảm bảo được các chức ban đầu của ứng
7 12/9/2022 28/9/2022
dụng, song có thể che đi những thông số mà người
dùng không cần thiết phải thay đổi.

3
IV. Chi tiết các nhiệm vụ được giao
1. Công việc thứ nhất: Chuẩn bị các kiến thức nền tảng
a. Mục tiêu công việc
Nhằm giúp các bạn thực tập sinh mới đến công ty có thời gian làm quen với
môi trường làm việc đồng thời học được các kiến thức nền tảng để bắt đầu tham
gia các hoạt động tại doanh nghiệp.
▪ Làm quen với hệ điều hành Fedora
▪ Thực hiện tại tập về Git
▪ Thực hiện một số lệnh tương tác với máy tính nhúng.
b. Nội dung công việc
Làm quen với hệ điều hành Fedora:
Với nội dung này, nhiệm vụ là cài đặt hệ điều hành Fedora vào máy tính cá
nhân để thực hiện các thao tác đơn giản hằng ngày như tạo tệp, thư mục, sao chép,
xóa các tệp hoặc thư mục, v.v. Và tất cả các thao tác phải được thực hiện bằng
lệnh trong Terminal. Sau thời thời gian quy định, người hướng dẫn sẽ trao đổi trực
tiếp để nắm khả năng tiếp thu kiến thức cũng như củng cố lại những lỗ hổng kiến
thức sau quá trình tự tìm hiểu.
Thực hiện Git exercises:
Thông qua bài tập git (với mười câu hỏi vận dụng), nắm được các lệnh cơ
bản thường dùng, các lợi ích của việc sử dụng git cho quy trình quản lý code cho
các dự án. Sau thời gian quy định, người hướng dẫn sẽ đánh giá kết quả làm việc
dựa trên nhật ký của git, sau đó yêu cầu thực hiện lại bài tập để thực tập sinh thành
thạo và hiểu hơn các vấn đề trong bài tập.

4
Hình 1 Mô hình làm việc với Git
Mỗi thực tập sinh sẽ tạo một issue và branch tương ứng trong phần Git
exercises để gói gọn những phần thay đổi mình trong nhánh đó, đồng thời giúp
người hướng dẫn có thể theo dõi lịch sử tương tác với nhánh qua các câu hỏi vận
dụng. Sử dụng lệnh tạo branch đồng thời chuyển sang branch đó để làm việc git
checkout -b branchname. Để hiển thị trạng thái của working directory và staging
area, liệu rằng có tệp nào đã được chỉnh sửa hay thay đổi mà chưa được cập nhật
lên Git, chúng ta sử dụng lệnh sau để kiểm tra git status. git add để thêm một thay
đổi trong working directory và staging area. Nó cho Git biết rằng bạn muốn đưa
các bản cập nhật vào một tệp cụ thể trong lần xác nhận tiếp theo. Sau khi hoàn tất
công việc thay đổi, chúng ta đã sẵn sàng cho việc di chuyển từ staging area sang
committed files, đồng thời để bao gồm phần thông báo cho lần commit đó, ta sử
dụng lệnh sau git commit -m “update file.” Sử dụng git push để tải nội dung kho
lưu trữ cục bộ lên remote repository. Push là cách bạn chuyển các commit từ kho
lưu trữ cục bộ sang remote repository.

5
Tương tác với máy tính nhúng:
Thực hiện tương tác với máy tính nhúng thông qua sử dụng các lệnh thông
dụng như ssh, scp, sshfs, screen. Nội dung này phục vụ rất nhiều cho các công
việc về sau.
▪ SSH (Secure Shell) là một giao thức mạng cho phép kết nối từ xa an
toàn giữa hai hệ thống. Quản trị viên hệ thống sử dụng các tiện ích
SSH để quản lý máy, sao chép hoặc di chuyển tệp giữa các hệ thống.
Vì SSH truyền dữ liệu qua các kênh được mã hóa nên tính bảo mật ở
mức cao. Để chỉ định người dùng cho kết nối SSH, hãy chạy lệnh ở
định dạng sau:
ssh testuser@10.0.0.55
▪ SCP (secure copy) là một tiện ích dòng lệnh cho phép bạn sao chép an
toàn các tệp và thư mục giữa hai vị trí. Với scp, bạn có thể sao chép
một tệp hoặc thư mục:
o Từ hệ thống cục bộ của bạn đến một hệ thống từ xa.
scp file.txt remote_user@10.10.0.2:/remote/directory
o Từ một hệ thống từ xa đến hệ thống cục bộ của bạn.
scp remote_user@10.10.0.2:/remote/file.txt /local/directory
o Giữa hai hệ thống từ xa từ hệ thống cục bộ của bạn.
scp user1@host1.com:/files/file.txt user2@host2.com:/files
▪ SSHFS giúp gắn kết một thư mục từ xa, đặc biệt hữu ích khi cần đọc
một thư mục hoặc tệp lớn, sử dụng SSHFS để đồng bộ thư mục server
và client với nhau.
sshfs user@ip:<folder path server> <folder path local>
▪ Screen: Khi remote server và đột nhiên bị mất kết nối và screen cho
phép tiếp tục các phiên (sẽ tiếp tục chạy các công việc của nó mà
không bị gián đoạn). Trong mỗi session thì có thể chia nhỏ nhiều
terminal trong một cửa sổ.

6
c. Kết quả công việc
▪ Sử dụng thuần thục các thao tác căn bản với hệ điều hành Fedora, góp
phần đẩy nhanh tốc độ công việc sắp tới.
▪ Học được các lệnh cơ bản và nâng cao của git, hiểu được quy trình
quản lý source code của Công ty
▪ Học được các lệnh tương tác với máy tính nhúng và tầm quan trọng
của chúng để phục vụ cho các công việc tiếp theo của dự án.
2. Công việc 2: Test Zoom Visca
a. Mục tiêu công việc
Kiểm tra chức năng Zoom camera Sony thông qua giao thức TCP của một
phần mềm được cung cấp bởi nhà sản xuất, đồng thời hỗ trợ người dùng bằng việc
viết thêm các cấu trúc lệnh và hướng dẫn người dùng có thể thực hiện chức năng
này.
b. Nội dung công việc
Nội dung số 1: Tìm hiểu các lệnh cơ bản của công cụ Gstreamer, thực hiện
lệnh Gstreamer để mở màn hình mà Camera đang Stream để đánh giá việc Zoom
có như mong đợi. GStreamer là một framework cho phép chúng ta có thể tạo ra
các ứng dụng đa phương tiện (multimedia). Với kiến trúc như sau:

Hình 2 Kiến trúc pipeline gstreamer

7
Pipeline được tạo thành bởi 6 elements lần lượt là: file-source, ogg-demuxer,
vorbis-decoder, theora-decoder, audio-sink và video-sink. Các elements này thuộc
về các loại Plugins là:
▪ Sources: Element file-source thuộc loại plugins Source với nhiệm vụ
lấy và gửi luồng dữ liệu của file videos lưu trong ổ cứng đến các
elements tiếp theo trong pipeline.
▪ Formats: Element Ogg-demuxer thuộc loại plugins Formats, elements
này có tác dụng phân chia (demux) luồng dữ liệu được gửi đến từ file-
source thành 2 luồng dữ liệu bao gồm luồng dữ liệu về hình ảnh (trên
hình là src_02) và luồng dữ liệu về âm thanh (trên hình là src_01)
▪ Codec: Hai elements Vorbis-decoder và Theora-decoder thuộc loại
plugins Codec với tác dụng giải mã (decode) luồng dữ liệu được gửi
từ ogg-demuxer thành âm thanh và hình ảnh tương ứng. theora-
decoder thì chịu trách nhiệm giải mã luồng dữ liệu thành các khung
hình của video, còn vorbis-decoder chịu trách nhiệm giải mã luồng dữ
liệu thành âm thanh của video.
▪ Sink: Hai elements video-sink và audio-sink thuộc loại
plugins sink với tác dụng đưa những dữ liệu vào các elements trước đã
decode đến với người dùng, hay nói cách khác chính là phát audio ra
loa và hiển thị khung hình video lên màn hình.
Một lệnh để có thể mở được cửa số của một videotestsrc. Với kết quả chúng ta
nhận được như sau, đối với màn hình này lập trình viên có thể dùng để kiểm tra
được khả năng streaming của hệ thống, hay thêm các tính chất khác để bitrate
phục vụ cho các bài đánh giá chất lượng về sau. Ngoài ra có thể thêm element
khác cho nhiều mục đích khác nhau, tùy theo bài toán mà chúng ta sẽ sử dụng các
element nào cho phù hợp.

8
gst-launch-1.0 videotestsrc ! ximagesink

Hình 3 Màn hình của videotestsrc


Nội dung số 2: Để có thể thu phóng được camera ở những giá trị khác nhau,
người dùng phải vào bên trong đoạn mã để thay đổi. Vì thế cần thêm các cấu trúc
lệnh hỗ trợ người dùng chọn được thông số thu phóng tại terminal. Phần mềm
được viết với ngôn ngữ python và phần code được xử lí để phân tích cú pháp
người dùng nhập vào, đồng thời viết thêm một số mô tả về chương trình như sau.
# Initialize parser
import argparse
parser = argparse.ArgumentParser(
prog='Zoom VianSight Camera',
description='Choose a zoom parameter (What the program
does).',
epilog='A few notes before entering a zoom parameter
(Text at the bottom of help).'
)
parser.add_argument('-z', '--zoom', help='Please give a zoom
parameter.')
args = parser.parse_args()
Để phóng camera ở mức 50, người dùng chỉ cần chạy một dòng lệnh trong
terminal sudo python3 test.py --zoom 50. Vì phải phân tích cú pháp người dùng
nhập vào nên có khả năng sẽ rơi vào các trường hợp nhập sai lệnh, hướng giải
quyết ở đây là sử dụng Try để thông báo các lỗi tương ứng cho các tình huống
(TypeError, ValueError)

9
except TypeError:
print('Invalid argument! Please add [-h] [--help]
for description.')
check_error = 0
except ValueError:
print ('Invalid zoom parameter!')
check_error = 0
Nội dung số 3: Để việc review source lẫn nhau giữa các thành viên trở nên dễ
dàng hơn thì không thể không nói đến tầm quan trọng của việc sử dụng chung một
chuẩn định dạng code chung. Tại công ty, PEP8 (Python Enhancement Proposal
#8) được sử dụng như một phong cách lập trình được chia sẻ chung giữa các lập
trình viên python. Với một số quy định của PEP8 được ứng dụng vào trong phần
mềm này như sau:
Quy ước đặt tên:
Bảng 3 PEP 8 quy ước đặt tên được ứng dụng vào sản phẩm
Kiểu Quy ước đặt tên Ví dụ
Function Sử dụng từ hoặc từ viết thường. Phân tách các zoom_direct
từ bằng dấu gạch dưới
Variable Sử dụng một chữ cái, từ hoặc từ viết thường. camera_zoom_value
Tách các từ bằng dấu gạch dưới
Class Bắt đầu mỗi từ bằng một chữ cái viết hoa. Visca
Không phân tách các từ bằng dấu gạch dưới.
Constant Sử dụng một chữ cái, từ hoặc từ viết hoa. Tách IP_ADDRESS
các từ bằng dấu gạch dưới
Module Sử dụng một từ hoặc từ viết thường, ngắn. test_visca.py
Tách các từ bằng dấu gạch dưới
Ngoài ra, chọn một cái tên cũng vô cùng quan trọng. Cách tốt nhất để đặt tên cho
các đối tượng của bạn bằng Python là sử dụng các tên mô tả để làm cho nó rõ
ràng những gì đối tượng đại diện.

10
Bố cục đoạn mã:
▪ Dòng trống: sử dụng các dòng trống giữa các hàm để hiển thị các bước
một cách rõ ràng hơn.
def calculate_variance(number_list):
sum_list = 0
for number in number_list:
sum_list = sum_list + number
mean = sum_list / len(number_list)

sum_squares = 0
for number in number_list:
sum_squares = sum_squares + number**2
mean_squares = sum_squares / len(number_list)

return mean_squares - mean**2


▪ Chiều dài dòng tối đa và ngắt dòng: PEP 8 gợi ý các dòng nên được
giới hạn ở 79 ký tự. Điều này là do nó cho phép bạn mở nhiều tệp bên
cạnh nhau, đồng thời tránh ngắt dòng. Python cho phép xuống dòng
với một số ví dụ như sau:
#Example 1:
def function(arg_one, arg_two,
arg_three, arg_four):
return arg_one
#Example 2:
from mypkg import example1, \
example2, example3
#Example 3:
total = (first_variable
+ second_variable
- third_variable)
Quy tắc thụt đầu dòng, PEP 8 khuyên nên luôn sử dụng 4 khoảng trắng liên tiếp để
biểu thị thụt lề, có thể sử dụng “tab” tuy nhiên cần thiết lập “tab” là 4 khoảng trắng
liên tiếp.
x = 3
if x > 5:
print('x is larger than 5')

11
Quy tắc về comment, một số điểm chính cần nhớ khi thêm comment vào code:
▪ Giới hạn độ dài dòng của comment và chuỗi comment ở mức 72 kí tự
▪ Sử dụng các câu hoàn chỉnh, bắt đầu bằng chữ in hoa
▪ Đảm bảo cập nhật comment nếu có thay đổi code của mình.
# Example 1:
for i in range(0, 10):
# Loop over i ten times and print out the value of i,
followed by a
# new line character
print(i, '\n')
#Example 2:
def quadratic(a, b, c, x):
"""Solve quadratic equation via the quadratic formula.
A quadratic equation has the following form:
ax**2 + bx + c = 0
There always two solutions to a quadratic equation: x_1
& x_2.
"""
x_1 = (- b+(b**2-4*a*c)**(1/2)) / (2*a)
x_2 = (- b-(b**2-4*a*c)**(1/2)) / (2*a)

return x_1, x_2


Nội dung thứ 4: Liên hệ người hướng dẫn để được đánh giá sản phẩm về hình
thức cũng như chức năng, xác định được mức độ hoàn thành cho công việc.
c. Kết quả công việc
Phần mềm Zoom Camera thông qua giao thức TCP có thể dễ dàng để sử
dụng hơn bằng việc nhập được giá trị Zoom camera tại terminal mà không cần vào
trong source code để chỉnh sửa.
Có thể dễ dàng sử dụng chức năng “--help” để xem được các hướng dẫn cho
việc sử dụng phần mềm. Đồng thời nếu người dùng nhập sai cấu trúc hoặc rơi vào
những trường hợp không có nghĩa, phần mềm sẽ hiển thị các thông báo giúp người
dùng điều chỉnh lại câu lệnh của mình.

12
3. Công việc 3: Kiểm thử hệ thống Ragas
a. Mục tiêu công việc:
Với Ragas trên Ground Controller Station là ứng dụng giúp người dùng có thể
tương tác được máy quay với một giao diện đảm nhiệm rất nhiều chức năng quan
trọng của hệ thống trong việc điều khiển máy quay tùy theo mục đích của người
dùng. Bài đánh giá sẽ có cái nhìn khách quan từ góc độ người dùng lẫn lập trình
viên để có thể kịp thời phát hiện lỗi của các chức năng mới được cập nhật trên
Ragas.
b. Nội dung công việc:
Tìm hiểu được cách vận hành của hệ thống, các quy định quy trình tắt mở
cũng như cách thiết lập các thông số để điều khiển được hệ thống theo mục đích
của bài đánh giá.
Tiến hành kiểm tra tính hoạt động của hệ thống, với kết quả mong muốn là
hệ thống khởi động bình thường, các hình ảnh từ camera được hiển thị trên phần
mềm, cũng như các thông tin trạng thái hiển thị đúng với thực tế. Đánh giá khả
năng theo dõi đối tượng của máy quay, với kết quả mong muốn khả năng theo dõi
đối tượng máy quay một cách chính xác, nhanh chóng ở cường độ cao, ở điều kiện
bị che khuất. Kiểm tra chế độ điều khiển thủ công máy quay, các chức năng di
chuyển góc máy theo các hướng khác nhau. Đánh giá các chế độ quay phim, chụp
ảnh của camera có nhạy không, hình ảnh lưu về có đúng với định dạng trước đó
không, cũng như đánh giá trải nghiệm sử dụng của việc quay phim, ảnh chụp ảnh
trên cả hai camera. Kiểm tra chế độ thu phóng của camera với mức độ thu nhỏ
nhất và phóng lớn nhất, độ ổn định của hình ảnh trong quá trình thu phóng diễn ra.
Viết báo cáo và liên hệ người hướng dẫn để đánh giá nội dung và mức độ
hoàn thành các yêu cầu đã được đề ra trước đó.

13
c. Kết quả công việc
▪ Các chức năng cốt lõi của phần mềm được đảm bảo.
▪ Phát hiện được một số lỗi vặt và báo cáo lên đội ngũ phát triển phần
mềm để được sửa chữa.
▪ Đề xuất thêm một số ý tưởng nhỏ giúp cải thiện trải nghiệm người
dùng trên thiết bị Ground Controller Station.
4. Công việc 4: Tìm hiểu công cụ gst-launch-1.0
a. Mục tiêu công việc
Theo trang chủ của Gstreamer “GStreamer is a framework for creating
streaming media applications.” Là một công cụ mà đội ngũ phát triển phần mềm
công ty sử dụng để có thể stream được hình ảnh từ các thiết bị camera về bộ điều
khiển thông qua IP, đồng thời Gstreamer cũng có nhiều chức năng khác phục vụ
cho việc kiểm tra đánh giá hệ thống ở nhiều điều kiện khác nhau. Mục tiêu của
công việc này có thể giúp tìm hiểu được các chức năng cơ bản cũng như cần thiết
của Gstreamer phục vụ cho việc đánh giá hệ thống stream ở các bài kiểm tra sau.
b. Nội dung công việc
Nội dung số 1: Tiến hành điều chỉnh các thông số của video stream
testsource như độ phân giải, số khung hình trên giây, bitrate,… hay hiển thị các
thông số quan trọng lên màn hình stream phục vụ cho các bài đánh giá về sau. Một
ví dụ cho việc hiển thị một số thông tin liên quan đến FPS lên màn hình streaming
để theo dõi được chất lượng hình ảnh nhận được từ Camera.
gst-launch-1.0 videotestsrc ! fpsdisplaysink

Hình 4 Hiển thị thông tin FPS lên màn hình stream

14
Để có thể thay đổi độ phân giải cho màn hình stream, đồng thời thay đổi số khung
hình trên giây (fps) ta có thể thêm vào các elements như sau
gst-launch-1.0 videotestsrc ! video/x-
raw,width=1280,height=720,framerate=10/1 ! fpsdisplaysink

Hình 5 Thay đổi độ phân giải và fps cho stream


Để kiểm tra được những thay đổi trong lệnh có thực sự tác động vào stream chúng
ta có thể hiển thị các thông số đó lên màn hình stream hoặc sử dụng một công cụ
khác là VLC, dưới đây là cách kiểm tra một số thông số video qua phần mềm.

Hình 6 Kiểm tra các thông số video

15
Nội dung số 2: Có thể stream được video được mã hóa bởi chuẩn h264 mà
không sử dụng element decodebin vì hình ảnh gửi về từ các camera được mã hóa ở
chuẩn h264 không thể đọc được mà không có bộ mã hóa riêng biệt. Bộ giải mã
decodebin thì nó lại phụ thuộc vào từng thiết bị mà chúng ta sử dụng, vì thế không
đảm bảo được tính khách quan cho hệ thống chính. Với video được sử dụng để
kiểm tra được mã hóa dưới dạng sau:
rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4

Hình 7 Video được sử dụng để kiểm tra chức năng


Nội dung số 3: Tìm hiểu cách chụp ảnh và lưu video từ stream bằng công cụ
Gstreamer về local. Công cụ cho phép thêm các element để điều chỉnh được độ
phân giải hình ảnh, bitrate, vị trí lưu trữ v.v. đối với hình ảnh và video lưu về. Một
ví dụ về lệnh để lưu video từ nguồn cho trước
gst-launch-1.0 -e rtspsrc protocols=tcp
location=rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.m
p4 ! [đoạn lệnh ẩn vì bảo mật thông tin] ! filesink location=camera.mp4

Hay sử dụng đoạn lệnh sau để chụp hình ảnh tại một thời điểm của video
gst-launch-1.0 rtspsrc protocols=tcp
location=rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.m
p4 ! [đoạn lệnh ẩn vì bảo mật thông tin] ! video/x-raw, width=1280,
height=960 ! jpegenc ! multifilesink location=saved.jpg

Kiểm tra hình ảnh và video được lưu về tại đường dẫn được định nghĩa

16
Hình 8 Kiểm tra hình ảnh và video đã được lưu
c. Kết quả công việc
Có thể sử dụng được công cụ Gstreamer với các thao tác thông dụng, cũng
như cách tìm kiếm tài liệu đối với công cụ này nhằm phục vụ cho các bài đánh giá
trong thời gian sắp tới.
5. Công việc 5: Đánh giá chất lượng bay thực tế của Vian Sight
a. Mục tiêu công việc
Thông qua quá trình bay thực tế của Vian Sight, thu thập một số các số liệu
về băng thông, độ trễ, một số thông số về chất lượng sóng trong các điều kiện sóng
tốt nhất và xấu nhất. Công việc này phục vụ cho việc đánh giá chất lượng stream
của hệ thống mà không cần đi bay thực tế nhiều lần mà chỉ cần mô phỏng lại điều
kiện bay tại các thời điểm đã định trước, và đánh giá chất lượng stream trong điều
kiện mô phỏng.
b. Nội dung thực hiện
Nội dung số 1: Làm rõ các thời điểm thu thập dữ liệu dành cho việc đánh giá
chất lượng để hạn chế đi bay nhiều lần, gây tổn thất về tiền bạc, thời gian và sức
người. Viết sẵn mẫu báo cáo ở các thời điểm lấy dữ liệu về chất lượng bay, liên hệ
người hướng dẫn để được chỉnh sửa và hoàn thiện testcase trước khi bay.
Nội dung số 2: Tìm hiểu và sử dụng một hoặc nhiều công cụ có thể trả về các
thông số như yêu cầu được đặt ra trước đó. Viết script cho các lệnh chạy cùng lúc
để đảm bảo các số liệu được thu tại cùng một thời điểm. Các thông tin về chất
lượng bay tại một thời điểm nào đó cũng chính là tên của thư mục chứa các thông
tin đó, giúp dễ dàng theo dõi và kiểm soát thời điểm lấy dữ liệu.

17
Hình 9 Các thư mục được tạo tự động theo thời gian thực
c. Kết quả công việc
▪ Thu thập băng thông và độ trễ của máy bay đến Ground Controller
Station, kết hợp với website cấu hình của hệ thống để lấy các thông tin
khác về chất lượng sóng tại thời điểm muốn thu thập số liệu.
▪ Dữ liệu đã được thu thập phục vụ cho mục đích phát triển khả năng
stream của hệ thống và mô phỏng cho bài đánh giá kế tiếp theo mà
không cần phải đi bay thực tế.
6. Công việc 6: Đánh giá chất lượng stream của hệ thống
a. Mục tiêu công việc
Từ việc bay thực tế, tiến hành mô phỏng lại các điều kiện bay để tiến hành
đánh giá chất lượng stream video ở các điều kiện khác nhau, phiên bản khác nhau
cũng như các thiết bị khác nhau. Nhằm phục vụ cho việc cải thiện độ phân giải
stream, giảm độ trễ và mất gói tin cũng như đa dạng hóa các thiết bị điều khiển.
b. Nội dung công việc
Nội dung số 1: Viết testcase cho mỗi bài đánh giá theo mẫu trên Google
Sheet, sau đó trao đổi với người hướng dẫn để được chỉnh sửa và hoàn thiện bộ
testcase từ việc chuẩn bị phần cứng đến phần mềm.

Hình 10 Các sheet của testcase


Với mỗi bài đánh giá, testcase sẽ được chia ra thành ba sheet lớn để quản lý. Với
sheet Summary là những tổng hợp về bài đánh giá một cách ngắn gọn để
Reviewer có thể xem nhanh. Sheet Set up sẽ là nơi ghi lại những phiên bản phần

18
mềm, phần cứng sử dụng, cũng như cụ thể hóa quy trình đánh giá, v.v. Và Sheet
For tester được tạo ra để giúp Tester có thể tiện lợi hơn cho việc đánh giá hệ
thống mà không cần mở quá nhiều Sheet để ghi chú hoặc xem lại, vì mỗi bài đánh
giá trong thực tế phải thao tác về mặt phần cứng khá nhiều nên việc tạp thêm một
Sheet dành cho Tester sẽ giúp quy trình đánh giá nhanh chóng và chính xác hơn.
Sau đây là các bài Test lớn đã được thực hiện:
▪ Đánh giá chất lượng stream video trong điều kiện giả lập các chất
lượng sóng khi bay của hệ thống.
▪ Đánh giá chất lượng stream video ở những phiên bản khác nhau của
hệ thống.
▪ Đánh giá chất lượng stream video trên nhiều thiết bị như điện thoại,
tablet, máy trạm, máy tính cá nhân,v.v.
▪ Đánh giá chất lượng stream video với điều kiện người dùng sử dụng
hệ thống trong thời gian dài.
Nội dung số 2: Gửi bài đánh giá về người cho người hướng dẫn để được trao
đổi về bài kiểm tra hệ thống hiện tại.
c. Kết quả công việc:
Đã thực hiện được nhiều bài đánh giá chất lượng stream ở những điều kiện
khác nhau, ở những phiên bản khác nhau, và phần cứng khác nhau qua đó phát
hiện ra được nhiều lỗi cũng như các vấn đề góp phần cho việc cải thiện chất lượng
stream video.
Qua nhiều bài đánh giá khác nhau thì giúp rút ra được nhiều cách để tối giản
quy trình thực hiện cũng như đưa ra testcase chính xác và đầy đủ. Góp phần cải
thiện hiệu suất công việc về sau

19
7. Công việc 7: Ẩn các thông số trên ứng dụng chỉnh sửa cơ sở dữ liệu
a. Mục tiêu công việc
Đối với việc người dùng có thể dễ dàng chỉnh sửa các thông số cấu hình cho
database thì không đảm bảo được tính an toàn cho hệ thống. Với phiên bản hiện
tại, người dùng sẽ có thể chỉnh tất cả các thông số cấu hình ở tệp json được trả về,
tuy nhiên nó chỉ có tác dụng đối với các thông số mà nhà phát triển cho phép
người dùng có thể cấu hình nó. Với mong đợi phiên bản tiếp theo là đảm bảo được
các chức năng của phiên bản cũ, tuy nhiên các tệp json trả về sẽ không chứa các
thông số mà người dùng không được quyền chỉnh sửa, mà chỉ những thông số nào
nhà phát triển cho phép người dùng cấu hình thì mới được hiển thị tại tệp json.
b. Nội dung công việc
Nội dung số 1: Tìm hiểu cách sử dụng phần mềm với phiên bản hiện tại, cũng
như đã và đang có những thông số quan mà người dùng sẽ có thể chỉnh được, cũng
như không thể chỉnh được. Trao đổi đổi với người hướng dẫn để thống nhất những
thông số nào cần giữ lại để có thể chỉnh sửa và những thông số nào sẽ được ẩn đi.
Nội dung số 2: Giải quyết bài toán này với việc xử lí tệp json cũ thành một
tệp json mới với đúng những yêu cầu đã đặt ra. Với phiên bản đang có, khi sử
dụng một thư mục được tạo sẽ chứa rất nhiều thông số liên quan đến việc stream
của camera tồn tại ở dạng tệp json. Để đảm bảo người dùng cấu hình đúng những
thông tin cần thiết, cần tiến hành tối giản tệp json này cho người dùng.

20
Hình 11 Mô hình ứng dụng chỉnh sửa database
Như hình trên, chúng ta có thể thấy ban đầu người dùng sẽ tương tác với tệp json
cũ sẽ chứa rất nhiều thông số mà người dùng không tương tác được. Và ở phiên
bản mới, một tệp json khác được tạo ra để người dùng tương tác lên đó và tệp này
trùng khớp với những yêu cầu đã đặt ra trước đó. Để đánh giá tính ổn định của hệ
thống với những thay đổi mới, việc kiểm tra các chức năng được thực hiện nhiều
lần để đảm bảo tính đúng đắn.
Nội dung số 3: Trao đổi với người hướng dẫn để được đánh giá và hoàn thiện
c. Kết quả công việc
▪ Qua nhiều lần kiểm tra đánh giá, phiên bản mới đã đảm bảo được các
chức năng của phiên bản cũ.
▪ Người dùng sẽ chỉ tương tác được các thông số mà nhà phát triển cho
phép người dùng thay đổi tùy theo những mục đích khác nhau.
▪ Vẫn chưa hệ thống hóa lại đoạn mã cũng như clean code và chưa nhận
được đánh giá cụ thể từ người hướng dẫn.

21
V. Kết quả đạt được qua đợt thực tập
1. Về kiến thức
Được tiếp xúc với máy tính nhúng, tìm hiểu được rất nhiều lệnh linux hay,
cũng như hiểu rõ hơn về vai trò và chức năng của máy tính nhúng trong một hệ
thống lớn. Qua đó giúp em có thêm một cái nhìn về ngành Embedded Linux và nó
đang dần trở thành một trong số lựa chọn nghề nghiệp của bản thân trong tương lai
gần.
Thông qua công việc 2 (Test Zoom Visca) bản thân học được cách thêm
argument vào các cấu trúc lệnh để giúp việc thay đổi một hay nhiều thông số nào
đó trở nên tiện lợi hơn. Đồng thời việc sử dụng Path script cũng giúp ít rất nhiều
cho dự án cá nhân trong việc viết ra một phần mềm để điều khiển hệ thống, vì
những chương trình đang sử dụng không đáp ứng được những yêu cầu đặt ra.
Học thêm được rất nhiều công cụ hay như Gstreamer cho phép chúng ta có
thể tạo ra các ứng dụng đa phương tiện hay Phần mềm cơ sở dữ liệu phụ vụ cho
việc lưu trữ dữ liệu hệ thống tại Server. Hay một số kiến thức cơ bản về mạng
trong việc thiết lập ip các thiết bị sao cho phù hợp với hệ thống, cũng như điều
chỉnh một vài thống số khác trong đường truyền giữa các thiết bị như bằng thông,
độ trễ, tỉ lệ mất gói tin.
2. Về kĩ năng
Học được quy trình quản lý source code trong một tổ chức doanh nghiệp
thông qua đó giúp bản thân cải thiện việc quản lý source code cho các dự án cá
nhân hiệu quả và chính xác hơn. Sau khi được tiếp xúc với git tại công ty, em cùng
thành viên nhóm đồ án của mình đã ngay lập tức nhìn lại chính những sản phẩm
của mình trong những năm qua tại trường chưa được quản lý một cách đúng đắn,
điều đó khiến bọn em bắt tay vào việc áp dụng kiến thức này cho các dự án cá
nhân.
Cải thiện kỹ năng trình bày vấn đề, khả năng phân tích và đưa ra giải pháp
cho các vấn đề mắc phải. Vì các nội dung mà người hướng dẫn giao đa phần cũng

22
chưa có một kết quả nào cụ thể vì thế kết quả nằm trong khả năng người tìm kiếm
và phân tích thông tin, cùng với đó là trao đổi với các thành viên khác cũng như
người hướng dẫn để kết luận vấn đề.
Nâng cao kỹ năng tìm kiếm, phân tích tài liệu bằng tiếng anh, cũng như kỹ
năng viết qua các bài thu hoạch hay quy trình đánh giá sản phẩm. Góp phần tự tin
hơn trong việc tiếp xúc với một tài liệu phức tạp, luôn cố gắn ghi lại tài liệu thông
qua những kiến thức học được. Qua thời gian thực tập, xây dựng được thói quen
việc ghi lại toàn bộ những kiến thức học được, từ quy trình đến keyword cho các
vấn đề được áp dụng vào cho các dự án cá nhân và mang lại nhiều kết quả tích
cực.
Học được cách đưa ra các trường hợp đánh giá cho một hệ thống khi gặp các
vấn đề, hay để kiểm tra các tính năng. Thông qua đó bản thân trở nên bình tĩnh
hơn trước những sự cố của hệ thống và đưa ra những quyết định chính xác cho
việc đánh giá lại hệ thống.

VI. Nhận xét về chương trình đào tạo


Trong thời gian thực tập tại công ty, với những kiến thức nền tảng mà chương
trình đào tạo của khoa đã cung cấp trong suốt 3 năm học đã giúp em có một kỳ
thực tập ý nghĩa, bổ ích và gặp không quá nhiều khó khăn trong thời gian làm việc
tại công ty, cụ thể là chuyên ngành làm việc với hệ thống nhúng.
Thuận lợi:
▪ Có kiến thức nền tảng về tư duy lập trình, nên khi được giao các nội
dung về lập trình sẽ cảm thấy tự tin và đảm bảo được công việc.
▪ Có kiến thức cơ bản về mạch điện, thiết bị điện tử.
▪ Được tiếp cận một hệ điều hành ngoài Windows, cụ thể là hệ điều
hành Ubuntu.
▪ Thông qua các môn học của khoa, gần như em đều được vận dụng
ngôn ngữ C vào các đồ án qua các học kỳ nên việc dễ dàng hơn cho
việc tiếp xúc với các ngôn ngữ mới khác.

23
Khó khăn và đề xuất:
▪ Hiện nay lập trình trên máy tính nhúng đang là một trong những lựa
chọn của nhiều người và nhu cầu của nhiều công ty. Để học được kiến
thức đa phần là sinh viên phải tự trang bị cho mình từ kiến thức đến
phần cứng, chi phí cho việc này là không hề rẻ đối với đa số các sinh
viên. Nên khoa có thể tổ chức thêm một lớp học về chuyên ngành này
để sinh viên có cơ hội cọ xát nhiều hơn với máy tính nhúng, thuận lợi
hơn về cơ hội làm việc cho sinh viên.

24

You might also like