ros2-dotnet / ros2_dotnet Goto Github PK
View Code? Open in Web Editor NEW.NET bindings for ROS2
License: Apache License 2.0
.NET bindings for ROS2
License: Apache License 2.0
The build instructions for Windows and Linux Desktop aren't ideal -- in particular on these platforms it shouldn't be necessary to compile the entire distribution. Rather, set the project up as an overlay workspace on top of an existing ROS2 installation.
For example, look at how the rust language bindings operate: They only build the core binding package itself, plus any relevant packages containing message IDLs (for message type generation): https://github.com/esteve/ros2_rust
I really don't know which environment info to add here, this is Win10 / VS 2019
C:\Users\glmne>dotnet --version
3.1.201
I follow the guide of ros2_eloquent build, everything is ok, then I follow the readme, except that I use @fmrico command to build #53 (comment)
It builds ok, however when I run
`ros2 run rcldotnet_examples rcldotnet_listener``
I get
C:\Users\glmne>call \dev\ros2_dotnet_ws\install\local_setup.bat
C:\Users\glmne>ros2 run rcldotnet_examples rcldotnet_listener
Failed to load entry point 'info': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'send_goal': No module named 'rosidl_runtime_py'
Failed to load entry point 'show': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'package': No module named 'rosidl_runtime_py'
Failed to load entry point 'packages': No module named 'rosidl_runtime_py'
Failed to load entry point 'proto': No module named 'rosidl_runtime_py'
Failed to load entry point 'show': No module named 'rosidl_runtime_py'
Failed to load entry point 'get': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'nodes': No module named 'rosidl_runtime_py'
Failed to load entry point 'set': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'call': No module named 'rosidl_runtime_py'
Failed to load entry point 'find': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'type': No module named 'rosidl_runtime_py'
Failed to load entry point 'bw': No module named 'rosidl_runtime_py'
Failed to load entry point 'delay': No module named 'rosidl_runtime_py'
Failed to load entry point 'echo': No module named 'rosidl_runtime_py'
Failed to load entry point 'find': No module named 'rosidl_runtime_py'
Failed to load entry point 'hz': No module named 'rosidl_runtime_py'
Failed to load entry point 'info': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'pub': No module named 'rosidl_runtime_py'
Failed to load entry point 'type': No module named 'rosidl_runtime_py'
Multiple executables found:
- C:\dev\ros2_dotnet_ws\install\lib\rcldotnet_examples\rcldotnet_listener.bat
- C:\dev\ros2_dotnet_ws\install\lib\rcldotnet_examples\dotnet\rcldotnet_listener.exe
if I run the first bat:
C:\Users\glmne>C:\dev\ros2_dotnet_ws\install\lib\rcldotnet_examples\rcldotnet_listener.bat
C:\Users\glmne>dotnet C:\dev\ros2_dotnet_ws\install\Lib\rcldotnet_examples\rcldotnet_listener.bat\dotnet\rcldotnet_listener.dll
Could not execute because the specified command or file was not found.
Possible reasons for this include:
* You misspelled a built-in dotnet command.
* You intended to execute a .NET Core program, but dotnet-C:\dev\ros2_dotnet_ws\install\Lib\rcldotnet_examples\rcldotnet_listener.bat\dotnet\rcldotnet_listener.dll does not exist.
* You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.
and the exe works ok, (of course running talker and listener with the exe)
The question issue here really is why I do get all that Failed to load
stuff, and ros itself does not work (even though ros2-dotnet sample do work)
e.g. If I try to list topics, even when the dotnet talker is running I get:
C:\Users\glmne>ros2 topic list
Failed to load entry point 'info': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'send_goal': No module named 'rosidl_runtime_py'
Failed to load entry point 'show': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'package': No module named 'rosidl_runtime_py'
Failed to load entry point 'packages': No module named 'rosidl_runtime_py'
Failed to load entry point 'proto': No module named 'rosidl_runtime_py'
Failed to load entry point 'show': No module named 'rosidl_runtime_py'
Failed to load entry point 'get': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'nodes': No module named 'rosidl_runtime_py'
Failed to load entry point 'set': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'call': No module named 'rosidl_runtime_py'
Failed to load entry point 'find': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'type': No module named 'rosidl_runtime_py'
Failed to load entry point 'bw': No module named 'rosidl_runtime_py'
Failed to load entry point 'delay': No module named 'rosidl_runtime_py'
Failed to load entry point 'echo': No module named 'rosidl_runtime_py'
Failed to load entry point 'find': No module named 'rosidl_runtime_py'
Failed to load entry point 'hz': No module named 'rosidl_runtime_py'
Failed to load entry point 'info': No module named 'rosidl_runtime_py'
Failed to load entry point 'list': No module named 'rosidl_runtime_py'
Failed to load entry point 'pub': No module named 'rosidl_runtime_py'
Failed to load entry point 'type': No module named 'rosidl_runtime_py'
usage: ros2 topic [-h] [--include-hidden-topics]
Call `ros2 topic <command> -h` for more detailed usage. ...
ros2 topic: error: argument Call `ros2 topic <command> -h` for more detailed usage.: invalid choice: 'list' (choose from )
C:\Users\glmne>
if I build ros2_eloquent ros2 list topic
works as expected
Thanks for your time
Win10 and .NET Core 3.1 is installed
Starting >>> rcldotnet_common
--- stderr: rcldotnet_common
CMake Warning (dev) at C:/opt/ros/foxy/x64/Lib/site-packages/cmake/data/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:273 (message):
The package name passed to find_package_handle_standard_args
(DOTNET_CORE) does not match the name of the calling package (DotNetCore).
This can lead to problems in calling code that expects find_package
result variables (e.g., _FOUND
) to follow a certain pattern.
Call Stack (most recent call first):
C:/dev/ros2_dotnet_ws/install/share/dotnet_cmake_module/cmake/Modules/dotnet/FindDotNetCore.cmake:37 (find_package_handle_standard_args)
C:/dev/ros2_dotnet_ws/install/share/dotnet_cmake_module/cmake/Modules/FindCSBuild.cmake:20 (find_package)
C:/dev/ros2_dotnet_ws/install/share/dotnet_cmake_module/cmake/Modules/FindDotNETExtra.cmake:15 (find_package)
CMakeLists.txt:9 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.
Failed <<< rcldotnet_common [8.31s, exited with code 1]
Aborted <<< rosidl_generator_c [10.1s]
Summary: 7 packages finished [28.3s]
1 package failed: rcldotnet_common
1 package aborted: rosidl_generator_c
1 package had stderr output: rcldotnet_common
28 packages not processed
Anybody knows what's going on and how to fix this?
Thanks
I get following build error when trying to build ros2-dotnet. The native ROS2 build was successful. Full build output is attached.
colcon build --merge-install fails with following error:
Starting >>> rcutils
--- stderr: rcutils
CMake Error at CMakeLists.txt:154 (find_package):
By not providing "Findosrf_testing_tools_cpp.cmake" in CMAKE_MODULE_PATH
this project has asked CMake to find a package configuration file provided
by "osrf_testing_tools_cpp", but CMake did not find one.
Could not find a package configuration file provided by
"osrf_testing_tools_cpp" with any of the following names:
osrf_testing_tools_cppConfig.cmake
osrf_testing_tools_cpp-config.cmake
Add the installation prefix of "osrf_testing_tools_cpp" to
CMAKE_PREFIX_PATH or set "osrf_testing_tools_cpp_DIR" to a directory
containing one of the above files. If "osrf_testing_tools_cpp" provides a
separate development package or SDK, be sure it has been installed.
Failed <<< rcutils [ Exited with code 1 ]
After being able to compile for UWP (see #63), now I am trying to have two simple UWP blank programs, one listener, one talker. Following the instructions to add the dlls and the references, the run of such simple programs report error in loading DLLs. (Note that the desktop version and the corresponding examples work on my system.)
I looked at a previous issue that seemed to be related to issue #2 (and specifically a comment on how to debug it #2 (comment)), but the suggestions provided there didn't work for me.
I tried all combinations of the following:
Without that flag, I cannot directly see it from Visual Studio (and running an app via commandline requires some extra steps that I didn't partake yet), and the error is a generic DLL not found for rcldotnet_common.dll. Looking at the dependency graph of lib\rcldotnet_common.dll this is the high level view of the modules:
Any suggestion is welcome: it would be beneficial to have a working UWP blank app example similarly to the desktop version. If I succeed, happy to provide one.
rcldotnet
is (just like rclpy
) built on top of the rcl
layer. This allows for simple bindings to the C API and minimal dependencies/impact from API changes between releases. However, it does mean duplicating a lot of the work (pub/sub/services/actions, executors) ongoing in other higher level client libraries.
Since C# can interop with c++ as well as c, it might be interesting to consider building the bindings on top of rclcpp
instead of rcl
. This might also open up more shared functionalities with other ROS2 packages built on top of the rclcpp layer.
There's also the fairly new rclc
which is a C language implementation, but includes a simplified API and an executor.
Hi
I just want to confirm, is there a way to create an array of a primitive type, for instance an array of bytes, or an array of integers etc?
Stepping into the codes for types like std_msgs.msg.UInt16MultiArray or ByteMultiArray seems to point to unsupported types. Is this true?
The usage would be quite limited without the support of those arrays types ..
Hello @esteve, I have a question concerning the content, when building ros2_dotnet.
I was building ros2_dotnet_uwp without any errors, but after the building process was finished, I compared my content with the content of your release files. I noticed, that my build had quite a lot of files missing, some of whom I need to work on a project.
Just to make sure: this was my build process and I used the x64_x86 Command Prompt
md \dev\ament\src
cd \dev\ament
curl -sk https://raw.githubusercontent.com/esteve/ros2_dotnet/master/ament_dotnet_uwp.repos -o ament_dotnet_uwp.repos
vcs import src < ament_dotnet_uwp.repos
python src\ament\ament_tools\scripts\ament.py build --cmake-args -G "Visual Studio 15 2017 Win64" --
call install\local_setup.bat
cd \dev
md ros2_dotnet_ws\src
cd ros2_dotnet_ws
curl -sk https://raw.githubusercontent.com/esteve/ros2_dotnet/master/ros2_dotnet_uwp.repos -o ros2_dotnet_uwp.repos
vcs import src < ros2_dotnet_uwp.repos
ament build --parallel --cmake-args -G "Visual Studio 15 2017" -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0.14393 -DTHIRDPARTY=ON -DINSTALL_EXAMPLES=OFF -DCMAKE_FIND_ROOT_PATH="\dev\ament \install;\dev\ros2_dotnet_ws\install" --
this is a picture of the content of my install/lib folder:
for example, the folder rcldotnet
and its content that I am dependant on, is absent from my build
I'm not currently a user of ROS on .Net, but I'm really thrilling to find this repo and really appreciate your work! After browsing through the codes, I actually have some thoughts and would like to propose some suggestions for discussion~
First is that the name RCLdotnet
is not confirming to Pascal naming, maybe it's convenient to just call it RCL
or RosClient
.
Another one is that why use UnmanagedFunctionPointer
to load the entry? I guess use DLLImport
will be more straight-forward and it doesn't require such ROS2.Utils
to load dlls.
See #14
Here's how rclpy
does it: https://github.com/ros2/rclpy/blob/master/rclpy/src/rclpy/_rclpy.c#L969-L979
After colcon build --merge-instal
, do not proceed as shown below.
[Processing: uncrustify_vendor]
[Processing: uncrustify_vendor]
[Processing: uncrustify_vendor]
[Processing: uncrustify_vendor]
[Processing: uncrustify_vendor]
[Processing: uncrustify_vendor]
[Processing: uncrustify_vendor]
[Processing: uncrustify_vendor]
[Processing: uncrustify_vendor]
[7min 45.2s] [68/155 complete] [uncrustify_vendor:build - 7min 12.2s]
The patch.exe window remains visible during this display.
Thanks.
Hi Esteve,
I've encountered some odd behavior when trying to instantiate nodes using a string with a - or whitespace in the name. I haven't tried with all special characters, but names composed of only alphanumeric characters are fine, and underscores seem to be fine as well. What happens is that if the string contains a special character (for example the device name obtained from Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation
), the call to create the node appears to succeed (the node object is not null), but neither the node nor any topics published or subscribed are visible to ros2 using ros2 node list
or ros2 topic list
. Obviously the workaround is to just use names that don't have these characters, but it's not clear to me where the problem occurs along the ros2 pipeline, whether it's in the .net client library or the native implementation. There is no strong urgency for a fix, but other users may find unexpected behavior so I thought it relevant to point it out.
Cheers,
Jeff
Hi @esteve ,
I am trying to compile ros2_dotnet for Bouncy. Do you find appropiate to open a branch for this?
I have a workspace with the packages ament_cmake_export_assemblies osrf_testing_tools_cpp ros2_dotnet and dotnet_cmake_module
. When I compile with colcon build --symlink-install
I alway get the same error:
--- stderr: rosidl_generator_dotnet
CMake Error at /opt/ros/bouncy/share/rosidl_cmake/cmake/rosidl_target_interfaces.cmake:44 (message):
rosidl_target_interfaces() the second argument 'rosidl_generator_dotnet'
concatenated with the third argument 'rosidl_typesupport_c' using double
underscores must be a valid target name
Call Stack (most recent call first):
cmake/rosidl_generator_dotnet_generate_interfaces.cmake:232 (rosidl_target_interfaces)
/opt/ros/bouncy/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:38 (include)
/opt/ros/bouncy/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:169 (ament_execute_extensions)
CMakeLists.txt:55 (rosidl_generate_interfaces)
I have been debugging this for hours, but no results. Any idea?
Best
Hi @esteve , I installed everything from sources, only test_msgs skiped, but I get this error when I try to run the talker/listener example on a Windows10 cmd:
C:\dev\ros2_dotnet_ws>ros2 run rcldotnet_examples rcldotnet_talker
Unhandled Exception: System.TypeInitializationException: The type initializer for 'ROS2.RCLdotnetDelegates' threw an exception. ---> ROS2.Utils.UnsatisfiedLinkError: rcldotnet_native.dll
at ROS2.Utils.DllLoadUtilsUWP.ROS2.Utils.DllLoadUtils.LoadLibrary(String fileName) in C:\dev\ros2_dotnet_ws\src\ros2_dotnet\ros2_dotnet\rcldotnet_common\DllLoadUtils.cs:line 152
at ROS2.RCLdotnetDelegates..cctor() in C:\dev\ros2_dotnet_ws\src\ros2_dotnet\ros2_dotnet\rcldotnet\RCLdotnet.cs:line 104
--- End of inner exception stack trace ---
at ROS2.RCLdotnet.Init() in C:\dev\ros2_dotnet_ws\src\ros2_dotnet\ros2_dotnet\rcldotnet\RCLdotnet.cs:line 316
at ConsoleApplication.RCLDotnetTalker.Main(String[] args) in C:\dev\ros2_dotnet_ws\src\ros2_dotnet\ros2_dotnet\rcldotnet_examples\RCLDotnetTalker.cs:line 13`
not UWP, just dotnet, but the platform is being detected as UWP?
Hi,
I think I managed to get ros2 dotnet installed, but when I'm trying to run the talker/listener example I always get the message "Package 'rcldotnet_examples' not found".
Any ideas on what I'm doing wrong? Do I have to tell ros2 where to find the example package?
Thank you!
Hi
I would like to use some msg types such as
Data.msg:
int32 d_value
float32 f_value
Test.msg:
test_msgs/Data data1
Is this possible yet?
I saw in another thread array types #62 that fmrico has completed the array and nested types. Is this the same as what i mentioned here? How do i get a build of that, i would very much like to try it. I am running on Windows 10 x64
Hi, managed to run the build, but not sure why i am encountering this error
rcldotnet_common [ Exited with code 1 ]
towards the end of the build; and the rest of the rcldotnet_examples, rosidl_generator_dotnet all are not built.
`
Starting >>> rcl_yaml_param_parser
Failed <<< rcldotnet_common [ Exited with code 1 ]
Aborted <<< rosidl_generator_dds_idl
Aborted <<< rcpputils
Aborted <<< rcl_logging_spdlog
Aborted <<< rcl_yaml_param_parser
Aborted <<< rcl_logging_log4cxx
Aborted <<< rcl_logging_noop
Aborted <<< rosidl_generator_c
Summary: 87 packages finished [2min 10s]
1 package failed: rcldotnet_common
7 packages aborted: rcl_logging_log4cxx rcl_logging_noop rcl_logging_spdlog rcl_yaml_param_parser rcpputils rosidl_generator_c rosidl_generator_dds_idl
60 packages not processed
`
Hey all,
I'm trying to build ros2_dotnet_uwp on Windows 10, Visual Studio 2019. The ament building finishes with no error. However, building ros2_dotnet_uwp itself fails when compiling std_srvs. In addition, it cannot find poco-config.cmake as well.
I was wondering if somebody could let me know what I am doing wrong and what I can possibly do to resolve the issue.
I an trying my luck with building it overlaying galactic and i encounter an error in file path like below
Failed <<< rosidl_typesupport_introspection_c [7.89s, exited with code 1]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(321,5): error MSB3491: Could not write lines to file "x64\Release\ament_cmake_python_symlink_rosidl_typesupport_introspection_c_setup\ament_cm.81E1E29E.tlog\ament_cmake_python_symlink_rosidl_typesupport_introspection_c_setup.lastbuildstate". The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. [D:\MyGit\ros2-dotnet\ros2_dotnet_ws\build\rosidl_typesupport_introspection_c\ament_cmake_python_symlink_rosidl_typesupport_introspection_c_setup.vcxproj]
Any hint how i can solve this?
UWP compile error with the current master branch. I followed this steps from an Admin VS2017 console:
md \dev\ament_uwp\src
cd \dev\ament_uwp
curl -sk https://raw.githubusercontent.com/esteve/ros2_dotnet/master/ament_dotnet_uwp.repos -o ament_dotnet_uwp.repos
vcs import src < ament_dotnet_uwp.repos
python src\ament\ament_tools\scripts\ament.py build --cmake-args -G "Visual Studio 15 2017 Win64" --
md \dev\ros2_uwp\src
cd \dev\ros2_uwp
curl -sk https://raw.githubusercontent.com/esteve/ros2_dotnet/master/ros2_dotnet_uwp.repos -o ros2_dotnet_uwp.repos
vcs import src < ros2_dotnet_uwp.repos
cd \dev\ros2_uwp\src\ros2_dotnet
vcs custom --git --args checkout master || VER>NUL
cd \dev\ament_uwp
call install\local_setup.bat
cd \dev\ros2_uwp
ament build --parallel --cmake-args -G "Visual Studio 15 2017 Win64" -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 -DTHIRDPARTY=ON -DCMAKE_FIND_ROOT_PATH="\dev\ament_uwp\install;\dev\ros2_uwp\install" --
Log file attached.
Get these commands from azure-pipelines.yml file, README.md is outdated.
Right now ros2_dotnet
only support Bouncy.
Hi esteve,
thank you so much for the development of ros2_dotnet and for the help on the past few issues that I've posted.
I'm working on a project with PointCloud2 Messages and as far as I understand it, they require nested messages. So I installed everything from fmricos pull request #10 and it installed without a problem. I created a new Visual Studio project and added all the files and references, as you described in your ReadMe. I additionally added the reference for sensor_msgs_assemblies.dll
Now I'm able to access the header and some parts of the PointCloud Message, but not the data section of it.
Any chance you can help me with this? Am I missing some references? Or is the Nested Types Code simply not that far yet.
Thank you for all the amazing work you're doing on this project!!
Failed <<< unique_identifier_msgs [2.56s, exited with code 2]
Aborted <<< builtin_interfaces [2.65s]
Aborted <<< lifecycle_msgs [2.87s]
Summary: 8 packages finished [5.83s]
1 package failed: unique_identifier_msgs
2 packages aborted: builtin_interfaces lifecycle_msgs
3 packages had stderr output: builtin_interfaces lifecycle_msgs unique_identifier_msgs
18 packages not processed
Hello @esteve & @fmrico
As discussed in #18 I will open this new issue for the upcoming problem.
The situation is as follows:
I have a Unity project where, on start, the following script is executed:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ROS2;
using ROS2.Utils;
public class ROS2Talker : MonoBehaviour
{
private int cont = 0;
private IPublisher<std_msgs.msg.String> chatter_pub;
private INode node;
void Start()
{
RCLdotnet.Init();
node = RCLdotnet.CreateNode("talker");
chatter_pub = node.CreatePublisher<std_msgs.msg.String>("chatter");
}
void Update()
{
if (RCLdotnet.Ok())
{
std_msgs.msg.String msg = new std_msgs.msg.String();
msg.Data = "Hello World: " + cont++;
chatter_pub.Publish(msg);
}
}
public void Button_Click()
{
if (RCLdotnet.Ok())
{
std_msgs.msg.String msg = new std_msgs.msg.String();
msg.Data = "Hello World: " + cont++;
chatter_pub.Publish(msg);
}
}
}
I have uploaded my minimal example application to:
https://github.com/MischaRo/Ros2UWPminimal
When running the application in the Hololens emulator, everything works as expected. When running ROS2 in the console, I can see the node “takler”, the topic “chatter” and all the messages that are generated
But running the application on a real Hololens I encountered some problems. Upon reviewing the content in the console, the topic “chatter” was not shown to me.
Sometimes though, it was displayed, but no data was transmitted over it.
As discussed in #18 this could be a problem concerning wireless udp multicast.
I have tried running my example on several different wireless networks, all with the same result.
Are there some other configurations that need to be made in order for the application to work on the Hololens?
I want to use Sequence Type in ros2_dotnet and I succeed to publish sequence type of Basic Type in my fork.
Hi,
I am building in Windows10 for Desktop, and I have found some problems:
ros2lifecycle
has a test dependency with ros2lifecycle_test_fixtures
, and it depends on rclcpp
and rclcpp_lifecycle
. As @theseankelly and I discussed, it's better to avoid including rclcpp
.rcl_logging_spdlog
depends on splog_vendor
, but it is not included in repos.ros2trace
fails for a UnicodeDecodeError:
The build is successful if I compile with this line:
colcon build --merge-install --packages-ignore ros2lifecycle_test_fixtures rcl_logging_spdlog ros2trace --cmake-args -DBUILD_TESTING=OFF -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Building commands in CI already include some of these options, but in the instructions in README.md for building Desktop only says to build with colcon build --merge-install
@theseankelly Do you think that we should change the build instructions in readme.md? In any case, I don't know if it is recommendable to go without tests...
The patch file in the root (rosidl_typesupport_ros2_dotnet.patch
) patches a file that does not seem to exist: rosidl_default_generators/CMakeLists.txt
Hello @esteve, I am trying to use ros2_dotnet_uwp with unity for Hololens. I was already discussing the issue with @dvargasfr over here IntelligentRoboticsLabs/ARViz#1
https://github.com/IntelligentRoboticsLabs/ARViz released a manual for using the generated DLLs in a UWP application from Unity. The manual is still present in an older version of the readme (IntelligentRoboticsLabs/ARViz@2c384ee)
@dvargasfr gave me this code to try it out.
I used the files from the ros2-dotnet-uwp-x86.zip release file and a Hololens to test it.
I use this script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ROS2;
using ROS2.Utils;
public class ROS2Talker : MonoBehaviour
{
private int cont = 0;
private IPublisher<std_msgs.msg.String> chatter_pub;
private INode node;
void Start()
{
RCLdotnet.Init();
node = RCLdotnet.CreateNode("talker");
chatter_pub = node.CreatePublisher<std_msgs.msg.String>("chatter");
}
void Update()
{
if (RCLdotnet.Ok())
{
std_msgs.msg.String msg = new std_msgs.msg.String();
msg.Data = "Hello World: " + cont++;
chatter_pub.Publish(msg);
}
}
public void Button_Click()
{
if (RCLdotnet.Ok())
{
std_msgs.msg.String msg = new std_msgs.msg.String();
msg.Data = "Hello World: " + cont++;
chatter_pub.Publish(msg);
}
}
}
Unfortunately, after starting the application in Hololens, I get an error massage
Exception thrown: 'System.DllNotFoundException' in rcldotnet_common.dll Exception thrown: 'System.EntryPointNotFoundException' in rcldotnet_common.dll
Can you help me find the cause of this error?
Hi,
is it possible that ament is missing from the repos file?
At least when I run vcs, it won't download ament and therefore I cannot execute src\ament\ament_tools\scripts\ament.py build
to build on windows.
Or am I missing something here?
Thanks for any help!
i copied a lot of .so inside unity Plugins folder with the help of dotnet_utils package from the samiamlabs fork but ROS2 namespace could not be found.
Using Unity 2019.4.8f1 on Ubuntu focal
There is an issue for the UWP build of ros2_dotnet. In particular, the error is on fastrtps and the problem seems to be related to perhaps some differences in libraries and non-compatibility with UWP as it gives some syntax errors:
e.g., error C2332: 'struct': missing tag name (compiling source file ros2-uwp\src\eProsima\Fast-RTPS\src\cpp\transport\TCPAcceptorSecure.cpp)
Some context for the compilation:
colcon build --merge-install --packages-ignore rmw_fastrtps_dynamic_cpp rcl_logging_log4cxx rcl_logging_spdlog ros2trace tracetools_launch tracetools_read tracetools_test tracetools_trace --cmake-args -A x64 -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0.17134 -DTHIRDPARTY=ON -DINSTALL_EXAMPLES=OFF -DBUILD_TESTING=OFF -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop --event-handlers console_cohesion+
Note that the Desktop ros2_dotnet compiles fine. My sense is that the problem might be on the ASIO library, and I tried to get the uwp version with vcpkg .12.2-2, but still without success.
(Split from comments on issue #55)
Hi
I managed to run the talker and listener example using the binary built. (Windows dekstop).
However, when i try to use the dlls in my Visual Studio 2017 project, although the talker and listener everything seems to run smoothly; i encountered the following in the output:
"Exception thrown: 'System.DllNotFoundException' in rcldotnet_common.dll"
I saw this issue reported by another user before; but the user has actually having another issue at the same time. So i believe not quite related to his. I am just wondering if i should bother about it; if this is just a normal output? because it is sending the output every time the ROS2 codes or function is called.
Following instructions for UWP on Windows 10 VS 2019 and can't get past building ament and run into two issues.
First Issue:
PS D:\ROOT\GitHub\dev\ament> curl -sk https://raw.githubusercontent.com/ros2-dotnet/ros2_dotnet/master/ament_dotnet_uwp.repos -o ament_dotnet_uwp.repos Invoke-WebRequest : A parameter cannot be found that matches parameter name 'sk'.
At line:1 char:6
~~~
I download the repos another way so hopefully that's not my problem.
Second Issue
I go to build ament and the ament_package can't be found
PS D:\ROOT\GitHub\dev\ament> colcon build --merge-install
Starting >>> ament_package
Starting >>> ament_lint
Starting >>> gtest_vendor
Starting >>> ament_cppcheck
Starting >>> ament_pep8
Starting >>> osrf_pycommon
Finished <<< ament_lint [1.81s]
Starting >>> ament_flake8
Finished <<< ament_package [1.88s]
Finished <<< ament_pep8 [1.88s]
Finished <<< ament_cppcheck [1.91s]
Starting >>> ament_cmake_core
Starting >>> ament_pyflakes
Finished <<< osrf_pycommon [2.00s]
--- stderr: ament_cmake_core
Traceback (most recent call last):
File "D:/ROOT/GitHub/dev/ament/src/ament/ament_cmake/ament_cmake_core/cmake/package_templates/templates_2_cmake.py", line 21, in
from ament_package.templates import get_environment_hook_template_path
ModuleNotFoundError: No module named 'ament_package'
CMake Error at ament_cmake_package_templates-extras.cmake:41 (message):
execute_process(C:/Python38/python.exe
D:/ROOT/GitHub/dev/ament/src/ament/ament_cmake/ament_cmake_core/cmake/package_templates/templates_2_cmake.py
D:/ROOT/GitHub/dev/ament/build/ament_cmake_core/ament_cmake_package_templates/templates.cmake)
returned error code 1
Call Stack (most recent call first):
CMakeLists.txt:19 (include)
Failed <<< ament_cmake_core [0.59s, exited with code 1]
Aborted <<< ament_flake8 [0.73s]
Aborted <<< gtest_vendor [2.56s]
Aborted <<< ament_pyflakes [0.77s]
Summary: 5 packages finished [3.52s]
1 package failed: ament_cmake_core
3 packages aborted: ament_flake8 ament_pyflakes gtest_vendor
1 package had stderr output: ament_cmake_core
49 packages not processed
Hi.
I followed the instructions downloading a prebuilt binary for ROS2 (on WIndows 10).
However after issuing the command:
colcon build --merge-install
I get this where it never stops processing rosidl_adapter. Any ideas of what goes wrong? I left it for 3 hours....still working
Starting >>> rosidl_adapter
Starting >>> rosidl_typesupport_interface
Starting >>> ament_cmake_export_assemblies
Starting >>> dotnet_cmake_module
Starting >>> test_interface_files
Finished <<< ament_cmake_export_assemblies [2.50s]
Finished <<< test_interface_files [2.42s]
Finished <<< rosidl_typesupport_interface [3.20s]
Finished <<< dotnet_cmake_module [3.17s]
[Processing: rosidl_adapter]
[Processing: rosidl_adapter]
[Processing: rosidl_adapter]
[Processing: rosidl_adapter]
[Processing: rosidl_adapter]
[Processing: rosidl_adapter]
[Processing: rosidl_adapter]
[44min 44.0s] [4/37 complete] [rosidl_adapter:cmake - 44min 42.9s]
Hi,
I'm struggeling with the general setup.
When I run the:
vcs import src < ament_dotnet_uwp.repos
command, I get the following error:
C:\dev\ament>vcs import src < ament_dotnet_uwp.repos Traceback (most recent call last): File "c:\python37\lib\runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "c:\python37\lib\runpy.py", line 85, in _run_code exec(code, run_globals) File "C:\Python37\Scripts\vcs.exe\__main__.py", line 9, in <module> File "c:\python37\lib\site-packages\vcstool\commands\vcs.py", line 26, in main return entrypoint(args) File "c:\python37\lib\site-packages\vcstool\commands\import_.py", line 179, in main repos = get_repositories(args.input) File "c:\python37\lib\site-packages\vcstool\commands\import_.py", line 59, in get_repositories repositories = root['repositories'] KeyError: 'repositories'
Any advice on what I'm doing wrong?
Thanks!!
Trying to follow the README and set up a simple talker attached to the Main Camera so adapted the talked example to a Unity script but get the following error when I try Play.
std_msgs__dotnetext_native.dll
is included under Assets > Plugins
UnsatisfiedLinkError: std_msgs__dotnetext_native.dll
ROS2.Utils.DllLoadUtilsWindowsDesktop.ROS2.Utils.DllLoadUtils.LoadLibrary (System.String fileName) (at <4511c233ae9e407b8b55badf6be988af>:0)
std_msgs.msg.String..cctor () (at <ba0807eee5f54b759d134c590a162468>:0)
Rethrow as TypeInitializationException: The type initializer for 'std_msgs.msg.String' threw an exception.
RosTalker.Start () (at Assets/Scripts/RosTalker.cs:21)
On recent versions of Visual Studio, new UWP projects by default use the '.NET Native' compilation option. It appears that projects built this way attempt to pre-load referenced DLLs before the application is even activated.
This behavior causes issues in ros2_dotnet related to platform auto-detection -- the app crashes due to missing dependencies of the linux/macos/desktop DLLs before the code linked above has a chance to run and catch the exception.
Hopefully there's a way to avoid special-casing this for UWP and still take advantage of .NET Native performance (I'm looking into it), but for now the workaround to this issue is to disable .NET Native:
CycloneDDS has become the default DDS implementation for many projects and organizations and ADLINK is actively supporting it for ROS 2.
CycloneDDS is small, fast and has few dependencies, so it'd be ideal for integrating it into UWP.
Hi! I'm experimenting an error trying to execute a simple talker/listener example on Unity. The talker/listener code is adapted to Unity Start()/Update() execution model. I succesfully compiled ros2_dotnet for Windows and included the appropriate .dll's (those from install\bin folder and others needed from install\Lib) to a Plugins folder. And at runtime get this UnsatisfiedLinkError:
UnsatisfiedLinkError: rcldotnet_native.dll
ROS2.Utils.DllLoadUtilsUWP.ROS2.Utils.DllLoadUtils.LoadLibrary (System.String fileName) (at :0)
ROS2.RCLdotnetDelegates..cctor () (at :0)
Rethrow as TypeInitializationException: The type initializer for 'ROS2.RCLdotnetDelegates' threw an exception.
ROS2.RCLdotnet.Init () (at :0)
rcldotnettalker.Start () (at Assets/Scripts/rcldotnettalker.cs:23)
Maybe have dll's been generated incorrectly for using them on Unity? Maybe are they correctly generated but not correctly referenced just placing them in Plugins folder?
Hi Esteve,
I'm trying to compile ros2_dotnet in order to deploy some ros2 applications to HoloLens, so I have been attempting to cross-compile for x86 on my x64 machine. I am following the instructions in the README, and despite CI saying that it passes for UWP x86, rcldotnet_common fails to build when I select "Visual Studio 15 2017" as the target generator. The primary error is:
error NETSDK1032: The RuntimeIdentifier platform 'win-x86' and the PlatformTarget 'x64' must be compatible
but I've pasted the full output for that package below. Ament builds fine, and I can build successfully for UWP x64. Any help would be appreciated. Thanks!
-- Build files have been written to: C:/workspaces/ros2_dotnet_ws/build/rcldotnet_common ==> 'c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\cmake__build.bat C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\\MSBuild\15.0\bin\msbuild.EXE /m:16 /p:Configuration=Release c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.sln /p:Platform=Win32' in 'c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common'
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 2/4/2019 5:53:22 PM.
-- Detecting C compiler ABI info - done
-- Detecting C compile features
1>Project "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.sln" on node 1 (default targets).
1>ValidateSolutionConfiguration:
Building solution configuration "Release|Win32".
ValidateProjects:
The project "INSTALL" is not selected for building in solution configuration "Release|Win32".
The project "uninstall" is not selected for building in solution configuration "Release|Win32".
1>Project "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.sln" (1) is building "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\ALL_BUILD.vcxproj.metaproj" (2) on node 1 (default ta
rgets).
2>Project "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\ALL_BUILD.vcxproj.metaproj" (2) is building "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\ZERO_CHECK.vcxproj" (4) on node 2 (default targ
ets).
4>PrepareForBuild:
Creating directory "Win32\Release\ZERO_CHECK\".
Creating directory "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\Release\".
Creating directory "Win32\Release\ZERO_CHECK\ZERO_CHECK.tlog\".
InitializeBuildStatus:
Creating "Win32\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
CustomBuild:
Checking Build System
CMake does not need to re-run because C:/workspaces/ros2_dotnet_ws/build/rcldotnet_common/CMakeFiles/generate.stamp is up-to-date.
FinalizeBuildStatus:
Deleting file "Win32\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
Touching "Win32\Release\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate".
4>Done Building Project "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\ZERO_CHECK.vcxproj" (default targets).
1>Project "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.sln" (1) is building "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.vcxproj.metaproj" (3) on node 1 (def
ault targets).
3>Project "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.vcxproj.metaproj" (3) is building "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.vcxproj" (5) on node 1
(default targets).
5>PrepareForBuild:
Creating directory "Win32\Release\rcldotnet_common\".
Creating directory "Win32\Release\rcldotnet_common\rcldotnet_common.tlog\".
InitializeBuildStatus:
Creating "Win32\Release\rcldotnet_common\rcldotnet_common.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
CustomBuild:
C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe;-version;C:/Program Files/dotnet/dotnet.exe restore;-r;win-x86 rcldotnet_co
mmon_dotnetcore.csproj; C:/Program Files/dotnet/dotnet.exe publish;-r;win-x86 rcldotnet_common_dotnetcore.csproj -> C:/workspaces/ros2_dotnet_ws/build/rcldotnet_common
cmake version 3.12.18081601-MSVC_2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
Restoring packages for c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common_dotnetcore.csproj...
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
Generating MSBuild file c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\obj_core\rcldotnet_common_dotnetcore.csproj.nuget.g.props.
Generating MSBuild file c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\obj_core\rcldotnet_common_dotnetcore.csproj.nuget.g.targets.
Restore completed in 355.56 ms for c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common_dotnetcore.csproj.
Microsoft (R) Build Engine version 15.9.20+g88f5fadfbe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting C compile features - done
-- Found ament_cmake_python: 0.5.1 (C:/workspaces/ament_ws/install/share/ament_cmake_python/cmake)
-- Found ament_cmake_ros: 0.5.0 (C:/workspaces/ros2_dotnet_ws/install/share/ament_cmake_ros/cmake)
-- Found PythonInterp: C:/Python37/python.exe (found suitable version "3.7.2", minimum required is "3")
-- Using PYTHON_EXECUTABLE: C:/Python37/python.exe
Restore completed in 53.46 ms for c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common_dotnetcore.csproj.
5>C:\Program Files\dotnet\sdk\2.2.103\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(134,5): error NETSDK1032: The RuntimeIdentifier platform 'win-x86' and the PlatformTarget
'x64' must be compatible. [c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common_dotnetcore.csproj] [c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.vcxproj]
5>Done Building Project "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.vcxproj" (default targets) -- FAILED.
3>Done Building Project "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.vcxproj.metaproj" (default targets) -- FAILED.
2>Done Building Project "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\ALL_BUILD.vcxproj.metaproj" (default targets) -- FAILED.
1>Done Building Project "c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.sln" (default targets) -- FAILED.
Build FAILED.
"c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.sln" (default target) (1) ->
"c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.vcxproj.metaproj" (default target) (3) ->
"c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.vcxproj" (default target) (5) ->
(CustomBuild target) ->
C:\Program Files\dotnet\sdk\2.2.103\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(134,5): error NETSDK1032: The RuntimeIdentifier platform 'win-x86' and the PlatformTarg
et 'x64' must be compatible. [c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common_dotnetcore.csproj] [c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.vcxproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:02.95
<== Command 'c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\cmake__build.bat C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\\MSBuild\15.0\bin\msbuild.EXE /m:16 /p:Configuration=Release c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.sln /p:Platform=Win32' failed in 'c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common' with exit code '1'
SystemExit in rcldotnet_common: <== Command 'c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\cmake__build.bat C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\\MSBuild\15.0\bin\msbuild.EXE /m:16 /p:Configuration=Release c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.sln /p:Platform=Win32' failed in 'c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common' with exit code '1'
Traceback (most recent call last):
File "c:\workspaces\ament_ws\install\Lib\site-packages\ament_tools\verbs\build_pkg\cli.py", line 253, in run_command
subprocess.check_call(cmd, shell=True, cwd=cwd, env=build_action.env)
File "C:\Python37\lib\subprocess.py", line 347, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['c:\\workspaces\\ros2_dotnet_ws\\build\\rcldotnet_common\\cmake__build.bat', 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\\\MSBuild\\15.0\\bin\\msbuild.EXE', '/m:16', '/p:Configuration=Release', 'c:\\workspaces\\ros2_dotnet_ws\\build\\rcldotnet_common\\rcldotnet_common.sln', '/p:Platform=Win32']' returned non-zero exit status 1.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\workspaces\ament_ws\install\Lib\site-packages\ament_tools\verbs\build\cli.py", line 384, in process_in_parallel
result = done_future.result()
File "C:\Python37\lib\concurrent\futures\_base.py", line 425, in result
return self.__get_result()
File "C:\Python37\lib\concurrent\futures\_base.py", line 384, in __get_result
raise self._exception
File "C:\Python37\lib\concurrent\futures\thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "c:\workspaces\ament_ws\install\Lib\site-packages\ament_tools\verbs\build_pkg\cli.py", line 280, in main
return run(opts, context)
File "c:\workspaces\ament_ws\install\Lib\site-packages\ament_tools\verbs\build_pkg\cli.py", line 331, in run
handle_build_action(on_build_ret, context)
File "c:\workspaces\ament_ws\install\Lib\site-packages\ament_tools\verbs\build_pkg\cli.py", line 270, in handle_build_action
run_command(build_action, context)
File "c:\workspaces\ament_ws\install\Lib\site-packages\ament_tools\verbs\build_pkg\cli.py", line 262, in run_command
sys.exit(msg)
SystemExit: <== Command 'c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\cmake__build.bat C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\\MSBuild\15.0\bin\msbuild.EXE /m:16 /p:Configuration=Release c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common\rcldotnet_common.sln /p:Platform=Win32' failed in 'c:\workspaces\ros2_dotnet_ws\build\rcldotnet_common' with exit code '1'
-- Found rosidl_typesupport_interface: 0.5.1 (C:/workspaces/ros2_dotnet_ws/install/share/rosidl_typesupport_interface/cmake)
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
INSTALL_EXAMPLES
THIRDPARTY
I'm a developer who is creating a simulation environment for Robot. Our robot is running under Linux, So How can use it in the unity under Linux?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.