Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Case testbranch #87

Merged
merged 72 commits into from
May 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
e84c294
adding stuff in
RCMast3r Apr 29, 2024
ada45c2
adding in current progress
RCMast3r Apr 30, 2024
bf38061
Cooking on EthernetInterface
walkermburns Apr 30, 2024
60358c7
Merge branch 'feature/param_server' of github.com:hytech-racing/MCU i…
walkermburns Apr 30, 2024
21df00a
fixing merges
walkermburns Apr 30, 2024
43c11a4
cooking on parameter server
RCMast3r Apr 30, 2024
9d2b83b
working on getting protobuf messages handled
RCMast3r Apr 30, 2024
1b1d620
pb ethernet receiving docs
RCMast3r Apr 30, 2024
4587289
Initial UDPSocket template
walkermburns Apr 30, 2024
e21baf1
Merge branch 'feature/param_server' of github.com:hytech-racing/MCU i…
walkermburns Apr 30, 2024
d7a191a
removing BS
RCMast3r Apr 30, 2024
2e8dce9
uh
RCMast3r Apr 30, 2024
b20435b
Updating ethernet interface
walkermburns Apr 30, 2024
4a289fc
Merge branch 'feature/param_server' of github.com:hytech-racing/MCU i…
walkermburns Apr 30, 2024
62a1d97
fixing ethernetinterface compile errors
walkermburns Apr 30, 2024
11f49d6
Rewriting send() function in EthernetInterface
walkermburns Apr 30, 2024
3b39475
removed buffer size from EthernetInterface constructor
walkermburns Apr 30, 2024
cb7c7d8
adding stuff in
RCMast3r Apr 30, 2024
3ea8ab2
Moving Ethernet UDP socket into main and Using NativeEthernet instead
walkermburns May 1, 2024
cd4dbd3
she lives!
RCMast3r May 1, 2024
c9da1cf
actually working in the test pog
RCMast3r May 2, 2024
14a3ea8
cooking
RCMast3r May 2, 2024
8ac101b
removing fake data
RCMast3r May 2, 2024
83fb0f2
CASE testing flahsed to car 5/4/24, works on jacks, havent tested on …
Luke-kC May 5, 2024
14c4a28
fix test_CASE.h
Luke-kC May 5, 2024
078fb50
pushing up
RCMast3r May 5, 2024
a373714
updating readme with a proposed shift in generation of stuff
RCMast3r May 5, 2024
ebe6c6d
Updated load cell scaling
walkermburns May 5, 2024
78067d9
Merge branch 'CASE_testbranch'
Luke-kC May 5, 2024
ee824f0
Update main.cpp
Luke-kC May 5, 2024
26961d3
Update main.cpp
Luke-kC May 5, 2024
0dc9ea8
integrating the parameter interface
RCMast3r May 6, 2024
c715337
jankily fixing tests
RCMast3r May 6, 2024
9deaed5
working my magic
EricGalluzzi May 7, 2024
772950f
compiles!
EricGalluzzi May 7, 2024
400094b
adjusted can release
EricGalluzzi May 8, 2024
21da00a
updated platform.ini
EricGalluzzi May 8, 2024
7d2367a
Merge branch 'feature/teensy_analog_read' into CASE_testbranch
Luke-kC May 8, 2024
6447dee
Flashed to car 5/8/24
Luke-kC May 8, 2024
ef00104
push for benajmin
Luke-kC May 8, 2024
8b099f3
uh
RCMast3r May 8, 2024
a7913ab
last flashed 5/9/24 on car
Luke-kC May 9, 2024
32c0265
Added TCS saturation limit for front and rear axles
Luke-kC May 9, 2024
f2c263a
Add CAN msg for TCS saturation limits
Luke-kC May 9, 2024
a5be8d7
Added steer dependent torque delta constraint to TCS
Luke-kC May 10, 2024
30b29e2
lib branch merged, back to main
CL16gtgh May 11, 2024
408193b
fixing repo library dep clone directives
RCMast3r May 11, 2024
1416d3e
adding private member functions to doxygen docs
RCMast3r May 11, 2024
7c1fcdc
debug notes but might be a good starting point to add back basic debu…
CL16gtgh May 15, 2024
375f018
Compiles and passed steering test
CL16gtgh May 15, 2024
0afe0b5
Reset calibrated steering offset and add serial monitor speed in .ini…
CL16gtgh May 15, 2024
e08f4d1
Temp changes
CL16gtgh May 16, 2024
68740e3
CASE updated with normal load based TCS gain scheduling
Luke-kC May 16, 2024
04ad455
Wheel spun
CL16gtgh May 18, 2024
207b299
Decoupled and NL scheduled slip targets for TCS
Luke-kC May 18, 2024
23be5cd
Merge branch 'master' of https://github.com/hytech-racing/MCU
shaynoorani May 21, 2024
5262fe8
Added Derate Factor code to AMS interface
shaynoorani May 21, 2024
5d9761b
added derate factor to case and loadcell
shaynoorani May 21, 2024
760bd8f
Revert "added derate factor to case and loadcell"
CL16gtgh May 21, 2024
40dd816
Revert "Added Derate Factor code to AMS interface"
CL16gtgh May 21, 2024
2b56423
not working when steered to right
CL16gtgh May 22, 2024
bb03837
more detailed steering report
CL16gtgh May 22, 2024
df74595
Merge branch 'master' into CASE_testbranch
CL16gtgh May 22, 2024
dfa4f7a
Update main.cpp
CL16gtgh May 22, 2024
95c4618
bad
CL16gtgh May 22, 2024
2a253cd
Revert "bad"
CL16gtgh May 22, 2024
50de74c
Revert "Update main.cpp"
CL16gtgh May 22, 2024
e062970
Revert "Merge branch 'master' into CASE_testbranch"
CL16gtgh May 22, 2024
3d1aab3
Reapply "Merge branch 'master' into CASE_testbranch"
CL16gtgh May 22, 2024
e8cbee7
Reapply "Update main.cpp"
CL16gtgh May 22, 2024
f149cdc
Reapply "bad"
CL16gtgh May 22, 2024
07faefa
Merge branch 'master' into CASE_testbranch
CL16gtgh May 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -524,7 +524,7 @@ EXTRACT_ALL = YES
# be included in the documentation.
# The default value is: NO.

EXTRACT_PRIVATE = NO
EXTRACT_PRIVATE = YES

# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
# methods of a class will be included in the documentation.
Expand Down
17 changes: 17 additions & 0 deletions ETHERNET.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
```mermaid
flowchart TD
ethernet[ethernet port] --> qnethernet[encoded ethernet data packets]
qnethernet --> port[protobuf union msgs port]
port --> ht_eth[HT ethernet interface]
ht_eth --> union_dec[union msgs splitter]
union_dec --> int1[interface 1 message buffer]
union_dec --> int2[interface 2 message buffer]
union_dec --> intN[interface N message buffer]
```

## explanation

### receiving
Packets stream over ethernet and hit the ethernet port itself. The ethernet library has an internal queue for the UDP packets received. We know that a specific port id (say 4521) all messages will be a protobuf union msg that can contain only one of the types of messages that we will be sending (config control, TCU status, CASE msgs, etc.) and the union decoder method in the ethernet interface itself will handle this. The ethernet shall be able to receive multiple messages in one loop (of a limited number) and in between iterations of the loop the ethernet driver will hold the un-parsed messages in it's queue.

The union message decoder will handle parsing of all of the messages in the queue and will be able to determine what message the union pb packet holds. If all messages of a specific type are needed, The message decoder will then add the decoded particular protobuf message struct to the message queue in the respective interface that way if multiple messages of the same type appear in one loop iteration they can all be processed by the underlying system / interface. If the interface just needs the latest version of a message each loop, the decoder will just update the message instance in its respective interface.
60 changes: 60 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -296,3 +296,63 @@ new MCU code:
- interface level:
- hytech_can interface
- spi interfaces: SPI adcs for load cells, steering input, glv, etc.


```mermaid
flowchart LR
subgraph user_inputs[user defined inputs]
simulink
o_params
CAN_data
other_protos
end
subgraph user_interact[user interfaces]
fxglv_live
mcap
database
param_server

end
subgraph user_code_interact[user embedded code interfaces]
MCU
end
subgraph CASE_lib_repo[CASE lib repo gen]
CASE_lib
params
outputs
end
subgraph HT_params[HT_params repo gen]
param_defaults
nanopb
end
simulink[CASE simulink model] --> CASE_lib
simulink --> params[CASE defined params.json]
simulink --> outputs[CASE_outputs.proto]
params --> param_protos[params.proto]
params --> param_defaults[config defaults header]
param_defaults --> MCU
o_params[other params.json] --> param_protos
outputs --> h_proto
param_protos --> param_server[parameter server]

h_proto --> data_acq
data_acq --> fxglv_live[live foxglove]
data_acq --> mcap[output mcap files]
CAN_data[CAN message definitions] --> can_protos[CAN messages in hytech.proto]
can_protos --> h_proto
mcap --> database[mcap metadata defined database]
CASE_lib --> MCU
CAN_data --> dbc_h[dbc to C code gen hytech.h for CAN]
param_protos --> h_proto[hytech.proto]
dbc_h --> MCU
h_proto --> nanopb[protobuf msg defs ht_eth.pb.h]
nanopb --> MCU
other_protos[other msgs.proto]
other_protos --> h_proto






```
21 changes: 21 additions & 0 deletions include/InterfaceParams.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#ifndef INTERFACEPARAMS
#define INTERFACEPARAMS
#include "NativeEthernet.h"

namespace EthParams
{
uint8_t default_MCU_MAC_address[6] =
{0x04, 0xe9, 0xe5, 0x10, 0x1f, 0x22};

const IPAddress default_MCU_ip(192, 168, 1, 30);
const IPAddress default_TCU_ip(192, 168, 1, 68);

const uint16_t default_protobuf_send_port = 2001;
const uint16_t default_protobuf_recv_port = 2000;

const IPAddress default_netmask(255, 255, 255, 0);
const IPAddress default_gateway(192, 168, 0, 1);

const uint16_t default_buffer_size = 512;
}
#endif
14 changes: 13 additions & 1 deletion include/MCU_rev15_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
#define __MCU15_H__

#include "PedalsSystem.h"
#ifndef TESTING_SYSTEMS
#include "InterfaceParams.h"
#endif


// pindefs
const int ADC1_CS = 34;
Expand All @@ -26,6 +30,14 @@ const int MCU15_FR_POTS_CHANNEL = 1;
const int MCU15_FL_LOADCELL_CHANNEL = 2;
const int MCU15_FR_LOADCELL_CHANNEL = 2;

//MCU teensy analog channels
const int MCU15_TEENSY_ADC_CHANNELS = 2;
const int MCU15_THERM_FL = 38;
const int MCU15_THERM_FR = 41;
const int MCU15_THERM_FL_CHANNEL = 0;
const int MCU15_THERM_FR_CHANNEL = 1;

const int DEFAULT_ANALOG_PINS[MCU15_TEENSY_ADC_CHANNELS] = {MCU15_THERM_FL, MCU15_THERM_FR};
// Time intervals
const unsigned long SETUP_PRESENT_ACTION_INTERVAL = 1000;
const unsigned long BUZZER_ON_INTERVAL = 2000;
Expand Down Expand Up @@ -86,7 +98,7 @@ const float LOADCELL_RR_SCALE = 0.06;
const float LOADCELL_RR_OFFSET = 23.761 / LOADCELL_RR_SCALE;

// Steering parameters
const float PRIMARY_STEERING_SENSE_OFFSET = -21.18; // units are degrees
const float PRIMARY_STEERING_SENSE_OFFSET = 0.0; // units are degrees
const int SECONDARY_STEERING_SENSE_LEFTMOST_BOUND = 812;
const int SECONDARY_STEERING_SENSE_RIGHTMOST_BOUND = 3179;
const int SECONDARY_STEERING_SENSE_CENTER = 1970;
Expand Down
46 changes: 46 additions & 0 deletions lib/interfaces/include/ParameterInterface.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#ifndef PARAMETERINTERFACE
#define PARAMETERINTERFACE
#include "MCUStateMachine.h"
#include "ht_eth.pb.h"
#include "default_config.h"

// yes, i know this is a singleton. im prototyping rn.
// TODO review if I can just give this a pointer to an ethernet port
class ParameterInterface
{
public:
ParameterInterface(): current_car_state_(CAR_STATE::STARTUP), params_need_sending_(false), config_(DEFAULT_CONFIG) {}

void update_car_state(const CAR_STATE& state)
{
current_car_state_ = state;
}
void update_config(const config &config)
{
if(static_cast<int>(current_car_state_) < 5 ){
config_ = config;
}

}
config get_config()
{
return config_;
}
void set_params_need_sending()
{
params_need_sending_ = true;
}
void reset_params_need_sending()
{
params_need_sending_ = false;
}
bool params_need_sending() { return params_need_sending_; }

private:
CAR_STATE current_car_state_;
bool params_need_sending_ = false;
config config_;

};

#endif
78 changes: 78 additions & 0 deletions lib/interfaces/include/ProtobufMsgInterface.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#ifndef PROTOBUFMSGINTERFACE
#define PROTOBUFMSGINTERFACE

#include "ht_eth.pb.h"
#include "pb_encode.h"
#include "pb_decode.h"
#include "pb_common.h"
#include "ParameterInterface.h"
#include "circular_buffer.h"
#include "NativeEthernet.h"
#include "MCU_rev15_defs.h"


struct ETHInterfaces
{
ParameterInterface* param_interface;
};

using recv_function_t = void (*)(const uint8_t* buffer, size_t packet_size, ETHInterfaces& interfaces);

// this should be usable with arbitrary functions idk something
void handle_ethernet_socket_receive(EthernetUDP* socket, recv_function_t recv_function, ETHInterfaces& interfaces)
{
int packet_size = socket->parsePacket();
if(packet_size > 0)
{
Serial.println("packet size");
Serial.println(packet_size);
uint8_t buffer[EthParams::default_buffer_size];
size_t read_bytes = socket->read(buffer, sizeof(buffer));
socket->read(buffer, UDP_TX_PACKET_MAX_SIZE);
recv_function(buffer, read_bytes, interfaces);
}
}

template <typename pb_struct>
bool handle_ethernet_socket_send_pb(EthernetUDP* socket, const pb_struct& msg, const pb_msgdesc_t* msg_desc)
{
socket->beginPacket(EthParams::default_TCU_ip, EthParams::default_protobuf_send_port);

uint8_t buffer[EthParams::default_buffer_size];
pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
if (!pb_encode(&stream, msg_desc, &msg)) {
// You can handle error more explicitly by looking at stream.errmsg
return false;
}
auto message_length = stream.bytes_written;
socket->write(buffer, message_length);
socket->endPacket();
return true;
}

//
void recv_pb_stream_union_msg(const uint8_t *buffer, size_t packet_size, ETHInterfaces& interfaces)
{
pb_istream_t stream = pb_istream_from_buffer(buffer, packet_size);
HT_ETH_Union msg = HT_ETH_Union_init_zero;
if (pb_decode(&stream, HT_ETH_Union_fields, &msg))
{
Serial.println("decoded!");

switch (msg.which_type_union)
{
case HT_ETH_Union_config__tag:
interfaces.param_interface->update_config(msg.type_union.config_);
break;
case HT_ETH_Union_get_config__tag:
interfaces.param_interface->set_params_need_sending();
break;
default:
break;
}
}
}



#endif
7 changes: 7 additions & 0 deletions lib/interfaces/include/TelemetryInterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ struct TelemetryInterfaceReadChannels
int current_channel;
int current_ref_channel;
int glv_sense_channel;
int therm_fl_channel;
int therm_fr_channel;
};

class TelemetryInterface
Expand All @@ -54,6 +56,10 @@ class TelemetryInterface

/* Update CAN messages (main loop) */
// Interfaces
void update_front_thermistors_CAN_msg(
const AnalogConversion_s &therm_fl,
const AnalogConversion_s &therm_fr
);
void update_pedal_readings_CAN_msg(
float accel_percent,
float brake_percent,
Expand Down Expand Up @@ -125,6 +131,7 @@ class TelemetryInterface
const AnalogConversionPacket_s<8> &adc1,
const AnalogConversionPacket_s<4> &adc2,
const AnalogConversionPacket_s<4> &adc3,
const AnalogConversionPacket_s<2> &mcu_adc,
const SteeringEncoderConversion_s &encoder,
InvInt_t *fl,
InvInt_t *fr,
Expand Down
14 changes: 13 additions & 1 deletion lib/interfaces/src/TelemetryInterface.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include "TelemetryInterface.h"

/* Update CAN messages */
// Main loop
// MCP3208 returns structure
Expand Down Expand Up @@ -58,6 +57,16 @@ void TelemetryInterface::update_analog_readings_CAN_msg(const SteeringEncoderCon

enqueue_CAN<MCU_analog_readings>(mcu_analog_readings_, ID_MCU_ANALOG_READINGS);
}
void TelemetryInterface::update_front_thermistors_CAN_msg(const AnalogConversion_s &therm_fl,
const AnalogConversion_s &therm_fr) {

FRONT_THERMISTORS_t front_thermistors_;
front_thermistors_.thermistor_motor_fl = therm_fl.raw;
front_thermistors_.thermistor_motor_fr = therm_fr.raw;

enqueue_new_CAN<FRONT_THERMISTORS_t>(&front_thermistors_, &Pack_FRONT_THERMISTORS_hytech);
}


void TelemetryInterface::update_drivetrain_rpms_CAN_msg(InvInt_t* fl, InvInt_t* fr, InvInt_t* rl, InvInt_t* rr)
{
Expand Down Expand Up @@ -233,6 +242,7 @@ void TelemetryInterface::enqeue_controller_CAN_msg(const PIDTVTorqueControllerDa
void TelemetryInterface::tick(const AnalogConversionPacket_s<8> &adc1,
const AnalogConversionPacket_s<4> &adc2,
const AnalogConversionPacket_s<4> &adc3,
const AnalogConversionPacket_s<2> &mcu_adc,
const SteeringEncoderConversion_s &encoder,
InvInt_t* fl,
InvInt_t* fr,
Expand Down Expand Up @@ -279,5 +289,7 @@ void TelemetryInterface::tick(const AnalogConversionPacket_s<8> &adc1,
adc1.conversions[channels_.current_ref_channel]);

enqeue_controller_CAN_msg(data);
update_front_thermistors_CAN_msg(mcu_adc.conversions[channels_.therm_fl_channel],
mcu_adc.conversions[channels_.therm_fr_channel]);

}
52 changes: 0 additions & 52 deletions lib/library.json

This file was deleted.

Loading
Loading