Warthog - norlab-ulaval/Norlab_wiki GitHub Wiki
Official Warthog documentation from Clearpath
Diagram's draw.io file is located here.
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)
Computer's User Manual
The computer setup was done following Warthog Low‐Level Setup.
Schematic of the connections in the Low-Level (draw.io version):
- 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.
We use zenoh
for inter-computer communication on the Warthog. The full description is available here.
The router's model is RouterBOARD 962UiGS-5HacT2HnT, equipped with 5 1 Gb/s ports. Specifications
A wiki page is dedicated to the Warthog batteries.
Based on empirical testing, the batteries should never go lower than 34 V, otherwise the low-level computer will turn off.
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)
The motor controllers in the Warthog are Sevcon Gen4 size 2 (User Manual) and its wiring looks similar to this (should make a better version):
(From Warthog's User Manual) Pressing down one of the 4 red mushroom Stop buttons around the Warthog will disable power to the motor controller SEVCON devices (Key switch input on PIN 1). This disables the large contactors and also enables the brakes (passive, spring activated when not powered). The status indicator lights around the Warthog will flash red. To reset a Stop button, the top of the button should be twisted until the button pops out again. The GO button on Wireless remote must then pressed. The Warthog is fully enabled once a relay click is heard, and the front lights change to white.
Warthog's CAD is available in OnShape.
- Baseline (on tracks) : 1.1652 m
- Wheel radius (on tracks) : 0.3 m
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 ownscale_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:
- 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
- Just reboot the whole computer by powering off the Warthog and reboot it.
A tutorial on how to perform a basic teach-and-repeat session with the Warthog can be found here.
Param | Value |
---|---|
Name | ME1117 |
Company | Motenergy |
Type | BLDC |
I_continuous | 120 A |
N° poles | 8 poles / 4 pairs |
|
0.088 mH |
0.10 mH | |
5000 RPM | |
V | 0-72 VDC |
Torque constant | 0.13 Nm/A |
Armature inertia | 52 |
I_{continuous} | 80 A AC |
I_{peak} | 220 A AC (1 min) |
Weight | 23 lbs |
Peak stall torque | 38 Nm |
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>])
- 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).