In my last posting I discussed the construction of the box for the new Jetson TX1 dev kit board. Since I had to take the electronics out of Nomad to accomplish this rebuild I decided I should write a little bit about the hardware stack. Since the physical build, including the hardware, is pretty much done at this point you can look forward to much more technical articles as I start to work on the program and getting all of the pieces talking to each other. Mind you, some of this has already been done, but since I have to do it again, it's a good chance to write about it.
I'll be working through the hardware stack bottom up since that's how stacks work, generally.
At the bottom of the stack is, obviously, the motors. This really is the final output of the entire exercise. I mean, the point of everything else is to turn the motors to move the robot to its goal. I've written about the motors in previous posts so I'll keep it short here. The motors used for Nomad are the four Actobotics 313 RPM HD Precision Planetary Gear Motors that came with the original Nomad 4WD Offroad Chassis kit from Servo City. These are very powerful motors for the price and with four of them I have no doubt they will have little problem moving Nomad (which, at the time of this writing, weighs in at 18.2lbs). The motors a kind of visible in the image above.
Since I'm working off the above image, at this point, I'll address the sensors. There are a total of six SR-04 ultrasonic range finders mounted three front and three back. They are all attached using custom mounts I designed and cut on the ATX Hackerspace laser cutter. The mounts also have a place to mount an inexpensive IR sensor I picked up a while back but have not added as yet. I will very likely be remaking these mounts to accommodate a better IR sensor.
These items are integrated with the chassis and are what I consider core. Through all of the changes that have been made, the motors, ultrasonic sensors, and the motor controller have remained consistent. Which brings me to the next component in the stack; the motor controller.
Inside the original box from the chassis kit, at the bottom of the stack, is the Roboclaw 2x30 Motor controller. This has proven to be my favorite motor controller to date. It has been reliable and is very flexible. One of my favorite features is the USB serial channel which allows two way communication with the host computer. There are ROS packages already developed for it, so integration with Nomad is more or less done for me. It did require a firmware update since this is the original board I've been using from the beginning.
A big piece of this, and any build, has been the power distribution challenges. As you can see in the image above, I had to spend some time figuring out what I need and where it's going to be mounted. On the left, there, you'll see the power terminal block. These blocks are generally straight through connections, meaning a post on once side is connected to a post on the other side and each pair is isolated from the other. However, there are connectors available that jump the isolation wall and allow you to create rails. Using those connectors I set up the terminal block into two sections; power in and power out. The two sides are separated with the power switch.
There are four LiPo battery packs used to power Nomad. The terminal block configuration allows me to connect all four battery packs in parallel. A line then runs from this side of the block to the power switch and then back to the output side of the block. The output side of the block then distributes the 12vdc to the motor controller and the distribution board at the bottom of the photo. This distribution board was built on a breadboard and has six 3 pin connectors. These connectors then accommodate the fans, lighting, and 5vdc regulator (to the right of the board). The 5vdc regulator provides additional power to the Arduino sensor shield for the servos and/or any other sensor or component needing the extra power.
As an extra bonus, when the power switch is in the OFF position it taps into the barrel jack mounted below the switch. This allows me to power Nomad from an external power supply while it's on the bench. The bench power supply has its own power switch.
Now that all of that power distribution nonsense is out of the way, the next component in the stack is the Arduino Mega. I suppose I could get away with the smaller Uno at this stage of development and save some room inside the lower box, but with plans to add more sensors to Nomad, starting off with the Mega seemed the way to go. The additional sensors planned are IR sensors to supplement each of the ultrasonics, edge sensors with the sensor clusters, and possibly two more clusters, left and right. The Arduino also controls the pan/tilt head for the camera. If I get super ambitious in the future and decide to add actuators, the Arduino will control them as well.
On top of the Arduino is a sensor shield. This shield breaks out each of the Arduino pins and conveniently pairs them with ground and Vcc pins. All of the sensors and actuators can then be easily connected with a standard 3-pin servo style connector. The shield also has its one voltage connector so it can be connected directly to the 5vdc regulator.
The last component of the stack is the Jetson board itself; the reason for the new box to begin with. Of course, this image was taken out of order, so all of the fun power distribution parts aren't shown, but you get the idea. Four 1 inch offsets are used to elevate the board to provide cabling access to the boards underneath, clearance for the 3-pin connectors on the sensor shield, and improved airflow through the box. The Jetson is then connected to the USB3 hub, external antenna terminals, and external HDMI port. I have a wireless keyboard and touchpad from Logitech which is connected to the USB hub. So, once powered, I can program Nomad directly with a connected HDMI monitor.
Outside the box, mounted on the top plate, are two of the main sensors; the 9 Degrees of Freedom Razor IMU and Zed stereo camera. The Razor IMU is mounted on a 12 inch shaft, also from Actobotics, which is intended to get the magnetometer as far away from the motors as possible. Is this required? I don't know. If it turns out to be irrelevant I will remove the mast and find a place to mount the IMU within the box. But, for now, it's raised away from the body and magnetic interference. The Zed camera is mounted on an SPT200 Pan & Tilt System from, you guessed it, our friends over at Servo City. I used two of the HS-645MG high torque servos to reduce shake. Both the Razor IMU and the Zed camera are connected to the USB3 hub, though the IMU does require a serial to USB converter. In this case I am using the SparkFun 3.3vdc FTDI Basic Breakout.
That is the hardware stack and pretty much the build. Next step is to get the latest installation of Jetpack installed on the Jetson.