Code Monkey home page Code Monkey logo

rclnet's People

Contributors

noelex avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar

rclnet's Issues

No Rosidl.Messages.Rosbag2StorageMcapTestdata.BasicIdl for ComplexMsgDependsOnIdl

I ran ros2cs on my C:\dev\SmplROS2dNET2\ros2cs.spec without any package exclusions. After it processed 32 packages and 287 message definitions, VS2022 gave me 430+ errors of type "CS0227 Unsafe code may only appear if compiling with /unsafe". I took the quick action's advice to allow the project to use unsafe code, but now I still have 5 errors of "CS0234 The type or namespace name 'BasicIdl' does not exist in the namespace 'Rosidl.Messages.Rosbag2StorageMcapTestdata' (are you missing an assembly reference?)". All 5 errors are in C:\dev\SmplROS2dNET2\Rosbag2StorageMcapTestdata\Messages\ComplexMsgDependsOnIdl.cs, which I assume it generated from C:\dev\ros2_humble(\ros2-windows)\share\rosbag2_storage_mcap_testdata\msg\ComplexMsgDependsOnIdl.idl. IntelliSense confirms that Rosbag2StorageMcapTestdata in fact does not have BasicIdl as a member, even with my project including the Rcl.NET (1.3.2) package. I may be able to remove C:\dev\SmplROS2dNET2\Rosbag2StorageMcapTestdataC:\dev\SmplROS2dNET2\Rosbag2StorageMcapTestdata from my project, but this should probably be addressed nonetheless. Thanks...

Can't avoid exceptions running examples from Visual Studio

I can build the C:\dev\rclnet-1.3.1\examples\RclExamples.sln solution in Visual Studio 2022, but setting the starting project to fake_clock and running in Debug mode, the following line in C:\dev\rclnet-1.3.1\src\Rcl.NET\RclContext.cs (#30) gets the following exception:

private SpinLock _handleLock = new(), _callbackLock = new();

System.TypeInitializationException: 'The type initializer for 'Rcl.RclContext' threw an exception.'
DllNotFoundException: Unable to load DLL 'rcutils' or one of its dependencies: The specified module could not be found. (0x8007007E)
This exception was originally thrown at this call stack:
System.Runtime.InteropServices.NativeLibrary.LoadLibraryByName(string, System.Reflection.Assembly, System.Runtime.InteropServices.DllImportSearchPath?, bool) in NativeLibrary.cs

I then try to add solution or project references to one of these DLLs:

  • C:\dev\ros2_humble\ros2-windows\bin\rcutils.dll
  • C:\dev\ros2_humble\bin\rcutils.dll

...but each time I browse to the DLL and hit "OK", I'm told the reference is invalid or unsupported. How can I fix this? Thanks...

IRclNode Context property is concrete

I was setting up a "Fake" Rcl system so that I can at least launch my GUI without having ROS installed. I got almost all the way to the end before I realized that the "Context" property on my "FakeNode" is being called by the Rcl library itself. But since I can't construct a RclContext without having ROS installed I'm right back where I started.

I'm sure there's a good reason why not...but can the type of the Context property be IRclContext instead of RclContext?

System.TypeInitializationException on new RclContext

Attempting a simple program utilizing Rcl classes. My Program.cs:

using Rcl;

// Must add "somewhere in the source code of the project"
[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Console.WriteLine("Hello, World!  Today we're going to communicate over ROS2 using .NET.  Aren't you excited?!");
var whatToDo = Console.ReadLine();

if (whatToDo != null) {
  if (whatToDo.StartsWith("T", StringComparison.CurrentCultureIgnoreCase)) {
    // Talker
    await using var ctx = new RclContext(args);                       // EXCEPTION THROWN HERE
    using var node = ctx.CreateNode("SmplROS2dNET2");
    using var pub = node.CreatePublisher<Rosidl.Messages.Example.String>("/smpl");
    Console.WriteLine("Enter anything to publish a one-word message...");
    // User echos topic in another command window, enters letter, presses "Enter"...
    Console.ReadLine();
    pub.Publish(new Rosidl.Messages.Example.String("Published. "));
  } else if (whatToDo.StartsWith("L", StringComparison.CurrentCultureIgnoreCase)) {
    //TODO: listener
  }
}

At the line noted above, an exception happens, showing this information:

System.TypeInitializationException: 'The type initializer for 'Rcl.RclContext' threw an exception.'
Inner Exception: DllNotFoundException: Unable to load DLL 'rcutils' or one of its dependencies: The specified module could not be found. (0x8007007E)
This exception was originally thrown at this call stack:
System.Runtime.InteropServices.NativeLibrary.LoadLibraryByName(string, System.Reflection.Assembly, System.Runtime.InteropServices.DllImportSearchPath?, bool) in NativeLibrary.cs
Rcl.RclContext.RclContext()

I tried adding one of these two dependencies...

  • C:\dev\ros2_humble\ros2-windows\bin\rcutils.dll
  • C:\dev\ros2_humble\bin\rcutils.dll

...but each time I browse to the DLL and hit "OK", I'm told the reference is invalid or unsupported.

Finally, since rclnet does not support IDLs currently, will I run into more trouble trying to use Rosidl.Messages.Example classes? Thanks...

Need info on rosdep alternative for Windows

I'm trying to get ROS2 working in .NET apps in Windows, and I'm attempting to follow the instructions on installing dependencies so the examples can be run. I understand Windows does not support rosdep, and the dependencies will need to be installed manually. What does that procedure look like? Thanks...

ros2cs on .spec file gets "Unable to parse field defined as 'FieldDeclaration'..."

I'm trying to follow the instructions, but when I get to the part about running the ros2cs utility on the ros2cs.spec file in my Visual Studio project, I see in both the admin command prompt, admin PowerShell:

Searching in directory: C:\dev\ROS2cs\install
Searching in directory: C:\dev\ros2_humble
Unable to parse field defined as 'FieldDeclaration { Type = bool, Identifier = bool_values_default, Value = [false, true, false], IsArray = True, ArrayLength = 3, InlineComment = , IsUpperBounded = False }': Unexpected boolean value ' true'.

I also ran it from both kinds of command prompts available from Visual Studio 2022, which failed the same way after the "install" line. I can't find much about this online, closest is something about JavaScript. Which bit of code is this and what could be happening? Thanks...

Sometimes publish does not get it right

I am creating an API to publish to "/goal_pose" but I don't understand why sometimes it fails to publish and nothing happens while the task is being completed correctly.


public static bool SetGoalPose(float x1, float y1, float orientation)
{
  ILogger logger = LoggerHelper.Logger;
  bool result = false;
  try
  {
//ros2node only generates rclContext
    using (Ros2Node ros2Node = new Ros2Node(NODE_NAME))
    {
		PoseStamped poseStamped = new PoseStamped(new Header(new ROS2Messages.Builtin.Time(DateTime.UtcNow.Second, (uint)DateTime.UtcNow.Nanosecond)));
	    poseStamped.Pose.Position.X = x1;
	    poseStamped.Pose.Position.Y = y1;
	    poseStamped.Pose.Orientation = CalculateQuaternionRos(orientation);
	    poseStamped.Header.FrameId = "map";
		if (ros2Node == null)
		{
		  return false;
		}
		ValueTask valueTask = ros2Node.PublishAsync<PoseStamped>(poseStamped);
		bool complete = valueTask.AsTask().Wait(WAIT_TIMEOUT);
		if (!complete)
		{
		  throw new Exception($"API TIME OUT: [{WAIT_TIMEOUT}]");
		}
		if (valueTask.IsCompletedSuccessfully)
		{
		  logger.LogInformation("SetGoalPose => Service call finished with [IsCompletedSuccessfully]");
		  return true;
		}                                                            
		else if (valueTask.IsCompleted)                              
		{                                                            
		  logger.LogInformation("SetGoalPose => Service call finished with [IsCompleted]");
		  result = true;
		}
		else if (valueTask.IsFaulted)
		{
		  logger.LogInformation("SetGoalPose => Service call finished with [IsFaulted]");
		  result = false;
		}
		else if (valueTask.IsCanceled)
		{
		  logger.LogInformation("SetGoalPose => Service call finished with [IsCanceled]");
		  result = false;
		}
		else
		{
		  logger.LogInformation("SetGoalPose => Service call finished with unknow state");
		  result = false;
		}
    }
  } catch (Exception e)
  {
    logger.LogError("SetGoalPose => Exception setting goal pose [{0}]",e.Message);
    throw new Exception($"SetGoalPose[{NODE_NAME}] => See the logs. Exception [{e.Message}]", e);
  }
  return result;
}


//method from Ros2Node
  public async ValueTask PublishAsync<T>(T aMessage)
  {
    try
    {
      _theLogger.LogInformation("PublishAsync[{0}] => Starting publisher [{1}]", _theName, _theTopicName);
      await _thePublisher.PublishAsync(aMessage);
      _theLogger.LogInformation("Publish[{0}] => Publisher's inner task finished", _theName);
    }
    catch (Exception e)
    {
      throw new Exception($"Publish[{_theName}] => See the logs. Exception [{e.Message}]", e);
    }
    finally
    {
    }
  }

The logs always show "Service call finished with [IsCompletedSuccessfully]" but sometimes it doesn't publish anything because I'm looking with ros2 topic echo echo /goal_pose and it doesn't show what it supposedly just published.
Does anyone know what could be going on here?

Update: (https://answers.ros.org/question/65774/publisher-not-publishing-on-topic/) I am reading that when working in c++ sometimes a publisher fails because it is not yet connected to the corresponding subscriber. Is it possible that my error is similar to that? Is it possible to wait for that connection?

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.