← Back to context

Comment by TaylorAlexander

3 years ago

I worked for Toyota Infotechnology Center in Sunnyvale in 2016/2017 on a robotics research project involving their HSR robot running ROS.

The robot had odometry from the wheels, though it was a bit noisy due to the construction of the omnidirectional mechanism. They decided to ignore wheel odometry and use only an odometry module based on the planar lidar, essentially visual odometry. This worked fine in most circumstances, but basically completely failed in hallways as they lacked distinctive features. This interfered with my work which involved the robot navigating around the office.

I had worked on this problem before, and ROS has an excellent sensor fusion library for dealing with multiple noisy sensor readings. You just need to combine wheel odometry and laser odometry with a kalmann filter, and the sensor fusion library makes this relatively easy.

However even though I worked at a Toyota office with full time Toyota employees, and the code was pretty much off the shelf ROS code, and the robots were produced in very low volumes and only in use at Toyota, they wouldn't give me the source code. I think maybe they wouldn't even give me root access.

Still, I was able to control the names of ROS topics using the ROS launch files (it has been a while since I worked with ROS and I forget some of the terms). I remapped the lidar odometry topic to an intermediary topic name instead of /odom, then directed the intermediary topic in to the sensor fusion module along with the wheel odometry, then mapped the sensor fusion output to /odom. The system got odometry information but now it did not come from the lidar odometry but from the sensor fusion module, so it was happy.

The fix worked great. It had normal behavior when lidar was good, and had reliable odometry in long hallways. I was finally able to implement my office navigation code.

I did my best to communicate these changes back to Toyota. They had not been very helpful when I was asking for help solving the issue, but I had hoped that since I had it working they would appreciate this. I asked where I could file a git issue or otherwise push the code to some private git repo.

They were not using git. Ultimately I was instructed to email the raw code files I had used along with instructions for how to integrate it. I found this quite surprising. I have no idea if they ever implemented the changes I suggested, but I kind of doubt it. From what I have heard of japanese software practices, they basically do not accept code suggestions from the bottom up.

I know of some people who worked for Toyota Research Institute who said they were trying to get the Toyota folks to integrate silicon valley coding rigor in to their systems. Maybe they had success, I don't know. But certainly 6 years ago things were a total mess.

> ... silicon valley coding rigor ...

That's not "silicon valley", that's "anywhere remotely modern" coding rigor. Sounds like they need to get with the times, especially with regards to developing systems with software stacks that are a couple orders of magnitude larger than in the recent past (like 15 years ago).

> silicon valley coding rigor

This was refreshing to read. Within my bubble in tech, it's often easy to get jaded about how _unrigorous_ our "engineering" often is.

  • The place I worked next was google, which has probably some of the most rigorous software practices in the industry. Not everyone is going to be like them, but one of the absolute basics is using revision control for code!