Foxglove v2.3.0
📹 Low-latency multi-video playback
Buckle up for smoother video loading: We've made performance improvements to video playback so you get a low latency experience when visualizing multiple CompressedVideo topics at once.
Buckle up for smoother video loading: We've made performance improvements to video playback so you get a low latency experience when visualizing multiple CompressedVideo topics at once.
Have you ever wanted to get a 3D view of the entire world? One of our users did, but had some issues with z-fighting that kept the visualization within Foxglove from looking as sharp as it should. We think that outer-space fighting should be limited to intergalactic battles, so we added a new setting to enable a logarithmic depth buffer, which can improve rendering precision for large distance scales.
Using this feature may lead to a loss in rendering performance, but may be worth the price for users looking to visualize Earth-scale data, large maps, or just wanting to zoom in/out really, really far.
In this example below:
The Service Call panel now has an option to hide the request and response text fields. This allows you to configure a request once up front, then invoke the service call without any distractions. We love distractions, but only the kinds that have wet noses and wagging tails.
prefixItems
).type Output = {
field1: Message<"std_msgs/String">;
field2: Array<number>;
};
It is now possible to create elaborate return types, for example:
import { Input, Message, Time } from "./types";
import { subtractTimes } from "./time";
type InputType = Message<"geometry_msgs/PoseStamped">;
type Output = {
header: InputType["header"];
time_diff: Time;
translation: Message<"geometry_msgs/Vector3">;
random_array: Array<number>;
};
export const inputs = ["/pose_stamped"];
export const output = "/pose_difference";
let lastMessage: InputType | undefined;
// Calculates translation & time difference between two subsequent poses.
export default function script(event: Input<"/pose_stamped">): Output | undefined {
const message = event.message;
if (!lastMessage) {
lastMessage = message;
return undefined;
}
const output: Output = {
header: message.header,
time_diff: subtractTimes(message.header.stamp, lastMessage.header.stamp),
translation: {
x: message.pose.position.x - lastMessage.pose.position.x,
y: message.pose.position.y - lastMessage.pose.position.y,
z: message.pose.position.z - lastMessage.pose.position.z,
},
random_array: [Math.random(), Math.random()],
};
lastMessage = message;
return output;
}
For more information, see our Foxglove 2.0 Announcement.
You can now visualize your data and manage your Devices, Recordings, and Events all in the same app. This new workflow is available both in the desktop app and at https://app.foxglove.dev/. Click the Foxglove logo to access the new navigation from the visualization screen:
When opening the app, you will now be greeted with the Dashboard. The “Open local file”, “Open connection”, “Recently viewed”, and “Explore sample data” features are now part of the Dashboard.
The panel actions overlay now has separate buttons to split right and split down, rather than a single split button that chooses a split direction automatically. Hold the backtick (`
) key and hover over a panel to access the quick actions:
package://
URLs over a WebSocket connection.The Plot panel now displays more information about series errors and warnings in the legend.
Fixed some visual alignment issues in Plot and State Transitions.
toSchemaName
that matches one of the panel’s supported schemas.allFrames
when they should not have been.