tusimple

TuSimple Internship

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

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.


MyMap layer view


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%.

The Story  #

Click "" 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

Back to Projects