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{