The F1/10 platform is a modified Traxxas Rally Racer, (a 1/10th scale formula race car capable of speeds up to 40mph). The ground platform is equipped with the following sensors: Razor 9-DOF IMU, Hokuyo LIDAR, and ZED 3D camera. These sensors are responsible for localization, mapping, and odometry. A Jetson TK1 development board serves as the primary computational unit. The TK1 runs Ubuntu Linux, and we develop applications for the car using ROS Indigo. ROS provides a communication protocol between processes, language-independent build and management of applications, and a rich library of open-source packages that implement common components of robotics (e.g. perception, planning, and hardware drivers.) The modded car also includes an external battery pack, a Teensy microcontroller to provide outputs to the Traxxas electronic speed controller (ESC), and a wireless access point (WAP) that facilitates remote access to the car.
Parts list, tutorials, and race details: http://f1tenth.org/ (look for link to their GitHub for some example code)
*** Preliminaries: connect to battery pack (and PicoStation), turn TK1 on, make sure it's connected to the correct network, unplug peripherals, turn on power to motors (this last step should be done very last just to be safe, like after ROS nodes are setup) ***
*** To SSH: ssh ubuntu@192.168.1.1 ***
roscorerosrun rosserial_python serial_node.py /dev/ttyACM0 (this is what allows us to talk to the teensyduino)rosrun week1tutorial talker.pyrosrun week1tutorial keyboard.py rostopic echo /drive_pwm to view the PWM values being sent to the teensyduino (and subsequently to the low-level motor controllers). This can be used to confirm any app is sending correct commands to the wheels, even when the motors are powered off. This testing technique should be used in initial development to ensure the car won't run itself into walls or off tables. roslaunch zed_wrapper zed.launchrosrun rosserial_python serial_node.py /dev/ttyACM0 rosrun week1tutorial talker.pyrosrun cs431demo objectTrackerdrive_param: (float32) velocity, angledrive_values: (int16) pwm_drive, pwm_angledrive_param is published on the drive_parameters topic (from keyboard to talker)drive_values is published on the drive_pwm topic (from talker to Teensy)drive_values can only take on integer values [0,2^16], but we restrict it further to [6554,13108], which is the range of values we experimentally determine is appropriate to drive the car (i.e. values corresponding to the appropriate min/max velocity and angle)drive_param can take on any values we choose, but if we don't standardize this range, we must be careful to use this message type consistently across different pieces of code and packages.drive_values message is received, the PWM signal's duty cycle will be adjusted according the the message's values. Note the duty cycle will not change until another analogWrite(). Hence, the angle pwm signal remains at this new duty cycle until the next incoming message. However, I modified the code so that an additional timer would reset the velocity pwm signal duty cycle to the "stop" value. Note to self: