Code Monkey home page Code Monkey logo

rclue's Introduction

Basic information

Online documentation

https://rclUE.readthedocs.io/en/devel/

Supported versions

Main support

  • Ubuntu 20.04
  • Unreal Engine 5.1
  • ROS2 Foxy
  • Clang: 13.0.1

Maintenance/experimental

  • ROS2 Humble(UE5_devel_humble branch)
  • UE4.27: 11.0.1
  • Clang: 11.0.1

Please download UE5.1 for Linux by following Unreal Engine for Linux

Branches

  • devel: This build of the plugin is based on ROS2 Foxy and has been tested on Ubuntu 20 and UE5.1.
  • UE5_devel_humble_20.04(experimental): This build of the plugin is based on ROS2 humble and has been tested on Ubuntu 20.04 and UE5.1.
  • UE5_devel_humble(experimental): This build of the plugin is based on ROS2 humble, Ubuntu 22.04 and UE5.1.

Other branches

Experimental and WIP

rclUE and ROS2

Description

  • We use ros2 'foxy' lightweighted (not all binaries are included). Source/ThirdParty/ros folder is fully autogenerated by UE_tools
  • ros includes UE_msgs
  • UE uses centimeters but ROS uses meters. Please convert manually or use URRConversionUtils in RapyutaSimulationPlugins
  • within the Unreal Editor: Edit->Plugins, search and enable for rclc

Windows is currently unsupported

Getting Started

The plugin folder contains a video "Example_BP_PubSub.mp4" demonstrating how to setup a PubSub example in Blueprint.

An example setup using this plugin can be found at turtlebot3-UE

Notes on working with ROS 2 and UE

  • rcl and void* types cannot be managed by UE (no UPROPERTY) and therefore can't be used directly in Blueprint. Whenever access to these variables is needed, the user should write a class to wrap it and all of their handling must be done in C++.
  • some basic numerical types are not natively supported in Blueprint (e.g. double, unsigned int). In order to use these, a workaround is needed (a plugin implementing those types for BP, a modified UE or a custom implementation).
  • In autogenerated messages, the method MsgToString() should be implemented by the user as its current purpose is to help debugging.

How to update ROS inside RclUE

Currently there is a scripts in UE_tools to automatically build and update ROS2 libraries. Please follow steps

Install pre-commit

Please install pre-commit before commiting your changes. Follow this instruction https://pre-commit.com/

then run

pre-commit install

Documentation

Tools

documentation is built with three tools

Locally build

  1. install tools in #tools section.
  2. build
    cd docs
    make --always-make html
    
  3. Open following in your browser.
    • Sphinx at file:///<path to cloned repo>/docs/source/_readthedocs/html/index.html
    • Original doxygen output at file:///<path to cloned repo>/docs/source/_readthedocs/html/doxygen_generated/html/index.html

Maintainer

[email protected]

rclue's People

Contributors

arturocuma avatar cconti-rr avatar chalice-graeme avatar github-actions[bot] avatar james-yoo avatar tetorea avatar vilkun avatar yuokamoto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rclue's Issues

rosidl_typesupport_cpp is not supported

following error happen for first ros2 node but that node can continue working. It seems ros2 node is working, this is not blocking

>>> [rcutils|error_handling.c:108] rcutils_set_error_state()
This error state is being overwritten:

  'rcl node implementation is invalid, at /home/admin/UE_tools/ros2_ws/src/ros2/rcl/rcl/src/rcl/node.c:414'

with this new error message:

  'Handle's typesupport identifier (rosidl_typesupport_cpp) is not supported by this library, at ./src/type_support_dispatch.hpp:111'

rcutils_reset_error() should be called after error handling to avoid this.
<<<

RTPS errors while running humble

A similar error has been mentioned in #74

I'm getting similar error regarding fastrtps now as well. The project starts but no topic is published.
After running the running command I get

2023-01-05 15:23:58.290 [RTPS_PARTICIPANT Error] Discovery Server wasn't able to allocate the specified listening port. -> Function createParticipant
2023-01-05 15:23:58.291 [DOMAIN_PARTICIPANT Error] Problem creating RTPSParticipant -> Function enable

the command fastdds discovery -i 0 is returning this error. I think this is what leads to no topic being published once unreal started.

Inquiring About Integration Method for NVIDIA ISAAC ROS's isaac_ros_visual_slam with rapyuta-robotics/rclUE

Overview

  • I am interested in integrating the NVIDIA ISAAC ROS's isaac_ros_visual_slam component into the rclUE package, which connects Unreal Engine 5 with ROS2.
  • isaac_ros_visual_slam provides SLAM (Simultaneous Localization and Mapping) capabilities, and I am particularly interested in its application within the real-time 3D environment of Unreal Engine.

Objective

  • My goal is to implement SLAM functionalities within the Unreal Engine simulation environment to achieve advanced robot navigation and environmental perception.
  • By integrating isaac_ros_visual_slam, I aim to seamlessly combine robot operations in Unreal Engine with ROS2 functionalities.

Questions

  1. What is the best approach to integrate isaac_ros_visual_slam into rclUE?
  2. Are there any specific dependencies or configurations that I should be aware of?
  3. How might isaac_ros_visual_slam impact data exchange between Unreal Engine and ROS2?

Additional Information

  • Please provide details of your current development environment, including the versions of Unreal Engine 5 and ROS2 you are using.
  • Insights from other users or developers who have experience with isaac_ros_visual_slam would be highly appreciated.

Using ROS2 Humble

Hi Rapyuta-robotics team,

I was wondering whether ROS2 Humble is or will be supported since it is next LTS version of ROS2 and Foxy is approaching EOL date.

Custom Ros Msg generated not showing when ros2 topic list

Hi, thank you for maintaining this repository for using ros2 in UE5.

Our team has used UE5.1 and ros2 foxy for our project.

In the project, we should use a custom ros msg, so we used UE_tools to generate the custom msg.

It worked well, so we used the custom msg in the UE project, and we published the topic based on the custom msg using publisher blueprint.

However, it did not show the topic published by the blueprint when we used a ros2 command ros2 topic list in a terminal.

Otherwise, when we published the topic with ros2 basic msg (e.g. twist), it showed the topic on a terminal using a ros2 command ros2 topic list .

Furthermore, it also showed the publisher node when we used a ros2 command ros2 node list in a terminal.

How can I solve this issue?

UE5 support?

Hi Rapyuta-robotics team,

EpicGames officially released UE5 recently. Do you have plan to support UE5 version?

Android Support

Is there any way to include this plugin with android build? Do I need to recompile ROS libraries?
Can someone please give me a step-wise process to make it compatible?
Thanks!

Windows 10

Do you have a plan to support windows 10? Unreal Engine 5 has many useful functions (Nanite, Lumen, etc) which are supported only by Windows OS. Currently ROS2 supports windows 10, not windows 11. I hope you to support windows 10.

Only works when ROS_DOMAIN_ID is zero

Hi Rapyuta team,

Currently, this plugin only works under default ROS_DOMAIN_ID(e.g. zero).
When I changed to value other than zero, topics or nodes are not output as follow.

$ export ROS_DOMAIN_ID=10
$ ros2 topic list
/parameter_events
/rosout

Can't publish string to ROS2 outside of Unreal

Hi!

I'm having some trouble getting the topic I'm publishing on from inside Unreal to reach outside Unreal to a terminal on my main system.

Some info:
Ubuntu 22.04
Unreal 5.1 built from source
ROS2 humble

If I make a subscriber in Unreal it seems to receive what is published from the publisher in Unreal though.

The terminal just looks like this:

ros2 topic list
/parameter_events
/rosout

Any ideas as to what the problem could be?

Here is the code for the publisher (but I don't think the code is actually the issue):

TestPublisher.h

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"

#include "Msgs/ROS2Str.h"
#include <ROS2Publisher.h>

#include "TestPublisher.generated.h"



UCLASS()
class FIRSTUNREALPROJECT_API ATestPublisher : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ATestPublisher();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
        UROS2NodeComponent* Node = nullptr;

        UPROPERTY(EditAnywhere, BlueprintReadWrite)
        UROS2Publisher* Publisher = nullptr;
	
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
        FString TopicName = TEXT("test_topic");

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
        FString Message = TEXT("Hello from C++");

private:

	void PublishMessage();

	FTimerHandle TimerHandle;
};

TestPublisher.cpp

#include "TestPublisher.h"


// Sets default values
ATestPublisher::ATestPublisher()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	Node = CreateDefaultSubobject<UROS2NodeComponent>(TEXT("ROS2NodeComponent"));

	Node->Name = TEXT("subscriber_node");
}

// Called when the game starts or when spawned
void ATestPublisher::BeginPlay()
{
	Super::BeginPlay();
	Node->Init();

	Publisher = Node->CreatePublisher(TopicName, UROS2Publisher::StaticClass(), UROS2StrMsg::StaticClass(), UROS2QoS::KeepLast);
	
	FROSStr msg;
        msg.Data = FString::Printf(TEXT("%s from non loop publisher"), *Message);
        CastChecked<UROS2StrMsg>(Publisher->TopicMessage)->SetMsg(msg);

	GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &ATestPublisher::PublishMessage, 1.0, true);
}

// Called every frame
void ATestPublisher::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

void ATestPublisher::PublishMessage()
{
	UE_LOG(LogTemp, Warning, TEXT("Publishing message"));
	Publisher->Publish();
}

How are generated libue_msgs_rosidl_*.so

Hi, I am trying to port this plugin to unreal 5.1 using ros humble and while updating .so files I found these libue_msgs_rosidl lib and was wondering where they were coming from. How can I generate them ?

Error - How to add this plugin to an Unreal Engine 4 project (Ubuntu 20):

Hi
Could you please add some additional points here: "How to add this plugin to an Unreal Engine 4 project (Ubuntu 20):" ?
Questions:

  • Where to add the shell script? Do we need to create a file ? or ?

I am getting an error! "Unable to compile because the built modules are out of date"
Can you please help me solve issue ?

error - rcl node implementation is invalid

Hi @yuokamoto,
I am currently testing under following condition:

  • Ubuntu 22.04
  • UE 5.1
  • turtlebot3-UE(branch: devel)
  • rclUE(branch: UE5_humble_devel_22.04)
  • RapyutaSimulationPlugins(branch: devel)

When I start simulation(level: turtlebot3_benchmark), I can see following topics:

$ ros2 topic list
/clock
/cmd_vel
/joint_states
/odom
/parameter_events
/rosout
/scan
/tf

However, I cannot receive the topic data and I found the following error on the terminal.

>>> [rcutils|error_handling.c:108] rcutils_set_error_state()
This error state is being overwritten:

  'rcl node implementation is invalid, at /home/admin/UE_tools/ros2_ws/src/ros2/rcl/rcl/src/rcl/node.c:414'

with this new error message:

  'Handle's typesupport identifier (rosidl_typesupport_cpp) is not supported by this library, at /home/admin/UE_tools/ros2_ws/src/ros2/rosidl_typesupport/rosidl_typesupport_cpp/src/type_support_dispatch.hpp:113'

rcutils_reset_error() should be called after error handling to avoid this.
<<<

Any suggestion on resolve this issue?

Warning: dlopen failed: libpython3.8.so.1.0: cannot open shared object file: No such file or directory

after running ./run_editor.sh /home/crossing/Documents/Unreal\ Projects/turtlebot3-UE\ 5.0 /home/crossing/UnrealEngine/Engine/Binaries/Linux/UnrealEditor

I am getting this error :

LogPixelStreaming: Initialising Pixel Streaming settings.
LogAudio: Display: Registering Engine Module Parameter Interfaces...
LogMetasoundEngine: MetaSound Engine Initialized
LogPython: Using Python 3.9.7
LogCore: Warning: dlopen failed: libpython3.8.so.1.0: cannot open shared object file: No such file or directory

However the only version of python installed on my computer is 3.10.6 , is there a way to upgrade the dependancy of the file ? If so, which file are we looking at and how is it even able to find python 3.9.7 ?

QoS profiles available in the plugin

Hi, I'm using the plugin and I need fast communication in my publishers and subscribers. I have seen that there are different QoS profiles available in the plugin that appear in the ROS2 documentation: Default, Services, Sensor Data, Parameters and System Default. However, there are other options available such as: ClockPub, StaticBroadcaster, DynamicBroadcaster, UnknowQoS which are not defined. Could you specify what is the behavior of these profiles or point me to the documentation that describes these profiles? Thanks.

C-linkage specified, but returns incomplete type 'rcl_action_server_t' which could be incompatible with C

While compiling the u5_devel_humble, I am prompted many errors that looks like the following :

/home/crossing/Documents/Unreal Projects/turtlebot3-UE/Plugins/rclUE/ThirdParty/ros/include/rcl_action/rcl_action/action_server.h:70:25: error: 'rcl_action_get_zero_initialized_server' has C-linkage specified, but returns incomplete type 'rcl_action_server_t' which could be incompatible with C [-Werror,-Wreturn-type-c-linkage]
    rcl_action_server_t rcl_action_get_zero_initialized_server(void);

The .h and .so I am using are the one already generated.
Is it a mismatch between .so and .h files ?

UE4 Engine Version

May I know the UE4 engine version for the compatibility of this plugin?

Make RosFluidPressure: Missing Connector for pressure and variance

Screenshot from 2024-04-04 10-48-04
The Connector to set the Pressure is missing in the Blueprint Node.
Is there an option i missed out or is this an bug?
I'm using UE 5.3.2 and tired the devel and UE 5.3 branch of this repo. ROS2 version is Humble.
For the IMU Message the node has all its connectors.
Thanks!

Timestamp is not accurate

Hi rapyuta-robotics team,

I am testing rclUE plugin with a example video clip you provided. I have set topic(clock msg) publish rate to 100Hz but I could not get correct timestamp. So I checked a video clip once again, it also showed inaccurate timestamp as below:
clock_example

I would like to know how to deal with this issue because accurate timestamp is very important in my application.

TF2 API availability

Looking through the documentation there is no mention of TF in rclUE. Is there a way to use lookupTransform() API?

Inquiry About Recommended VSLAM Solutions for ROS2

I am currently interested in capturing camera imagery from a turtlebot using ROS2 and implementing VSLAM (Visual Simultaneous Localization and Mapping). In this context, do you have any recommendations for VSLAM solutions that work well with ROS2?

I am particularly looking for advice or recommendations on VSLAM software that efficiently processes video data from a turtlebot’s camera and facilitates real-time environmental mapping and navigation.

I would greatly appreciate any insights based on your expertise, as well as experiences with VSLAM in a ROS2 environment. Additionally, if there are any resources or documentation related to VSLAM with ROS2 that you could share, that would be immensely helpful.

Looking forward to your response and thank you in advance for your assistance

rclc_support_init looking for what looks like hardcoded path

I am getting this error on launch every time

[rclc]: [rclc_support_init] Error in rcl_init_options_init: failed to load shared library '/opt/ros/humble/lib/librmw_fastrtps_cpp.so' due to LoadLibrary error: libtinyxml2.so.6: cannot open shared object file: No such file or directory, at /home/yu/UE_tools/BuildROS2/ros2_ws/src/ros2/rcutils/src/shared_library.c:84, at /home/yu/UE_tools/BuildROS2/ros2_ws/src/ros2/rmw_implementation/rmw_implementation/src/functions.cpp:84, at /home/yu/UE_tools/BuildROS2/ros2_ws/src/ros2/rcl/rcl/src/rcl/init_options.c:61

It looks like there is some hardcoded path somewhere. I couldn't find it within the code. I'll try regenerating all the .so files using UE_tools.

Usage without a fixed framerate

Hello,
I'm using this Plugin with ROS Humble / Unreal 5.3.2 and it works very nicely. Thank you for that!

I wonder if it's possible to run a project without the FixedFramerate constraint. In certain cases I'd like to be live and not in simulation time, dropping frames instead of slowing down. Also the synchronization mecanisms is pretty hard on the performance, the same scene in another project is much faster.

Is there a way to disable this behaviour?

License?

Currently trying out rclUE. So far so good. Nice work and thank you for sharing.

Q: What license is rclUE?

Perhaps add a LICENSE file to this project? (and other rapyuta repo's as well)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.