diff --git a/carma-messenger-core/carma-messenger/launch/carma-messenger.launch b/carma-messenger-core/carma-messenger/launch/carma-messenger.launch
index db8a3f540..484339947 100644
--- a/carma-messenger-core/carma-messenger/launch/carma-messenger.launch
+++ b/carma-messenger-core/carma-messenger/launch/carma-messenger.launch
@@ -36,9 +36,6 @@
args="pub -l /system_alert cav_msgs/SystemAlert '{ type: 5, description: Simulated Drivers Ready }'"
/>
-
-
-
diff --git a/carma-messenger-core/carma-messenger/launch/carma-messenger.launch.py b/carma-messenger-core/carma-messenger/launch/carma-messenger.launch.py
index 53f8cca0f..74b0de78e 100644
--- a/carma-messenger-core/carma-messenger/launch/carma-messenger.launch.py
+++ b/carma-messenger-core/carma-messenger/launch/carma-messenger.launch.py
@@ -77,10 +77,19 @@ def generate_launch_description():
]
)
+ ui_group = GroupAction(
+ actions=[
+ IncludeLaunchDescription(
+ PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/ui.launch.py']),
+ ),
+ ]
+ )
+
return LaunchDescription([
declare_configuration_delay_arg,
declare_route_file_folder,
transform_group,
v2x_group,
- plugins_group
+ plugins_group,
+ ui_group
])
diff --git a/carma-messenger-core/carma-messenger/launch/ui.launch b/carma-messenger-core/carma-messenger/launch/ui.launch
deleted file mode 100644
index dcc07bdc1..000000000
--- a/carma-messenger-core/carma-messenger/launch/ui.launch
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/carma-messenger-core/carma-messenger/launch/ui.launch.py b/carma-messenger-core/carma-messenger/launch/ui.launch.py
new file mode 100644
index 000000000..90df56bd8
--- /dev/null
+++ b/carma-messenger-core/carma-messenger/launch/ui.launch.py
@@ -0,0 +1,50 @@
+# Copyright (C) 2024 LEIDOS.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from launch import LaunchDescription
+from launch.actions import GroupAction, IncludeLaunchDescription
+from launch_ros.actions import SetRemap
+from ament_index_python.packages import get_package_share_directory
+from launch_xml.launch_description_sources import XMLLaunchDescriptionSource
+import os
+
+
+def generate_launch_description():
+ """
+ Launch file for launching the nodes in the CARMA Messenger user interface stack
+ """
+
+ params = os.path.join(
+ get_package_share_directory('carma-messenger'),
+ 'ui',
+ 'config',
+ 'CommandAPIParams.yaml'
+ )
+
+ ui_group = GroupAction(
+ actions=[
+ SetRemap("system_alert", "/system_alert"),
+ SetRemap("bsm", "incoming_bsm"),
+ IncludeLaunchDescription(
+ XMLLaunchDescriptionSource(os.path.join(get_package_share_directory("rosbridge_server"), 'launch', 'rosbridge_websocket_launch.xml')),
+ launch_arguments = {
+ 'params_glob' : [params],
+ }.items()
+ ),
+ ]
+ )
+
+ return LaunchDescription([
+ ui_group
+ ])
\ No newline at end of file
diff --git a/carma-messenger-ui/website/scripts/control.js b/carma-messenger-ui/website/scripts/control.js
index 874f9ca90..f1239957b 100755
--- a/carma-messenger-ui/website/scripts/control.js
+++ b/carma-messenger-ui/website/scripts/control.js
@@ -332,7 +332,7 @@ function sendModalResponse(operatorResponse, serviceName) {
var serviceClient = new ROSLIB.Service({
ros : ros,
name : serviceName,
- serviceType : 'std_srvs/SetBool'
+ serviceType : 'std_srvs/srv/SetBool'
});
// Then we create a Service Request. The object we pass in to ROSLIB.ServiceRequest matches the
diff --git a/carma-messenger-ui/website/thirdparty/ros/roslib.js b/carma-messenger-ui/website/thirdparty/ros/roslib.js
index 680ae8c86..e5c9ebc13 100755
--- a/carma-messenger-ui/website/thirdparty/ros/roslib.js
+++ b/carma-messenger-ui/website/thirdparty/ros/roslib.js
@@ -2774,7 +2774,7 @@
this.statusListener = new Topic({
ros : this.ros,
name : this.serverName + '/status',
- messageType : 'actionlib_msgs/GoalStatusArray'
+ messageType : 'actionlib_msgs/msg/GoalStatusArray'
});
this.resultListener = new Topic({
@@ -2792,7 +2792,7 @@
this.cancelTopic = new Topic({
ros : this.ros,
name : this.serverName + '/cancel',
- messageType : 'actionlib_msgs/GoalID'
+ messageType : 'actionlib_msgs/msg/GoalID'
});
// advertise the goal and cancel topics
@@ -2917,7 +2917,7 @@
var statusListener = new Topic({
ros : this.ros,
name : this.serverName + '/status',
- messageType : 'actionlib_msgs/GoalStatusArray'
+ messageType : 'actionlib_msgs/msg/GoalStatusArray'
});
var resultListener = new Topic({
@@ -3085,7 +3085,7 @@
var statusPublisher = new Topic({
ros : this.ros,
name : this.serverName + '/status',
- messageType : 'actionlib_msgs/GoalStatusArray'
+ messageType : 'actionlib_msgs/msg/GoalStatusArray'
});
statusPublisher.advertise();
@@ -3106,7 +3106,7 @@
var cancelListener = new Topic({
ros : this.ros,
name : this.serverName + '/cancel',
- messageType : 'actionlib_msgs/GoalID'
+ messageType : 'actionlib_msgs/msg/GoalID'
});
// Track the goals and their status in order to publish status...
@@ -4435,7 +4435,7 @@
* @param {Object} options
* @param {Ros} options.ros - The ROSLIB.Ros connection handle.
* @param {string} options.name - The topic name, like '/cmd_vel'.
- * @param {string} options.messageType - The message type, like 'std_msgs/String'.
+ * @param {string} options.messageType - The message type, like 'std_msgs/msg/String'.
* @param {string} [options.compression=none] - The type of compression to use, like 'png', 'cbor', or 'cbor-raw'.
* @param {number} [options.throttle_rate=0] - The rate (in ms in between messages) at which to throttle the topics.
* @param {number} [options.queue_size=100] - The queue created at bridge side for re-publishing webtopics.
diff --git a/carma-messenger-ui/website/thirdparty/ros/roslib.min.js b/carma-messenger-ui/website/thirdparty/ros/roslib.min.js
index cdb33e83a..779f8f244 100755
--- a/carma-messenger-ui/website/thirdparty/ros/roslib.min.js
+++ b/carma-messenger-ui/website/thirdparty/ros/roslib.min.js
@@ -1 +1 @@
-!function n(r,s,o){function a(t,e){if(!s[t]){if(!r[t]){var i="function"==typeof require&&require;if(!e&&i)return i(t,!0);if(c)return c(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}i=s[t]={exports:{}},r[t][0].call(i.exports,function(e){return a(r[t][1][e]||e)},i,i.exports,n,r,s,o)}return s[t].exports}for(var c="function"==typeof require&&require,e=0;e>2),s=0;s>6):(s<55296?n.push(224|s>>12):(s=65536+((s=(1023&s)<<10)|1023&t.charCodeAt(++r)),n.push(240|s>>18),n.push(128|s>>12&63)),n.push(128|s>>6&63)),n.push(128|63&s))}return m(3,n.length),p(n);default:if(Array.isArray(t))for(m(4,o=t.length),r=0;r>5!==e)throw"Invalid indefinite length element";return i}function M(e,t){for(var i=0;i>10),e.push(56320|1023&n))}}"function"!=typeof d&&(d=function(e){return e}),"function"!=typeof y&&(y=function(){return A});var e=function e(){var t,i,n=x(),r=n>>5,n=31&n;if(7==r)switch(n){case 25:var s=new ArrayBuffer(4),s=new DataView(s),o=T(),a=31744&o,c=1023&o;if(31744===a)a=261120;else if(0!==a)a+=114688;else if(0!=c)return c*U;return s.setUint32(0,(32768&o)<<16|a<<13|c<<13),s.getFloat32(0);case 26:return w(g.getFloat32(b),4);case 27:return w(g.getFloat64(b),8)}if((t=L(n))<0&&(r<2||6this._maxListeners&&(l._listeners.warned=!0,f.call(this,l._listeners.length,c))):l._listeners=t,!0;return!0}.call(this,e,t,i):this._events[e]?("function"==typeof this._events[e]&&(this._events[e]=[this._events[e]]),i?this._events[e].unshift(t):this._events[e].push(t),!this._events[e].warned&&0this._maxListeners&&(this._events[e].warned=!0,f.call(this,this._events[e].length,e))):this._events[e]=t,r},r.prototype.off=function(e,t){if("function"!=typeof t)throw new Error("removeListener only takes instances of Function");var i=[];if(this.wildcard){var n="string"==typeof e?e.split(this.delimiter):e.slice();if(!(i=_.call(this,null,n,this.listenerTree,0)))return this}else{if(!this._events[e])return this;o=this._events[e],i.push({_listeners:o})}for(var r=0;rt.secs)&&(e.secs>2),s=0;s>6):(s<55296?n.push(224|s>>12):(s=65536+((s=(1023&s)<<10)|1023&t.charCodeAt(++r)),n.push(240|s>>18),n.push(128|s>>12&63)),n.push(128|s>>6&63)),n.push(128|63&s))}return m(3,n.length),p(n);default:if(Array.isArray(t))for(m(4,o=t.length),r=0;r>5!==e)throw"Invalid indefinite length element";return i}function M(e,t){for(var i=0;i>10),e.push(56320|1023&n))}}"function"!=typeof d&&(d=function(e){return e}),"function"!=typeof y&&(y=function(){return A});var e=function e(){var t,i,n=x(),r=n>>5,n=31&n;if(7==r)switch(n){case 25:var s=new ArrayBuffer(4),s=new DataView(s),o=T(),a=31744&o,c=1023&o;if(31744===a)a=261120;else if(0!==a)a+=114688;else if(0!=c)return c*U;return s.setUint32(0,(32768&o)<<16|a<<13|c<<13),s.getFloat32(0);case 26:return w(g.getFloat32(b),4);case 27:return w(g.getFloat64(b),8)}if((t=L(n))<0&&(r<2||6this._maxListeners&&(l._listeners.warned=!0,f.call(this,l._listeners.length,c))):l._listeners=t,!0;return!0}.call(this,e,t,i):this._events[e]?("function"==typeof this._events[e]&&(this._events[e]=[this._events[e]]),i?this._events[e].unshift(t):this._events[e].push(t),!this._events[e].warned&&0this._maxListeners&&(this._events[e].warned=!0,f.call(this,this._events[e].length,e))):this._events[e]=t,r},r.prototype.off=function(e,t){if("function"!=typeof t)throw new Error("removeListener only takes instances of Function");var i=[];if(this.wildcard){var n="string"==typeof e?e.split(this.delimiter):e.slice();if(!(i=_.call(this,null,n,this.listenerTree,0)))return this}else{if(!this._events[e])return this;o=this._events[e],i.push({_listeners:o})}for(var r=0;rt.secs)&&(e.secs {
listenerBSM = new ROSLIB.Topic({
ros: ros,
name: '/bsm_outbound',
- messageType: 'cav_msgs/BSM'
+ messageType: 'carma_v2x_msgs/msg/BSM'
});
listenerBSM.subscribe(function (message) {
if (message.core_data != undefined && message.core_data.latitude != undefined && message.core_data.longitude != undefined) {
@@ -146,7 +146,7 @@ var subscribe_alert = () => {
listenerAlert = new ROSLIB.Topic({
ros: ros,
name: '/emergency_vehicle_ui_warning',
- messageType: 'cav_msgs/UIInstructions'
+ messageType: 'carma_msgs/msg/UIInstructions'
});
listenerAlert.subscribe(function (message) {
if (message != undefined && message.msg != undefined) {
@@ -166,7 +166,7 @@ var service_arrive_at_emergency_destination = () => {
var arrive_at_emergency_destination = new ROSLIB.Service({
ros: ros,
name: '/arrived_at_emergency_destination',
- serviceType: 'std_srvs/Trigger.srv'
+ serviceType: 'std_srvs/srv/Trigger.srv'
});
var request = new ROSLIB.ServiceRequest({
diff --git a/carma-messenger-ui/website/widgets/eventManagement/widget.js b/carma-messenger-ui/website/widgets/eventManagement/widget.js
index 79b9dfafd..93b6010f2 100644
--- a/carma-messenger-ui/website/widgets/eventManagement/widget.js
+++ b/carma-messenger-ui/website/widgets/eventManagement/widget.js
@@ -104,7 +104,7 @@ CarmaJS.WidgetFramework.eventManagement = (function () {
var sendStartBCRequest = new ROSLIB.Service({
ros: ros,
name: '/start_broadcasting_traffic_event',
- serviceType: 'cav_srvs/SetTrafficEvent.h'
+ serviceType: 'carma_msgs/srv/SetTrafficEvent.h'
});
//event UI form
@@ -187,7 +187,7 @@ CarmaJS.WidgetFramework.eventManagement = (function () {
var listenerMobilityOperation = new ROSLIB.Topic({
ros: ros,
name: '/outgoing_mobility_operation',
- messageType: 'cav_msgs/MobilityOperation'
+ messageType: 'carma_v2x_msgs/msg/MobilityOperation'
});
listenerMobilityOperation.subscribe(function (message) {
@@ -237,7 +237,7 @@ CarmaJS.WidgetFramework.eventManagement = (function () {
var sendStopBCRequest = new ROSLIB.Service({
ros: ros,
name: '/stop_broadcasting_traffic_event',
- serviceType: 'std_srvs/Trigger'
+ serviceType: 'std_srvs/srv/Trigger'
});
var request = new ROSLIB.ServiceRequest({});
try{