From c21a9a5b3e0d1ab4c26997c54b3fe21e265148b5 Mon Sep 17 00:00:00 2001 From: amotaouakkil123 Date: Sat, 4 May 2024 16:46:23 -0400 Subject: [PATCH 1/3] Adding the BMS package to the branch --- bms_feedback/.DS_Store | Bin 0 -> 6148 bytes bms_feedback/CMakeLists.txt | 41 ++++++++++++ bms_feedback/launch/bms_feedback.launch | 9 +++ bms_feedback/msg/BMSData.msg | 8 +++ bms_feedback/package.xml | 30 +++++++++ bms_feedback/setup.py | 12 ++++ bms_feedback/src/bms_node.py | 80 ++++++++++++++++++++++++ 7 files changed, 180 insertions(+) create mode 100644 bms_feedback/.DS_Store create mode 100644 bms_feedback/CMakeLists.txt create mode 100644 bms_feedback/launch/bms_feedback.launch create mode 100644 bms_feedback/msg/BMSData.msg create mode 100644 bms_feedback/package.xml create mode 100644 bms_feedback/setup.py create mode 100644 bms_feedback/src/bms_node.py diff --git a/bms_feedback/.DS_Store b/bms_feedback/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e3488fadf3e40ad99292fb0416a117b602610e29 GIT binary patch literal 6148 zcmeHK%We}f6unLYby5LYAhjDLZ`egqLQ$kHDh+A7s8l4RL9hVS&LpFB#AF<0CWJN( znmu1oeuD4d3-}gRaQsL`re%u+@|CX7wSBG~A1AR*M65p>c8Quq#Ni4nbriRl>Q{cl zDz;?<$n+Qy9aBsh<#1>Jf&yyq?$bU!r-0tm@B7!rE`Fr^D3OCOks)~MOY#if{;3TS zQI*En>rsjIwZz(_3C15_hJZ$xrHzrtl&oj5N2M%|kt2MH8M52(^Ai7aiC+bON`n&X z$L*|eo=xn!zJ-${&hk#@JF8S{ckXU*-r$XUjd%W;ocno@&$50neWPkGg8VGB@k=R_ z>o^Es#nJqv`EXyRc@U@3R42#72$Z+4<8&zJeK|{qnI6YC9h}#B{iM0QSUl-1Y?0=UFTansj3J@xkoO%)U^Vo*m;0O(*6Vbfr_kDX^|U)l{46 z{6GBj`+q&j)tmxOf&WSYRy*(y`dE@ZTW>5*owWjf3Rk9hg~96-1o|ijR~^OMaBXN8 XDgb&G3xjBZxr>07!4*z{zpB75s#T9q literal 0 HcmV?d00001 diff --git a/bms_feedback/CMakeLists.txt b/bms_feedback/CMakeLists.txt new file mode 100644 index 00000000..3879cf19 --- /dev/null +++ b/bms_feedback/CMakeLists.txt @@ -0,0 +1,41 @@ +cmake_minimum_required(VERSION 3.0.2) +project(bms_feedback) + + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + roscpp + rospy + std_msgs + message_generation +) + +catkin_python_setup() + +add_message_files( + FILES + BMSData.msg +) + +generate_messages( + DEPENDENCIES + std_msgs +) + + + +catkin_package( + CATKIN_DEPENDS + roscpp + rospy + std_msgs + LIBRARIES bms_feedback + CATKIN_DEPENDS message_runtime +) + +catkin_install_python(PROGRAMS + src/bms_node.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) diff --git a/bms_feedback/launch/bms_feedback.launch b/bms_feedback/launch/bms_feedback.launch new file mode 100644 index 00000000..94f91c8a --- /dev/null +++ b/bms_feedback/launch/bms_feedback.launch @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/bms_feedback/msg/BMSData.msg b/bms_feedback/msg/BMSData.msg new file mode 100644 index 00000000..df10a5de --- /dev/null +++ b/bms_feedback/msg/BMSData.msg @@ -0,0 +1,8 @@ +float32 total_voltage +float32 current +float32 soc_percent +float32[] cell_voltages +int8 charging_mosfet +int8 discharging_mosfet +float32 capacity_ah +string[] error_strings \ No newline at end of file diff --git a/bms_feedback/package.xml b/bms_feedback/package.xml new file mode 100644 index 00000000..24dfe05e --- /dev/null +++ b/bms_feedback/package.xml @@ -0,0 +1,30 @@ + + + bms_feedback + 0.0.0 + The science_module package + + Vincent Boucher + + MIT + + Vincent Boucher + + message_generation + message_generation + message_runtime + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + + + + + diff --git a/bms_feedback/setup.py b/bms_feedback/setup.py new file mode 100644 index 00000000..52747cee --- /dev/null +++ b/bms_feedback/setup.py @@ -0,0 +1,12 @@ + ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD + +from distutils.core import setup +from catkin_pkg.python_setup import generate_distutils_setup + +# fetch values from package.xml +setup_args = generate_distutils_setup( + packages=['bms_feedback'], + package_dir={'': 'src'}, +) + +setup(**setup_args) diff --git a/bms_feedback/src/bms_node.py b/bms_feedback/src/bms_node.py new file mode 100644 index 00000000..5b109bd2 --- /dev/null +++ b/bms_feedback/src/bms_node.py @@ -0,0 +1,80 @@ +import os, sys +currentdir = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(currentdir) +import rospy +from bms_feedback.msg import BMSData +import dalybms + +class BMSNode(): + + def __init__(self, device = "/dev/ttyACM0") -> None: + + + rospy.init_node("bms_feedback", anonymous=False) + + self.bms_data_publisher = rospy.Publisher("bmsData", BMSData, queue_size=10) + + self.device = device + self.bms_obj = dalybms.DalyBMS() + self.bms_obj.connect(self.device) + self.bmsData = BMSData() + + self.bms_errors = [] + self.connected = self.bms_obj.serial.is_open + + self.rate = rospy.Rate(1) + + self.run() + + def disconnect(self) -> None: + self.bms_obj.disconnect() + self.connected = False + + def connect(self) -> bool: + self.bms_obj.connect(self.device) + self.connected = self.bms_obj.serial.is_open + return self.connected + + def isConnected(self) -> bool: + return self.connected + + def run(self) -> None: + while not rospy.is_shutdown(): + + self.getBMSData() + + self.bms_data_publisher.publish(self.bmsData) + + self.rate.sleep() + + + def getBMSData(self): + cell_voltages = self.bms_obj.get_cell_voltages() + soc_data = self.bms_obj.get_soc() + mosfet_status = self.bms_obj.get_mosfet_status() + self.bmsData.error_strings = self.bms_obj.get_errors() + + if cell_voltages: + self.bmsData.cell_voltages[0] = cell_voltages["1"] + self.bmsData.cell_voltages[1] = cell_voltages["2"] + self.bmsData.cell_voltages[2] = cell_voltages["3"] + self.bmsData.cell_voltages[3] = cell_voltages["4"] + self.bmsData.cell_voltages[4] = cell_voltages["5"] + self.bmsData.cell_voltages[5] = cell_voltages["6"] + self.bmsData.cell_voltages[6] = cell_voltages["7"] + self.bmsData.cell_voltages[7] = cell_voltages["8"] + + if soc_data: + self.bmsData.discharging_mosfet = int(mosfet_status["discharging_mosfet"]) + self.bmsData.charging_mosfet = int(mosfet_status["charging_mosfet"]) + self.bmsData.capacity_ah = mosfet_status["capacity_ah"] + + if mosfet_status: + self.bmsData.total_voltage = soc_data["total_voltage"] + self.bmsData.current = soc_data["current"] + self.bmsData.soc_percent = soc_data["soc_percent"] + + +if __name__ == "__main__": + driver = BMSNode() + rospy.spin() \ No newline at end of file From 5af5f4c19384f894c09aa78b14f8dfb78ed549cb Mon Sep 17 00:00:00 2001 From: amotaouakkil123 Date: Sat, 4 May 2024 18:05:45 -0400 Subject: [PATCH 2/3] Created the power UI component, need to test bms --- .../power-page/power-page.component.html | 10 ++-- .../power/power-page/power-page.component.ts | 47 +++++++------------ .../drive-page/drive-page.component.html | 1 + bms_feedback/src/bms_node.py | 3 +- 4 files changed, 27 insertions(+), 34 deletions(-) diff --git a/angular_ui_app/src/app/components/power/power-page/power-page.component.html b/angular_ui_app/src/app/components/power/power-page/power-page.component.html index 80522f31..bf2ab887 100644 --- a/angular_ui_app/src/app/components/power/power-page/power-page.component.html +++ b/angular_ui_app/src/app/components/power/power-page/power-page.component.html @@ -1,3 +1,7 @@ -

power-page works!

-
{{Results}}
- \ No newline at end of file +

Power Component

+ +

Cell Voltage: {{cellVoltage}}

+

Total Voltage: {{totalVoltage}}

+

Charging Mosfet: {{chargingMosfet}}

+

Discharging Mosfet: {{dischargingMosfet}}

+

Error Logs: {{cellVoltage}}

diff --git a/angular_ui_app/src/app/components/power/power-page/power-page.component.ts b/angular_ui_app/src/app/components/power/power-page/power-page.component.ts index e51a9a18..5d9a9d8e 100644 --- a/angular_ui_app/src/app/components/power/power-page/power-page.component.ts +++ b/angular_ui_app/src/app/components/power/power-page/power-page.component.ts @@ -11,45 +11,32 @@ import { RosService } from 'src/app/ros.service'; export class PowerPageComponent { rosBridgeStatus: string; ros: ROSLIB.Ros; - String: ROSLIB.Topic; //payload type - Pub: ROSLIB.Topic; //payload type - - Results: string; - + bmsData: ROSLIB.Topic; //payload type + errorLogs: string[]; + cellVoltage: number[]; + totalVoltage: number; + chargingMosfet: number; + dischargingMosfet: number; + constructor(private rosService: RosService) { this.ros = this.rosService.getRos(); } ngOnInit() { - this.String = new ROSLIB.Topic({ - ros : this.ros, - name : '/chatter', - messageType : 'std_msgs/String' + this.bmsData= new ROSLIB.Topic({ + ros: this.ros, + name: '/bmsData', + messageType: 'bms_feedback/BMSData' }); - this.Pub = new ROSLIB.Topic({ - ros : this.ros, - name : 'lol', - messageType : 'std_msgs/String' + this.bmsData.subscribe((message:any) => { + console.log(message.cell_voltages); + this.cellVoltage = message.cell_voltages; + this.totalVoltage = message.total_voltage; + this.chargingMosfet = message.charging_mosfet; + this.dischargingMosfet = message.discharging_mosfet; }); - - this.listen() } - - publish() { - this.Pub.publish({data:"YYOYOYY"+this.Results}); - } - - listen() { - this.String.subscribe((message:any) => { - // console.log('Received message on ' +this.listener.name + ': ' + message.y + message.x); - this.Results = ('Received message on ' + this.String.name +"and the message.data"+ message.data); - this.publish(); - }); - } - - - } diff --git a/angular_ui_app/src/app/pages/drive-page/drive-page.component.html b/angular_ui_app/src/app/pages/drive-page/drive-page.component.html index 04c7b811..ec857ea2 100644 --- a/angular_ui_app/src/app/pages/drive-page/drive-page.component.html +++ b/angular_ui_app/src/app/pages/drive-page/drive-page.component.html @@ -6,4 +6,5 @@ + \ No newline at end of file diff --git a/bms_feedback/src/bms_node.py b/bms_feedback/src/bms_node.py index 5b109bd2..d5f2aa37 100644 --- a/bms_feedback/src/bms_node.py +++ b/bms_feedback/src/bms_node.py @@ -18,6 +18,7 @@ def __init__(self, device = "/dev/ttyACM0") -> None: self.bms_obj = dalybms.DalyBMS() self.bms_obj.connect(self.device) self.bmsData = BMSData() + self.bmsData.cell_voltages = [0 for x in range(1000)] self.bms_errors = [] self.connected = self.bms_obj.serial.is_open @@ -64,6 +65,7 @@ def getBMSData(self): self.bmsData.cell_voltages[6] = cell_voltages["7"] self.bmsData.cell_voltages[7] = cell_voltages["8"] + if soc_data: self.bmsData.discharging_mosfet = int(mosfet_status["discharging_mosfet"]) self.bmsData.charging_mosfet = int(mosfet_status["charging_mosfet"]) @@ -73,7 +75,6 @@ def getBMSData(self): self.bmsData.total_voltage = soc_data["total_voltage"] self.bmsData.current = soc_data["current"] self.bmsData.soc_percent = soc_data["soc_percent"] - if __name__ == "__main__": driver = BMSNode() From 59619cd91db808f6af43b60839bd61dc46601eb4 Mon Sep 17 00:00:00 2001 From: amotaouakkil123 Date: Mon, 6 May 2024 20:26:12 -0400 Subject: [PATCH 3/3] Power error logs and divs for later scss mods --- .../power-page/power-page.component.html | 26 ++++++++++++++----- .../power/power-page/power-page.component.ts | 6 ++--- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/angular_ui_app/src/app/components/power/power-page/power-page.component.html b/angular_ui_app/src/app/components/power/power-page/power-page.component.html index bf2ab887..e21d744d 100644 --- a/angular_ui_app/src/app/components/power/power-page/power-page.component.html +++ b/angular_ui_app/src/app/components/power/power-page/power-page.component.html @@ -1,7 +1,19 @@ -

Power Component

- -

Cell Voltage: {{cellVoltage}}

-

Total Voltage: {{totalVoltage}}

-

Charging Mosfet: {{chargingMosfet}}

-

Discharging Mosfet: {{dischargingMosfet}}

-

Error Logs: {{cellVoltage}}

+
+

Power Component

+ +
+

Cell Voltage: {{cellVoltage}}

+
+
+

Total Voltage: {{totalVoltage}}

+
+
+

Charging Mosfet: {{chargingMosfet}}

+
+
+

Discharging Mosfet: {{dischargingMosfet}}

+
+
+

Error Logs: {errorLogs}

+
+
\ No newline at end of file diff --git a/angular_ui_app/src/app/components/power/power-page/power-page.component.ts b/angular_ui_app/src/app/components/power/power-page/power-page.component.ts index 5d9a9d8e..0fa3c730 100644 --- a/angular_ui_app/src/app/components/power/power-page/power-page.component.ts +++ b/angular_ui_app/src/app/components/power/power-page/power-page.component.ts @@ -35,8 +35,8 @@ export class PowerPageComponent { this.cellVoltage = message.cell_voltages; this.totalVoltage = message.total_voltage; this.chargingMosfet = message.charging_mosfet; - this.dischargingMosfet = message.discharging_mosfet; + this.dischargingMosfet = message.discharging_logs; + this.errorLogs = message.error_logs; }); } -} - +} \ No newline at end of file