Warthog - norlab-ulaval/Norlab_wiki GitHub Wiki

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

Official Warthog documentation from Clearpath


Network

Diagram's draw.io file is located here.

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

Computer's User Manual

LLC

The computer setup was done following Warthog Low‐Level Setup.

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).
⚠️ **GitHub.com Fallback** ⚠️