Repo symbol

qml_ros2_plugin repository

qml_ros2_plugin

Repository Summary

Checkout URI https://github.com/StefanFabian/qml_ros2_plugin.git
VCS Type git
VCS Version master
Last Updated 2025-06-20
Dev Status DEVELOPED
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
qml_ros2_plugin 1.25.2

README

Quality Gate Status Maintainability Rating Reliability Rating Security Rating Documentation Status

Scientific Works

If you are using this module in a scientific context, feel free to cite this paper:

@INPROCEEDINGS{fabian2021hri,
  author = {Stefan Fabian and Oskar von Stryk},
  title = {Open-Source Tools for Efficient ROS and ROS2-based 2D Human-Robot Interface Development},
  year = {2021},
  booktitle = {2021 European Conference on Mobile Robots (ECMR)},
}

QML ROS2 Plugin

Connects QML user interfaces to the Robot Operating System 2 (ROS2). For the ROS 1 version click here.
Please be aware that this loses some of the semantic information that the type of a message would normally provide.

Currently, has support for the following:
Logging, Publisher, Subscription, ImageTransportSubscription, Service client, ActionClient, TfTransform, Ament index and querying topics

License: MIT

https://github.com/StefanFabian/qml_ros2_plugin/assets/2090520/c45280cf-24fe-4ff1-8423-30035deda10d

This demo interface uses Tf and a velocity publisher to control and display the turtle demo with less than 200 lines of code for the entire interface. It is available in the examples folder as turtle_demo_control.qml.

Note: For full examples including ROS init calls and shutdown handling checkout the examples directory.

Logging

Logging is supported and correctly reports from which qml file and line the message came!

import Ros2 1.0

Item {
  function doesWork() {
    Ros2.debug("A debug message")
    // Set the logging level to Debug (default is usually Info)
    Ros2.getLogger().setLoggerLevel(Ros2LoggerLevel.Debug);
    Ros2.debug("A debug message that is actually logged.")
    Ros2.info("I have some information")
    Ros2.warn("This is the last warning")
    Ros2.error("Great! Now there's an error.")
    Ros2.fatal("I'm dead")
    Ros2.info("Just so you know, fatal does not kill a node. Though they usually die after logging fatal")
  }
  // ...
}

Subscribers

Can be used to create a Subscription to any topic and message type that is available on your system.
The type does not need to be known at the time of compilation.

Usage example:

import Ros2 1.0

Item {
  width: 600
  height: 400
  
  Subscription {
    id: subscriber
    topic: "/test"
    onNewMessage: textField.text = message.data 
  }
  
  Text {
    text: "You can use the message directly: " + subscriber.message.data
  }
  
  Text {
    id: textField
    text: "Or you can use the newMessage signal."
  }
}

Image Transport

Can be used to stream camera images. The default transport used is “compressed”.
The stream is exposed to QML as a QObject with a QAbstractVideoSurface based videoSurface property (see QML VideoOutput docs) and can be used directly as source for the VideoOutput control.

Multiple ImageTransportSubscribers for the same topic share a subscription to ensure the image is converted to a QML compatible format only once. Additionally, a throttleRate property allows to throttle the camera rate by subscribing for one frame and shutting down again at the given rate (see documentation).

File truncated at 100 lines see the full file

Repo symbol

qml_ros2_plugin repository

qml_ros2_plugin

Repository Summary

Checkout URI https://github.com/StefanFabian/qml_ros2_plugin.git
VCS Type git
VCS Version master
Last Updated 2025-06-20
Dev Status DEVELOPED
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
qml_ros2_plugin 1.25.2

README

Quality Gate Status Maintainability Rating Reliability Rating Security Rating Documentation Status

Scientific Works

If you are using this module in a scientific context, feel free to cite this paper:

@INPROCEEDINGS{fabian2021hri,
  author = {Stefan Fabian and Oskar von Stryk},
  title = {Open-Source Tools for Efficient ROS and ROS2-based 2D Human-Robot Interface Development},
  year = {2021},
  booktitle = {2021 European Conference on Mobile Robots (ECMR)},
}

QML ROS2 Plugin

Connects QML user interfaces to the Robot Operating System 2 (ROS2). For the ROS 1 version click here.
Please be aware that this loses some of the semantic information that the type of a message would normally provide.

Currently, has support for the following:
Logging, Publisher, Subscription, ImageTransportSubscription, Service client, ActionClient, TfTransform, Ament index and querying topics

License: MIT

https://github.com/StefanFabian/qml_ros2_plugin/assets/2090520/c45280cf-24fe-4ff1-8423-30035deda10d

This demo interface uses Tf and a velocity publisher to control and display the turtle demo with less than 200 lines of code for the entire interface. It is available in the examples folder as turtle_demo_control.qml.

Note: For full examples including ROS init calls and shutdown handling checkout the examples directory.

Logging

Logging is supported and correctly reports from which qml file and line the message came!

import Ros2 1.0

Item {
  function doesWork() {
    Ros2.debug("A debug message")
    // Set the logging level to Debug (default is usually Info)
    Ros2.getLogger().setLoggerLevel(Ros2LoggerLevel.Debug);
    Ros2.debug("A debug message that is actually logged.")
    Ros2.info("I have some information")
    Ros2.warn("This is the last warning")
    Ros2.error("Great! Now there's an error.")
    Ros2.fatal("I'm dead")
    Ros2.info("Just so you know, fatal does not kill a node. Though they usually die after logging fatal")
  }
  // ...
}

Subscribers

Can be used to create a Subscription to any topic and message type that is available on your system.
The type does not need to be known at the time of compilation.

Usage example:

import Ros2 1.0

Item {
  width: 600
  height: 400
  
  Subscription {
    id: subscriber
    topic: "/test"
    onNewMessage: textField.text = message.data 
  }
  
  Text {
    text: "You can use the message directly: " + subscriber.message.data
  }
  
  Text {
    id: textField
    text: "Or you can use the newMessage signal."
  }
}

Image Transport

Can be used to stream camera images. The default transport used is “compressed”.
The stream is exposed to QML as a QObject with a QAbstractVideoSurface based videoSurface property (see QML VideoOutput docs) and can be used directly as source for the VideoOutput control.

Multiple ImageTransportSubscribers for the same topic share a subscription to ensure the image is converted to a QML compatible format only once. Additionally, a throttleRate property allows to throttle the camera rate by subscribing for one frame and shutting down again at the given rate (see documentation).

File truncated at 100 lines see the full file

Repo symbol

qml_ros2_plugin repository

qml_ros2_plugin

Repository Summary

Checkout URI https://github.com/StefanFabian/qml_ros2_plugin.git
VCS Type git
VCS Version master
Last Updated 2025-06-20
Dev Status DEVELOPED
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
qml_ros2_plugin 1.25.2

README

Quality Gate Status Maintainability Rating Reliability Rating Security Rating Documentation Status

Scientific Works

If you are using this module in a scientific context, feel free to cite this paper:

@INPROCEEDINGS{fabian2021hri,
  author = {Stefan Fabian and Oskar von Stryk},
  title = {Open-Source Tools for Efficient ROS and ROS2-based 2D Human-Robot Interface Development},
  year = {2021},
  booktitle = {2021 European Conference on Mobile Robots (ECMR)},
}

QML ROS2 Plugin

Connects QML user interfaces to the Robot Operating System 2 (ROS2). For the ROS 1 version click here.
Please be aware that this loses some of the semantic information that the type of a message would normally provide.

Currently, has support for the following:
Logging, Publisher, Subscription, ImageTransportSubscription, Service client, ActionClient, TfTransform, Ament index and querying topics

License: MIT

https://github.com/StefanFabian/qml_ros2_plugin/assets/2090520/c45280cf-24fe-4ff1-8423-30035deda10d

This demo interface uses Tf and a velocity publisher to control and display the turtle demo with less than 200 lines of code for the entire interface. It is available in the examples folder as turtle_demo_control.qml.

Note: For full examples including ROS init calls and shutdown handling checkout the examples directory.

Logging

Logging is supported and correctly reports from which qml file and line the message came!

import Ros2 1.0

Item {
  function doesWork() {
    Ros2.debug("A debug message")
    // Set the logging level to Debug (default is usually Info)
    Ros2.getLogger().setLoggerLevel(Ros2LoggerLevel.Debug);
    Ros2.debug("A debug message that is actually logged.")
    Ros2.info("I have some information")
    Ros2.warn("This is the last warning")
    Ros2.error("Great! Now there's an error.")
    Ros2.fatal("I'm dead")
    Ros2.info("Just so you know, fatal does not kill a node. Though they usually die after logging fatal")
  }
  // ...
}

Subscribers

Can be used to create a Subscription to any topic and message type that is available on your system.
The type does not need to be known at the time of compilation.

Usage example:

import Ros2 1.0

Item {
  width: 600
  height: 400
  
  Subscription {
    id: subscriber
    topic: "/test"
    onNewMessage: textField.text = message.data 
  }
  
  Text {
    text: "You can use the message directly: " + subscriber.message.data
  }
  
  Text {
    id: textField
    text: "Or you can use the newMessage signal."
  }
}

Image Transport

Can be used to stream camera images. The default transport used is “compressed”.
The stream is exposed to QML as a QObject with a QAbstractVideoSurface based videoSurface property (see QML VideoOutput docs) and can be used directly as source for the VideoOutput control.

Multiple ImageTransportSubscribers for the same topic share a subscription to ensure the image is converted to a QML compatible format only once. Additionally, a throttleRate property allows to throttle the camera rate by subscribing for one frame and shutting down again at the given rate (see documentation).

File truncated at 100 lines see the full file

Repo symbol

qml_ros2_plugin repository

qml_ros2_plugin

Repository Summary

Checkout URI https://github.com/StefanFabian/qml_ros2_plugin.git
VCS Type git
VCS Version master
Last Updated 2025-06-20
Dev Status DEVELOPED
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
qml_ros2_plugin 1.25.2

README

Quality Gate Status Maintainability Rating Reliability Rating Security Rating Documentation Status

Scientific Works

If you are using this module in a scientific context, feel free to cite this paper:

@INPROCEEDINGS{fabian2021hri,
  author = {Stefan Fabian and Oskar von Stryk},
  title = {Open-Source Tools for Efficient ROS and ROS2-based 2D Human-Robot Interface Development},
  year = {2021},
  booktitle = {2021 European Conference on Mobile Robots (ECMR)},
}

QML ROS2 Plugin

Connects QML user interfaces to the Robot Operating System 2 (ROS2). For the ROS 1 version click here.
Please be aware that this loses some of the semantic information that the type of a message would normally provide.

Currently, has support for the following:
Logging, Publisher, Subscription, ImageTransportSubscription, Service client, ActionClient, TfTransform, Ament index and querying topics

License: MIT

https://github.com/StefanFabian/qml_ros2_plugin/assets/2090520/c45280cf-24fe-4ff1-8423-30035deda10d

This demo interface uses Tf and a velocity publisher to control and display the turtle demo with less than 200 lines of code for the entire interface. It is available in the examples folder as turtle_demo_control.qml.

Note: For full examples including ROS init calls and shutdown handling checkout the examples directory.

Logging

Logging is supported and correctly reports from which qml file and line the message came!

import Ros2 1.0

Item {
  function doesWork() {
    Ros2.debug("A debug message")
    // Set the logging level to Debug (default is usually Info)
    Ros2.getLogger().setLoggerLevel(Ros2LoggerLevel.Debug);
    Ros2.debug("A debug message that is actually logged.")
    Ros2.info("I have some information")
    Ros2.warn("This is the last warning")
    Ros2.error("Great! Now there's an error.")
    Ros2.fatal("I'm dead")
    Ros2.info("Just so you know, fatal does not kill a node. Though they usually die after logging fatal")
  }
  // ...
}

Subscribers

Can be used to create a Subscription to any topic and message type that is available on your system.
The type does not need to be known at the time of compilation.

Usage example:

import Ros2 1.0

Item {
  width: 600
  height: 400
  
  Subscription {
    id: subscriber
    topic: "/test"
    onNewMessage: textField.text = message.data 
  }
  
  Text {
    text: "You can use the message directly: " + subscriber.message.data
  }
  
  Text {
    id: textField
    text: "Or you can use the newMessage signal."
  }
}

Image Transport

Can be used to stream camera images. The default transport used is “compressed”.
The stream is exposed to QML as a QObject with a QAbstractVideoSurface based videoSurface property (see QML VideoOutput docs) and can be used directly as source for the VideoOutput control.

Multiple ImageTransportSubscribers for the same topic share a subscription to ensure the image is converted to a QML compatible format only once. Additionally, a throttleRate property allows to throttle the camera rate by subscribing for one frame and shutting down again at the given rate (see documentation).

File truncated at 100 lines see the full file

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository

Repo symbol

qml_ros2_plugin repository