TuSimple Internship
- Date: 2021.6.14 — 2021.9.3 (12 weeks)
- Location: Remote (office location: San Diego, CA)
- Team: Map Infra team
- Project: Map Editor
- Tools:
JavaScript — Vue.js, three.js
Introduction#
TuSimple is a company focused on self-driving trucks. However, I wasn't responsible for
the autonomous driving algorithm—that's for the ML engineers. As a full-stack SWE, I build
internal infrastructure that supports autonomous trucks, namely a
Map Editor.
Like many autonomous vehicle companies, TuSimple has an internal
high-precision map dataset, used for navigating their self-driving trucks.
The Map Editor is a single-page application
built for visualizing and editing the map.
My internship involves adding features to this Editor. Since it's an internal tool,
I cannot show image demos of my own work.
Task 1 — Street View#
Description: This feature is similar to the "Street View"
functionality of Google Maps:
given a coordinate on the road map, display images taken at this location.
Google Maps Street View, for reference
Back-end: I used an internal Python API to query images:
given a location, iterate through a dataset to find all images taken within a 50-meter radius.
If the result was cached, return the cached results.
As the query progresses, the program transmits the binary image files to the front-end.
Front-end:
I wrote a Vue component
to create a window that displays these images and shows their properties (date captured, etc.).
Task 2 — Layers Window#
Description: The map consists of many "layers".
For each layer, you can add elements into it, export it, set it as invisible, etc.
You can also add or delete layers.
For reference, this is what the window for editing layers looks like in
Google My Map
and Adobe Photoshop, respectively. I needed to design
a similar user interface.
Front-end: I rewrote the Vue
component for the layers window.
In the new design, all operations on the layer was moved into a dropdown menu,
instead of many buttons crammed into the same row as the layer name.
The new component structure was also more modular and expandable than the original.
Back-end: I modified the back-end code to support more operations
on single layers or a group of layers, such as displaying a layer's properties and
sorting a collection of layers, respectively.
Conclusion#
In this internship, I worked as a full-stack engineer, and built tools
to help the TuSimple mapping team view and edit maps. The features I introduced
are expected to improve map engineers' efficiency by 5-10%.
Click "View"
to read about the behavioral aspects of this internship, as well as what I learned from the experience.
Relevant Diary (in Chinese):
Interview — D5P345,
D5P346,
D5P348;
Intern offer decision — D5P349,
D5P350,
D5P351;
Internship — D5P398,
D5P404,
D5P405
Work environment
My mentor is one of the main architects of the Map Editor project, having worked on it
for more than 2 years. Since my project was about improving the Map Editor,
my mentor became my primary point of contact. In fact, throughout my internship,
80% of all my communication was done with my mentor.
This means that I could concentrate more on writing code instead of coordination, which is nice.
My mentor specified my tasks, answered my questions about the giant codebase,
and gave feedback to my code, in terms of both functionality and code cleanliness.
He set reasonable expectations for me, and was usually quick to respond to my messages;
he was strict with my code quality, but praised me in group meetings.
Regretfully, I didn't get to know other team members well, partly because my internship
was remote, and I didn't have the chance to visit the company's office in San Diego.
Code Quality
Variable names are
In task 2
Team management
My manager holds the philosophy that, each person on the team should be versatile
enough to be individually responsible for a large project, for a long duration.
In my opinion,
This is in contrast to many people working together to get a project done.
Offer decision
TBD