Skip to content

Warthog

boxanm edited this page Sep 20, 2024 · 45 revisions

Add any interesting information about the Warthog that could help other students


Network

Warthog networking diagram

Computer

High-level

The high-level computer is a Neousys NUVO-9006DE-POE (Link)(User Guide). To access the bios, press F2 when the computer is booting. Four ethernet ports on the USB ports side support PoE. Per-point PoE can be deactivated in bios.

  • Ethernet port connected to the router: enp1s0f1 IP address: 192.168.0.3 (Lowest port on the COM ports side)
  • Ethernet port connected to the lidar: enp6s0 IP address: 192.168.1.102
  • Ethernet port connected to the radar: enp1s0f0 IP address: 192.168.4.10 (2nd highest port on the COM ports side)
  • Ethernet port connected to the ls128s1: enp5s0 IP address: 192.168.1.103
  • Ethernet port connected to the rear (Basler) camera: enp7s0 IP address: 192.168.7.2 (3rd highest port on the USB ports side) with deactivated PoE. Cable speed (tested) 1 Gb/s.

The computer has hardware support for PTP.

The 2TB SSD model is Innodisk DEM28-02TDD1EWAQF-W56. Write and read speed are 1850 and 2000 MB/s, respectively.

The old computer model was AIV-Q170V1FLS-OBD (Link)(User Guide)

Low-level

LLC

Jetson

  • There is a Jetson Orin AGX inside the Warthog, its IP address is 192.168.0.5.
  • For now, it is used for the ROS1 Bridge and the ZED X stereo camera.
  • The installation was made following these setup scripts.
  • The GPIO pinout can be found here. There a confusion in the I2C bus naming convention. SCK/SCL pin corresponds to I2C5_CLK and the SDI/SDA to I2C5_DAT.

Router

The router's model is RouterBOARD 962UiGS-5HacT2HnT, equipped with 5 1 Gb/s ports. Specifications

Batteries

A wiki page is dedicated to the Warthog batteries.

Cameras

There are two cameras installed on the Warthog.

  • The front one is a ZED X Stereo camera, which is oriented 15 degrees downward and connected via a GMSL2 link to the Jetson Orin AGX.

  • The rear one is a Basler A2a1920-51gcpro with a Theia Technologies MY125M lens, also angled 15 degrees downward and connected through an ethernet cable to the high-level computer. Jumbo packets should be enabled to increase the FPS capabilities.

Note: The old camera, still available, was a Dalsa Genie Nanon C1920 (Link)

Mechanical Details

Warthog's CAD is available in OnShape.

  • Baseline (on tracks) : 1.1652 m
  • Wheel radius (on tracks) : 0.3 m

Warthog's speed (from controller)

To modify the speed sends by the controller, follow these steps:

  • Connect to the low-level computer with SSH and go in this config folder
roscd warthog_teleop_twist_joy/config
  • Enter the file
vim hri.config.yaml
  • To change the linear speed, comment the line with the scale_linear value and create your own scale_linear value. The speed value is calculated like this:
We know from experiements that a value of 0.0015 is approximately 1.5 m/s with the wheels.
We need to apply a speed factor related to type of wheels mount on the Warthog.
For the wheels, the factor is F = 1. For the tracks, the factor is F = 0.6632.
So, if by example you want a speed of v = 0.25 m/s with the tracks, you will do the following:

speed_value = [(v/1.5) x 0.0015] / F
speed_value = [(0.25/1.5) x 0.0015] / 0.6332
speed_value = 0.000395 m/s
  • When the speed is changed, save the file. You now need to kill the node and restart it to apply the changes. There are two methods:
  1. Manually kill and restart the node from the terminal.
  • First, kill the node
rosnode kill /hri_teleop_twist_joy
  • Then, in a screen, restart it
roslaunch warthog_teleop_twist_joy teleop.launch
  1. Just reboot the whole computer by powering off the Warthog and reboot it.

Teach and Repeat

A tutorial on how to perform a basic teach-and-repeat session with the Warthog can be found here.

Motors and Encoders specs

Motor Reference

Param Value
Name ME1117
Company Motenergy
Type BLDC
I_continuous 120 A
N° poles 8 poles / 4 pairs
$R_{p-p}$ $0.013\ \Omega$
$R_{phase}$ $0.0048\ \Omega$
$L_{phase}$(100 Hz) 0.088 mH
$L_{p-p}$ 0.10 mH
$\omega_{max}$ 5000 RPM
V 0-72 VDC
Torque constant 0.13 Nm/A
Armature inertia 52 $kg*cm^{2}$
I_{continuous} 80 A AC
I_{peak} 220 A AC (1 min)
Weight 23 lbs
Peak stall torque 38 Nm

Dynoplot

Dynoplot

Encoders

Encoders

List of topics published on the Warthog

Note : This list of topics may vary depending on when the data was/is taken

Data Topic Frequency (Hz) Notes
Electrical
MCU global data /mcu/status 1
Left drive /left_drive/status/battery_{current,voltage} 1
Right drive /right_drive/status/battery_{current,voltage} 1
Speeds
Control speed /cmd_vel
Encoders speed
Left drive speed /left_drive/status/speed 4
Right drive speed /right_drive/status/speed 4
Odometry
ICP odometry /icp_odom
IMU odometry /imu_and_wheel_odom 100 no twist
GPS odometry Postprocessed data from REACHRS 5
Warthog odometry /warthog_velocity_controller_odom 20 no twist
Inertial
IMU data /MTI_imu/data
Warthog IMU /imu/data 35 noisy imu, upside down
GPS
GPS message /gps/*
graph LR

    commanded([<strong>Commanded<br/>velocities</strong><pre>/vel_cmd</pre>])
    commanded --> cmdvel([<pre>/cmd_vel</pre>])
    commanded --> rcteleopcmd([<pre>/rc_teleop/cmd_vel</pre>])
    commanded --> warthogcmd([<pre>/warthog_velocity_controller/cmd_vel</pre>])

    odometry([<strong>Odometry</strong></br><pre>/odom</pre>])
    odometry --> icpodom([<pre>/icp_odom</pre>])
    odometry --> imuodom([<pre>/imu_and_wheel_odom</pre>])

    imu([<strong>IMU</strong></br><pre>/imu_data</pre>])
    imu --> imudata([<pre>/MTI_imu/data</pre>])

    wheels([<strong>Wheel</br>velocities</strong></br><pre>/wL, /wR, /velL, /velR</pre>])
    wheels --> wL([Angular speed ω - L<pre>/left_drive/status/speed</pre>])
    wheels --> wR([Angular speed ω - R<pre>/right_drive/status/speed</pre>])
    wheels --> vL([Speed - L<pre>/left_drive/velocity</pre>])
    wheels --> vR([Speed - R<pre>/right_drive/velocity</pre>])

    elecmot([<strong>Motor</br>electrical</strong></br><pre>/voltL, /voltR, /IL, /IR</pre>])
    elecmot --> voltL([Voltage - L<pre>/left_drive/status/battery_voltage</pre>])
    elecmot --> voltR([Voltage - R<pre>/right_drive/status/battery_voltage</pre>])
    elecmot --> ampL([Current - L<pre>/left_drive/status/battery_current</pre>])
    elecmot --> ampR([Current - R<pre>/right_drive/status/battery_current</pre>])

Loading

Issues/Repairs

  • The screws attaching the external ethernet ports of the Pelican case have dried out o-rings which could enable water to get in (low risk).

Norlab's Robots

Protocols

Templates

Resources

Grants

Datasets

Mapping

Deep Learning

ROS

Ubuntu

Docker (work in progress)

Tips & tricks

Clone this wiki locally