{ "configById": { "Plot!gjvhbp": { "paths": [ { "value": "/range/fl.range", "enabled": true, "timestampMethod": "receiveTime" }, { "value": "/range/rl.range", "enabled": true, "timestampMethod": "receiveTime" }, { "value": "/range/fr.range", "enabled": true, "timestampMethod": "receiveTime" }, { "value": "/range/rr.range", "enabled": true, "timestampMethod": "receiveTime" } ], "minYValue": -0.039230484541325744, "maxYValue": 1, "showXAxisLabels": true, "showYAxisLabels": true, "showLegend": true, "legendDisplay": "floating", "showPlotValuesInLegend": false, "isSynced": true, "xAxisVal": "timestamp", "sidebarDimension": 240, "foxglovePanelTitle": "Plot", "followingViewWidth": 30 }, "Plot!1u5bb0v": { "paths": [ { "value": "/imu_broadcaster/imu.orientation.w", "enabled": true, "timestampMethod": "receiveTime" }, { "value": "/imu_broadcaster/imu.orientation.x", "enabled": true, "timestampMethod": "receiveTime" }, { "value": "/imu_broadcaster/imu.orientation.y", "enabled": true, "timestampMethod": "receiveTime" }, { "value": "/imu_broadcaster/imu.orientation.z", "enabled": true, "timestampMethod": "receiveTime" } ], "minYValue": -1.1, "maxYValue": 1.1, "showXAxisLabels": true, "showYAxisLabels": true, "showLegend": true, "legendDisplay": "floating", "showPlotValuesInLegend": false, "isSynced": true, "xAxisVal": "timestamp", "sidebarDimension": 240, "foxglovePanelTitle": "Plot", "followingViewWidth": 30 }, "Tab!2qhku9u": { "activeTabIdx": 0, "tabs": [ { "title": "Ranges Plots", "layout": "Plot!gjvhbp" }, { "title": "IMU Plots", "layout": "Plot!1u5bb0v" } ] }, "3D!40jejke": { "cameraState": { "perspective": true, "distance": 4.7565377051017865, "phi": 0.5121483430698642, "thetaOffset": 89.80364880250498, "targetOffset": [ 0.04217571585974451, -0.03971452594915587, 1.5648103050465003e-17 ], "target": [ 0, 0, 0 ], "targetOrientation": [ 0, 0, 0, 1 ], "fovy": 45, "near": 0.5, "far": 5000 }, "followMode": "follow-pose", "scene": { "transforms": { "axisScale": 0.4499999999999996, "labelSize": 0.013834613718625963 }, "enableStats": true, "ignoreColladaUpAxis": false, "syncCamera": false }, "transforms": { "frame:base_link": { "visible": false }, "frame:body_link": { "visible": false }, "frame:cover_link": { "visible": false }, "frame:imu_link": { "visible": false }, "frame:camera_link": { "visible": false }, "frame:fl_range": { "visible": false }, "frame:fr_range": { "visible": false }, "frame:rl_range": { "visible": false }, "frame:rr_range": { "visible": false }, "frame:fl_wheel_link": { "visible": true }, "frame:fr_wheel_link": { "visible": true }, "frame:rl_wheel_link": { "visible": true }, "frame:rr_wheel_link": { "visible": true }, "frame:slamtec_rplidar_a2_link": { "visible": false }, "frame:laser": { "visible": false }, "frame:orbbec_astra_link": { "visible": false }, "frame:depth": { "visible": false }, "frame:odom": { "visible": false } }, "topics": { "/scan": { "visible": true, "colorField": "range", "colorMode": "flat", "colorMap": "turbo", "pointSize": 8, "flatColor": "#f90000" }, "/robot_description": { "visible": false } }, "layers": { "e827a6dc-875b-448a-8475-5497577c2e1b": { "visible": true, "frameLocked": true, "label": "URDF", "instanceId": "e827a6dc-875b-448a-8475-5497577c2e1b", "layerId": "foxglove.Urdf", "url": "http://{{.Host}}:{{env "FOXGLOVE_PORT"}}/rosbot.urdf", "order": 1 }, "b2c64820-a936-4f65-82b5-7a04ef902009": { "visible": true, "frameLocked": true, "label": "Grid", "instanceId": "b2c64820-a936-4f65-82b5-7a04ef902009", "layerId": "foxglove.Grid", "size": 10, "divisions": 100, "lineWidth": 1, "color": "#248eff", "position": [ 0, 0, 0 ], "rotation": [ 0, 0, 0 ], "order": 2 } }, "publish": { "type": "point", "poseTopic": "/move_base_simple/goal", "pointTopic": "/clicked_point", "poseEstimateTopic": "/initialpose", "poseEstimateXDeviation": 0.5, "poseEstimateYDeviation": 0.5, "poseEstimateThetaDeviation": 0.26179939 }, "foxglovePanelTitle": "Lidar View" }, "RosOut!b0toow": { "searchTerms": [], "minLogLevel": 2 }, "Teleop!yh7wcv": { "topic": "/cmd_vel", "publishRate": 1, "upButton": { "field": "linear-x", "value": 0.19754204525471783 }, "downButton": { "field": "linear-x", "value": -0.20000000000000015 }, "leftButton": { "field": "angular-z", "value": 1 }, "rightButton": { "field": "angular-z", "value": -1 }, "foxglovePanelTitle": "Diff Drive" }, "ImageViewPanel!40iocf4": { "cameraTopic": "/camera/color/image_raw/compressed", "enabledMarkerTopics": [], "mode": "fit", "pan": { "x": 0, "y": 0 }, "rotation": 0, "synchronize": true, "transformMarkers": false, "zoom": 1, "foxglovePanelTitle": "Astra Compressed Image" }, "Gauge!4jffafa": { "path": "/battery.voltage", "minValue": 9.8, "maxValue": 12.6, "colorMap": "turbo", "colorMode": "colormap", "gradient": [ "#0000ff", "#ff00ff" ], "reverse": false, "foxglovePanelTitle": "Battery" }, "Indicator!11kizr9": { "path": "/battery.voltage", "style": "background", "fallbackColor": "#000000", "fallbackLabel": "Ok", "rules": [ { "operator": "<", "rawValue": "10.8", "color": "#ff0000", "label": "Plug charger!" } ], "foxglovePanelTitle": "Plug Charger Info" }, "Plot!4dl4s92": { "paths": [ { "value": "/battery.voltage", "enabled": true, "timestampMethod": "receiveTime" } ], "minYValue": 9.482842712474614, "maxYValue": 13, "showXAxisLabels": true, "showYAxisLabels": true, "showLegend": true, "legendDisplay": "floating", "showPlotValuesInLegend": true, "isSynced": true, "xAxisVal": "timestamp", "sidebarDimension": 240, "foxglovePanelTitle": "Plot", "followingViewWidth": 60 }, "Publish!1f6cruz": { "topicName": "/led/left", "datatype": "std_msgs/msg/Bool", "buttonText": "LED1 Turn ON", "buttonTooltip": "", "buttonColor": "#00A871", "advancedView": false, "value": "{\n \"data\": true\n}", "foxglovePanelTitle": "LED1 Turn ON" }, "Publish!1wozu40": { "topicName": "/led/right", "datatype": "std_msgs/msg/Bool", "buttonText": "LED2 Turn ON", "buttonTooltip": "", "buttonColor": "#00A871", "advancedView": false, "value": "{\n \"data\": true\n}", "foxglovePanelTitle": "LED2 Turn ON" }, "Indicator!2z34jcy": { "path": "/button/left.data", "style": "background", "fallbackColor": "#ff0000", "fallbackLabel": "Released", "rules": [ { "operator": "=", "rawValue": "true", "color": "#26c578", "label": "Pressed" } ], "foxglovePanelTitle": "Left Button" }, "Publish!3cb71c0": { "topicName": "/led/left", "datatype": "std_msgs/msg/Bool", "buttonText": "LED1 Turn OFF", "buttonTooltip": "", "buttonColor": "#a80000", "advancedView": false, "value": "{\n \"data\": false\n}", "foxglovePanelTitle": "LED1 Turn OFF" }, "Publish!46onm9c": { "topicName": "/led/right", "datatype": "std_msgs/msg/Bool", "buttonText": "LED2 Turn OFF", "buttonTooltip": "", "buttonColor": "#a80000", "advancedView": false, "value": "{\n \"data\": false\n}", "foxglovePanelTitle": "LED2 Turn OFF" }, "Indicator!1hywfa1": { "path": "/button/right.data", "style": "background", "fallbackColor": "#ff0000", "fallbackLabel": "Released", "rules": [ { "operator": "=", "rawValue": "true", "color": "#26c578", "label": "Pressed" } ], "foxglovePanelTitle": "Left Button" } }, "globalVariables": { "globalVariable": 7 }, "userNodes": { "f5206e1d-deee-4f90-a03e-f561fbb9a7dd": { "sourceCode": "// The ./types module provides helper types for your Input events and messages.\nimport { Input, Message } from \"./types\";\n\n// Your script can output well-known message types, any of your custom message types, or\n// complete custom message types.\n//\n// Use `Message` to access your data source types or well-known types:\n// type Twist = Message<\"geometry_msgs/Twist\">;\n//\n// Conventionally, it's common to make a _type alias_ for your script's output type\n// and use that type name as the return type for your script function.\n// Here we've called the type `Output` but you can pick any type name.\ntype Output = {\n hello: string;\n};\n\n// These are the topics your script \"subscribes\" to. Studio will invoke your script function\n// when any message is received on one of these topics.\nexport const inputs = [\"/input/topic\"];\n\n// Any output your script produces is \"published\" to this topic. Published messages are only visible within Studio, not to your original data source.\nexport const output = \"/studio_script/output_topic\";\n\n// This function is called with messages from your input topics.\n// The first argument is an event with the topic, receive time, and message.\n// Use the `Input<...>` helper to get the correct event type for your input topic messages.\nexport default function script(event: Input<\"/input/topic\">): Output {\n return {\n hello: \"world!\",\n };\n};", "name": "f5206e1d" }, "1a9e6183-d4b1-47dd-a024-efc14ab90b6b": { "sourceCode": "// This example shows how to subscribe to multiple input topics.\n//\n// NOTE:\n// User Scripts can subscribe to multiple input topics, but can only publish on a single topic.\n\nimport { Input } from \"./types\";\n\ntype Output = { topic: string };\ntype GlobalVariables = { id: number };\n\n// List all the input topics in the `input` array\nexport const inputs = [\"/input/topic\", \"/input/another\"];\nexport const output = \"/studio_script/output_topic\";\n\n// Make an InputEvent type alias. Since our node will get a message from either input topic, we need to enumerate the topics.\ntype InputEvent = Input<\"/input/topic\"> | Input<\"/input/another\">;\n\nexport default function node(event: InputEvent, globalVars: GlobalVariables): Output {\n // Remember that your node will get messages on each topic, so you\n // need to check each event's topic to know which fields are available on the message.\n switch (event.topic) {\n case \"/input/topic\":\n // topic specific input logic\n // Our message fields are specific to our topic message\n break;\n case \"/input/another\":\n // another specific logic\n break;\n }\n\n // Nodes can only output one type of message regardless of the inputs\n // Here we echo back the input topic as an example.\n return {\n topic: event.topic,\n };\n};\n", "name": "1a9e6183" } }, "playbackConfig": { "speed": 1 }, "layout": { "first": { "direction": "row", "first": "Tab!2qhku9u", "second": { "first": "3D!40jejke", "second": { "first": "RosOut!b0toow", "second": "Teleop!yh7wcv", "direction": "column" }, "direction": "row", "splitPercentage": 57.03330110757996 }, "splitPercentage": 30.5849582172702 }, "second": { "first": "ImageViewPanel!40iocf4", "second": { "first": { "first": { "first": "Gauge!4jffafa", "second": "Indicator!11kizr9", "direction": "column" }, "second": "Plot!4dl4s92", "direction": "row" }, "second": { "first": { "first": "Publish!1f6cruz", "second": { "first": "Publish!1wozu40", "second": "Indicator!2z34jcy", "direction": "row", "splitPercentage": 30.461538461538503 }, "direction": "row", "splitPercentage": 23.167848699763567 }, "second": { "first": { "first": "Publish!3cb71c0", "second": "Publish!46onm9c", "direction": "row", "splitPercentage": 49.49494949494945 }, "second": "Indicator!1hywfa1", "direction": "row", "splitPercentage": 46.808510638297854 }, "direction": "column" }, "direction": "row", "splitPercentage": 57.106729218589656 }, "direction": "row", "splitPercentage": 30.63012301119672 }, "direction": "column", "splitPercentage": 67.44897959183673 } }