This is a central repository for some software modules developed for M12 machine at Tampere University Innovative Hydraulics and Automation unit (IHA)
This repo also serves as the updatable storage for M12 documentation. It will contain most of the machines components datasheets and schematics on how they are connected.
M12 is a heavily customized wheel loader at Tampere University. It is a research platform for mobile hydraulics and autonomous machine research, equipped with multiple fluid power and exteroceptive sensors.
You can see more of the university research equipment here.
M12 has one iEi tank-720 installed with preempt_rt patched Linux as the operating system. The tank-720 also has 2 PEAK PCAN-miniPCIe Dual Channel can bus cards, and one motherboard native CAN bus port. It is connected to one CAN-bus network and one Ethernet local area network. The M12 CAN bus network is connected to two ports, one PEAK can card channel and the motherboard native CAN channel. This is done to make it easier on the software level to transmit and receive "simultaneously".
The PC also has USB cable connector outside and VGA port for direct access.
For low-level hydraulic machine control, there are two Bosch Rexroth BODAS-controllers installed: RC36 and RC28. Their detailed function will not be explained here. They are connected to the 24V battery on M12, and they need to be switched on in order to be able to move the machine.
The machine also has rugged WiFi access point installed and an onboard ethernet switch with one free CAT-cable connected to it for direct access to the LAN.
M12 has many sensors installed, and only the ones related to localization and kinematics are listed here.
The GNSS receiver has two antennas, which means that it can give out orientation information even if it is not moving. It has been configured to send out UDP-based GSOF messages, GSOF is a Trimble specific protocol. It also uses differential GPS signal for accuracy.
You can find more information on the BD982 here.
You can find more information on GSOF here.
This IMU is attached to the M12 CAN bus and has been configured to send out measurement information periodically.
More detailed information on the IMU CAN messages can be found from this spreadsheet document, COB-ID (gyro) 0x1B2 (hexadecimal) / 434 (decimal). COB-ID (acceleration) 0x2B2 (hexadecimal) / 690 (decimal).
This resolver measures the angular position and the angular velocity of the central axis. It is connected to the M12 CAN bus and has been configured to send out measurement information periodically.
More detailed information on the resolver CAN messages can be found from this spreadsheet document, COB-ID 0x19F (hexadecimal) / 415 (decimal).
This speed sensor measures the hydrostatic drive motor speed. The odometry is estimated based on combining the information from the resolver and this motor speed. It is connected to the BODAS RC36 control module, which in turn sends out this sensor information periodically through CAN bus.
More detailed information on the HSD speed CAN message can be found from this spreadsheet document, COB-ID 0x485 (hexadecimal) / 1157 (decimal).
Micro-Epsilon WDS-750-P60-CR-P Wire sensor + Gefran cylindrical displacement potentiometer: tilt and/or lift
These sensors are attached to the wheel loaders tilt and lift, the main work hydraulic tools. They are connected to the BODAS RC36 control module, which in turn sends out these sensors information periodically through CAN bus.
More detailed information on the tilt and lift position CAN message can be found from this spreadsheet document, COB-ID 0x186 (hexadecimal) / 390 (decimal).
Much of the software in M12 utilizes Data Distribution Service, with the particular implementation being RTI DDS Connext. It is used in two ways: C and C++ project level and Simulink model level, but Simulink model is generated also into code for real-time execution.
Most of these steps are already configured and automated in the M12 software repositories, but they are still important to know.
-
Define interfacing with .idl files.
-
Generate C/C++ code (headers and implementation of the .idl types) from the .idl files with RTI Code generator.
-
Compile generated C/C++ code to object files. The RTI code generator should be able to create makefiles that can manage this.
-
Add generated header files and the object code to your C/C++ project configuration. Currently with M12 we use CMake.
-
Configure your C/C++ project to link the final executable to necessary DDS libraries (static/dynamic C/C++).
There are 2 executables for accessing sensor information. One is for CAN bus based sensors and one is for the GNSS.
CAN to RTI Connext DDS sensor interface git repository
GNSS RTI Connext DDS interface git repository
The localization module is implemented as a Simulink model, which is derived from earlier versions made for Simulink Real-Time. This model is used to generate code with this Simulink code generation target for preempt_rt Linux. The generated code is then compiled and statically linked with RTI Connext C libraries. The resulting executable can then be copied into the tank-720 onboard PC.
The teleoperation consists of two parts, one that takes in joystick commands and sends it to DDS, and the second that receives the commands via DDS and sends out the commands to CAN bus.
The git repository for the part that writes the received DDS commands to CAN bus
-
Acquire RTI Connext DDS C/C++ libraries for ARMv8.
-
Set up cross compilation for Jetson in the forked example.
-
Edit the RTI example sender part to use nvarguscamerasrc and Nvidia accelerator instead.
Most likely the gstreamer caps can bring some difficulty, otherwise it should be straightforward small change. Notice that the usecase example uses VP8 encoding but the Nvidia support for encoder type depends on platform. Only Jetson TX2/TX2i and Jetson Nano support VP8 encoding.