Skip to content

Commit 9e2d6fb

Browse files
committed
Merge branch 'ros2' into develop
2 parents 7cabb28 + 8cf9d48 commit 9e2d6fb

File tree

14 files changed

+10123
-7428
lines changed

14 files changed

+10123
-7428
lines changed

vue-frontend/package-lock.json

Lines changed: 9658 additions & 6974 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vue-frontend/package.json

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,32 @@
88
},
99
"dependencies": {
1010
"@kazupon/vue-i18n-loader": "^0.5.0",
11-
"vue": "^2.6.11",
12-
"vue-cli-plugin-i18n": "^2.1.1",
13-
"vue-i18n": "^8.24.4",
14-
"vue-router": "^3.1.5",
15-
"vuex": "^3.4.0",
16-
"vuex-persistedstate": "^4.0.0"
11+
"vue": "^2.7.16",
12+
"vue-cli-plugin-i18n": "^2.3.2",
13+
"vue-i18n": "^8.28.2",
14+
"vue-router": "^3.6.5",
15+
"vuex": "^3.6.2",
16+
"vuex-persistedstate": "^4.1.0"
1717
},
1818
"devDependencies": {
19-
"@fortawesome/fontawesome-free": "^5.13.0",
20-
"@vue/cli-service": "^4.5.13",
21-
"axios": "^0.21.1",
19+
"@fortawesome/fontawesome-free": "^5.15.4",
20+
"@vue/cli-service": "^4.5.19",
21+
"axios": "^0.29.0",
2222
"blockly": "^6.20210701.0",
23-
"bootstrap-vue": "^2.8.0",
24-
"canvas-to-image": "2.2.0",
25-
"copy-webpack-plugin": "^5.1.1",
26-
"hotkeys-js": "^3.8.1",
27-
"html2canvas": "^1.0.0-rc.7",
28-
"js-yaml": "^4.0.0",
23+
"bootstrap-vue": "^2.23.1",
24+
"canvas-to-image": "2.2.5",
25+
"copy-webpack-plugin": "^5.1.2",
26+
"hotkeys-js": "^3.13.9",
27+
"html2canvas": "^1.4.1",
28+
"js-yaml": "^4.1.0",
2929
"popper.js": "^1.16.1",
30-
"roslib": "^1.1.0",
31-
"sass": "^1.34.0",
30+
"roslib": "RobotWebTools/roslibjs#2999d0afdf812b72f1722c945eb732d230731541",
31+
"sass": "^1.85.1",
3232
"sass-loader": "^8.0.2",
3333
"v-hotkey": "^0.9.0",
3434
"vue-codemirror": "^4.0.6",
35-
"vue-template-compiler": "^2.6.11",
36-
"xterm": "^4.4.0",
35+
"vue-template-compiler": "^2.7.16",
36+
"xterm": "^4.19.0",
3737
"xterm-addon-attach": "^0.5.0",
3838
"xterm-addon-fit": "^0.3.0"
3939
},

vue-frontend/src/App.vue

Lines changed: 105 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ import VueHotkey from "v-hotkey";
5353
import Vue from 'vue'
5454
import html2canvas from 'html2canvas';
5555
import canvasToImage from 'canvas-to-image'
56+
import * as ROSLIB from 'roslib'
57+
import ros from './ws-connection/ROS-connection.js'
58+
import properties_ph from "./assets/json/properties_ph.json"
5659
5760
5861
Vue.use(VueHotkey);
@@ -66,6 +69,7 @@ export default {
6669
error: '',
6770
online: [],
6871
textVariant: 'dark',
72+
peripherals: properties_ph,
6973
}
7074
},
7175
components: {
@@ -105,7 +109,102 @@ export default {
105109
//if (window.location.href.indexOf(item.toLowerCase()) === -1){
106110
// window.location = "http://" + item.toLowerCase() + ".local";
107111
//}
108-
},
112+
},
113+
mergeDeep(target, source) {
114+
for (const key in source) {
115+
if (source[key] instanceof Object && key in target) {
116+
// Recursively merge if both properties are objects
117+
target[key] = this.mergeDeep(target[key], source[key]);
118+
} else {
119+
// Otherwise, directly assign
120+
target[key] = source[key];
121+
}
122+
}
123+
return target;
124+
},
125+
getPeripherals(){
126+
127+
var listParametersService = new ROSLIB.Service({
128+
ros : ros,
129+
name : '/io/telemetrix/list_parameters',
130+
serviceType : 'rcl_interfaces/srv/ListParameters'
131+
});
132+
133+
var getParameterService = new ROSLIB.Service({
134+
ros : ros,
135+
name : '/io/telemetrix/get_parameters',
136+
serviceType : 'rcl_interfaces/srv/GetParameters'
137+
});
138+
139+
let _this = this;
140+
let peripheral_list = Object.keys(this.peripherals);
141+
let hardware_list = peripheral_list.filter(item => !item.includes("motor"));
142+
hardware_list.push("motor");
143+
hardware_list.push("device");
144+
let peripherals = {'sensors': {}, 'actuators': {}, 'devices': {} };
145+
let params = {};
146+
147+
var request = {
148+
prefixes: hardware_list,
149+
depth: 0
150+
};
151+
152+
// Get all the parameters
153+
listParametersService.callService(request, function(result) {
154+
155+
let param_names = result.result.names;
156+
var req = {
157+
names: param_names
158+
};
159+
160+
// Get the values of all the parameters
161+
getParameterService.callService(req, function(res){
162+
163+
let values = res.values;
164+
for (let param_id in values){
165+
166+
let value = 0;
167+
if (values[param_id].type == 2){
168+
value = values[param_id].integer_value;
169+
} else if (values[param_id].type == 3){
170+
value = values[param_id].double_value;
171+
} else if (values[param_id].type == 4){
172+
value = values[param_id].string_value;
173+
}
174+
175+
let item = param_names[param_id].split(".").reduceRight((acc, key) => ({ [key]: acc }), value);
176+
params = _this.mergeDeep(params, item);
177+
}
178+
179+
// Fix motor issues (TODO: we need to redesign the motor setup
180+
let new_params = {}
181+
for (let type in params){
182+
if (type == "motor"){
183+
for (let instance in params[type]){
184+
new_params[params[type][instance].type + "_motor"] = new_params[params[type][instance].type + "_motor"] || {};
185+
new_params[params[type][instance].type + "_motor"][instance] = params[type][instance];
186+
}
187+
} else {
188+
new_params[type] = params[type];
189+
}
190+
}
191+
params = new_params;
192+
193+
// Save everything in sensors/actuators
194+
for (let type in params){
195+
console.log(type);
196+
if (type == "device"){
197+
peripherals['devices'] = params[type];
198+
} else if (_this.peripherals[type].rel_path.split("\\")[0] == "Sensors"){
199+
peripherals['sensors'][type] = params[type];
200+
} else {
201+
peripherals['actuators'][type] = params[type];
202+
}
203+
}
204+
_this.$store.dispatch('setPeripherals', peripherals);
205+
});
206+
});
207+
},
109208
checkLogin() {
110209
this.submitted = true;
111210
const { username, password } = this;
@@ -129,11 +228,14 @@ export default {
129228
this.$store.dispatch('setUser', response.data)
130229
}
131230
})
132-
}
231+
},
133232
},
134233
mounted() { //TODO: could this be beforeMount?
135234
136-
axios.get("/api/self")
235+
console.log("Retrieving ROS parameters");
236+
this.getPeripherals();
237+
238+
axios.get("/api/self")
137239
.then((response) => {
138240
this.$store.dispatch('setUser', response.data)
139241
})

vue-frontend/src/assets/json/properties_mc.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"nano": {
3+
"text": "Arduino Nano",
34
"pin_map": {
45
"RX0": 0,
56
"TX1": 1,
@@ -28,6 +29,7 @@
2829
"analog_offset": 14
2930
},
3031
"nano_old": {
32+
"text": "Arduino Nano (old)",
3133
"pin_map": {
3234
"RX0": 0,
3335
"TX1": 1,
@@ -56,6 +58,7 @@
5658
"analog_offset": 14
5759
},
5860
"pico": {
61+
"text": "Raspberry Pi Pico",
5962
"pin_map": {
6063
"GP0" : 0,
6164
"GP1" : 1,
@@ -91,6 +94,7 @@
9194
"analog_offset": 26
9295
},
9396
"uno": {
97+
"text": "Arduino Uno",
9498
"pin_map": {
9599
"RX0": 0,
96100
"TX1": 1,

vue-frontend/src/assets/json/properties_ph.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"rel_path": "Actuators\\Motor\\pwm_motor\\pwm_motor.py",
1111
"service_type": "mirte_msgs/SetMotorSpeed",
1212
"service_value": "speed",
13-
"service_name": "speed"
13+
"service_name": "set_speed"
1414
},
1515
"ddp_motor": {
1616
"text": "ddp_motor",
@@ -24,7 +24,7 @@
2424
"rel_path": "Actuators\\Motor\\pwm_motor\\pwm_motor.py",
2525
"service_type": "mirte_msgs/SetMotorSpeed",
2626
"service_value": "speed",
27-
"service_name": "speed"
27+
"service_name": "set_speed"
2828
},
2929
"dp_motor": {
3030
"text": "dp_motor",
@@ -37,7 +37,7 @@
3737
"rel_path": "Actuators\\Motor\\pwm_motor\\pwm_motor.py",
3838
"service_type": "mirte_msgs/SetMotorSpeed",
3939
"service_value": "speed",
40-
"service_name": "speed"
40+
"service_name": "set_speed"
4141
},
4242
"intensity": {
4343
"text": "ir_sensor",
@@ -82,7 +82,7 @@
8282
"rel_path": "Actuators\\Servo\\servo\\servo.py",
8383
"service_type": "mirte_msgs/SetServoAngle",
8484
"service_value": "angle",
85-
"service_name": "servo_angle"
85+
"service_name": "set_angle"
8686
},
8787
"oled": {
8888
"text": "oled",

0 commit comments

Comments
 (0)