Interesting. I think this is a case in which vendors are indeed coordinated,
as they need to agree on the RMW to use, but I guess that that boils down to
the definition of "coordinated", that I guess it is not an interesting topic
of discussion. Correct me if I am wrong, but I guess the vendors would also
need to agree on the ROS 2 distro to use (see [
https://answers.ros.org/question/341372/can-nodes-from-different-
ros-2-distributions-communicate-compatibly
](https://answers.ros.org/question/341372/can-nodes-from-different-
ros-2-distributions-communicate-compatibly) )? In that case what do you
imagine that the long term maintenance aspect of that would work? You would
effectively not have ` ROS 2 ` as standard, but ` ROS2-Given-RMW-Given-Distro
` , and if you want to update all the non-coordinated vendors should provide
the software for the update. That seems complex, but perhaps I am overthinking
it.


Up your IT Infrastructure Monitoring Game
Up your IT Infrastructure Monitoring Game
Automatically group your resources by any property. Customize your own metrics to block noise.


I have had some luck using pyinstaller:


Sorry, something went wrong.


  Footer

[ ](https://github.com "GitHub") © 2024 GitHub, Inc.


[ ![@clalancette](https://avatars.githubusercontent.com/u/163000?s=80&v=4)
](/clalancette)


Company  *


**[ fujitatomoya ](/fujitatomoya) ** commented  Jan 27, 2024


[ ](https://github.com/)


###  Learn about the LRS4000 2D LiDAR sensor


The robots we are looking at have 3D camera’s and 2D lidars. I saw the frameworks from automotive sector, such as Autoware and NVIDIA DRIVE, that have nice processing of such data. Therefore, I was wondering if it would be a good idea to integrate functionality from such frameworks for navigation in agriculture.


  * [ Terms ](https://docs.github.com/site-policy/github-terms/github-terms-of-service)
  * [ Privacy ](https://docs.github.com/site-policy/privacy-policies/github-privacy-statement)
  * [ Security ](/security)
  * [ Status ](https://www.githubstatus.com/)
  * [ Docs ](https://docs.github.com/)
  * [ Contact ](https://support.github.com?tags=dotcom-footer)
  * Manage cookies
  * Do not share my personal information


A recording of the live Q&A held with @Vanessa_Yamzon_Orsi and @gbiggs is available on our Vimeo site.


re: different RMWs could be used, and are a configuration item that could be
left to the end-user: technically: agreed.


I do not want to say that this may never happen in the future, but given my
limited experience it seems to me that ROS 2 as of early 2024 typically used
in system where the system integration as full control on all the parts that
communicate over ROS 2, and this is also the reason why most (even officially
vendor supported) ROS 2 drivers are available in source form, as it would be
quite tricky for vendors to ship a piece of hardware or a binary software that
just uses ROS 2 out-of-the-box . When you are integrating pieces of software
and/or hardware that you can't modify (typically you can just configure them),
based on my limited experience protocols defined by strictly defined standards
are typically used, like MQTT, OPC UA or any industrial fieldbus. Note that
also in the case of strictly defined standards you can have bugs related to
interoperability between different implementations, but those are typically
considered by everyone bugs, and there exists practice to try to minimize
those (such as [ OPC UA Compliance Test Tool
](https://opcfoundation.org/developer-tools/certification-test-tools/opc-ua-
compliance-test-tool-uactt/) for OPC UA).


City  *


Labels


Meaningful, Aggregated Cost Views
Meaningful, Aggregated Cost Views
Show the cost of your IT resources logically connected to your application and services.


> That seems complex, but perhaps I am overthinking it.


edited


In addition to the posts & issues linked by [ @traversaro
](https://github.com/traversaro) , this has also come up [ here
](https://discourse.ros.org/t/ros-cross-distribution-communication/27335/5)
(especially the "not all nodes will always be under your control" aspect) and
the linked [ ros2/rmw_cyclonedds#184
](https://github.com/ros2/rmw_cyclonedds/issues/184) .


[ @traversaro ](https://github.com/traversaro) , thank you for your response.
Your perspective is intriguing. My colleagues and I assessed the TRL of ROS2
following a training course and discussions with [ ROS Industrial
](https://rosindustrial.org/) and other industry representatives who
participated in the course. We determined that the TRL of ROS2 meets our
criteria. Consequently, we used ROS2 as our integration solution, opting for
it over OPC UA, MQTT, or a combination of field buses and gateways.


These features make LiDAR scanner technology beneficial in a number of
applications. The guide below will help you to select the LiDAR system that is
perfect for your application.


Author


Another way of thinking about it: I can play Rocket League without installing
Unreal Engine first. Why can't I use a ROS2 Node without installing ROS2
first?


Latest commit


netTerrain Cloud
How Does It Work?
Use Cases
Technology Supported
About
Powered by Graphical Networks Graphical Networks
Try It Now
netTerrain Cloud
Hybrid Cloud Observability
Concerned about runaway cloud costs?
Cloud & network troubleshooting taking too long?
Need one place to view your entire IT infrastructure?
Fed up with too many open consoles to manage your cloud?
Documentation for security audits stressing you out?
Automatically monitor, discover and visualize your entire IT stack.
From AWS, Azure and GCP to virtual and physical networks.
Free Trial
Get Pricing
Why netTerrain?
One App - All Clouds
One App - All Clouds
Ditch the gazillion consoles to view your cloud. Access information graphically and not just tables.


Copy link


[
![@traversaro](https://avatars.githubusercontent.com/u/1857049?s=80&u=2178077c05edb1cff607766c0045015dbf112c00&v=4)
](/traversaro)


(and that's even ignoring nodes which "go around" RCLC(PP)/PY to reach into
the DDS-RMW layer(s) to make use of 'advanced' functionality or settings)


##  Feature request


![](https://image.eloquamedia.sick.com/EloquaImages/clients/SickAG/%7B4654d7ae-
fef5-483f-bde6-7d9df727722d%7D_tim.jpg)


  Resources

Readme


Jason Hilty, RCDD. Network Design Professional
Department of Defense
Cost Reduction
Thanks to netTerrain, we were able to replace 600 Visio licenses.


A ROS2 installer creator would be even better. It would be great if there was
a supported utility that will help me create a graphical installer that I can
send to users, and this will install the robot code (the nodes I developed)
and all of the ROS2/DDS dependencies. This installer could also be used to
simplify the install process of ROS2 for software developers, instead of
having to follow a multi-step install document.


Add support for deploying/distributing standalone (self-contained) ros2
executables on Windows.


[ ros2 ](/ros2) /  **[ ros2 ](/ros2/ros2) ** Public


We read every piece of feedback, and take your input very seriously.


Up your IT Infrastructure Monitoring Game
Up your IT Infrastructure Monitoring Game
Automatically group your resources by any property. Customize your own metrics to block noise.


* [ GitHub Sponsors  Fund open source developers  ](/sponsors)


The centre of activity of the OSRA will be the Technical Governance Committee (TGC), which will oversee the activities of the Project Management Committees (PMCs). Each PMC is responsible for one project; there are four PMCs being established with the OSRA to manage ROS, Gazebo, Open-RMF and our Infrastructure. The TGC and PMCs can also create sub-committees as needed. The TGC answers to the Board of Directors of the OSRF, ensuring the Board retains final oversight of the OSRF’s projects and activities.


Sorry, something went wrong.


**[ CraigBuilds ](/CraigBuilds) ** commented  Jan 26, 2024  •


#  Search code, repositories, users, issues, pull requests...


And finally, it would be even better if the user didn't have to install any
other pieces of software before using the ROS2 application that has been given
to them. Even installing something like Docker adds complexity, certainly when
they are used to being able to launch software from their computer with a
click of a button. Most people who are not software engineers do not know what
Docker is or understand the point of it. In fact, even using a command line is
foreign to many people.

---

All reactions


  [ Contributors  17  ](/ros-
drivers/ros2_ouster_drivers/graphs/contributors)

  * [ ![@SteveMacenski](https://avatars.githubusercontent.com/u/14944147?s=64&v=4) ](https://github.com/SteveMacenski)
  * [ ![@tpanzarella](https://avatars.githubusercontent.com/u/645771?s=64&v=4) ](https://github.com/tpanzarella)
  * [ ![@rotu](https://avatars.githubusercontent.com/u/119948?s=64&v=4) ](https://github.com/rotu)
  * [ ![@clalancette](https://avatars.githubusercontent.com/u/163000?s=64&v=4) ](https://github.com/clalancette)
  * [ ![@bertaveira](https://avatars.githubusercontent.com/u/9644729?s=64&v=4) ](https://github.com/bertaveira)
  * [ ![@RFRIEDM-Trimble](https://avatars.githubusercontent.com/u/50461358?s=64&v=4) ](https://github.com/RFRIEDM-Trimble)
  * [ ![@MattSYoung](https://avatars.githubusercontent.com/u/85848767?s=64&v=4) ](https://github.com/MattSYoung)
  * [ ![@cottsay](https://avatars.githubusercontent.com/u/1144588?s=64&v=4) ](https://github.com/cottsay)
  * [ ![@Qgel](https://avatars.githubusercontent.com/u/1146690?s=64&v=4) ](https://github.com/Qgel)
  * [ ![@ahcorde](https://avatars.githubusercontent.com/u/1933907?s=64&v=4) ](https://github.com/ahcorde)
  * [ ![@jonbakerfish](https://avatars.githubusercontent.com/u/2463872?s=64&v=4) ](https://github.com/jonbakerfish)
  * [ ![@simonwaterer](https://avatars.githubusercontent.com/u/10577548?s=64&v=4) ](https://github.com/simonwaterer)
  * [ ![@JLBicho](https://avatars.githubusercontent.com/u/12575739?s=64&v=4) ](https://github.com/JLBicho)
  * [ ![@luhuadong](https://avatars.githubusercontent.com/u/13601124?s=64&v=4) ](https://github.com/luhuadong)

[ \+ 3 contributors ](/ros-drivers/ros2_ouster_drivers/graphs/contributors)


    * [ Actions  Automate any workflow  ](/features/actions)
    * [ Packages  Host and manage packages  ](/features/packages)
    * [ Security  Find and fix vulnerabilities  ](/features/security)
    * [ Codespaces  Instant dev environments  ](/features/codespaces)
    * [ Copilot  Write better code with AI  ](/features/copilot)
    * [ Code review  Manage code changes  ](/features/code-review)
    * [ Issues  Plan and track work  ](/features/issues)
    * [ Discussions  Collaborate outside of code  ](/features/discussions)


Development


  Lifecycle

This ROS2 driver makes use of Lifecycle nodes. If you're not familiar with
lifecycle, or managed nodes, please familiarize yourself with the [ ROS2
design ](https://design.ros2.org/articles/node_lifecycle.html) document on it.

The lifecycle node allow for the driver to have a deterministic setup and tear
down and is a new feature in ROS2. The launch script will need to use a
lifecycle node launcher to transition into the active state to start
processing data.


You can’t perform that action at this time.


[ README.md ](/ros-drivers/ros2_ouster_drivers/blob/ros2/README.md
"README.md")

|


Copy link


If the nodes were developed using rclcpp I could experiment with static
linking, however, I am using rclpy so this is out of the question.


Open


[ ![@clalancette](https://avatars.githubusercontent.com/u/163000?s=52&v=4)
](/clalancette) [
![@mjcarroll](https://avatars.githubusercontent.com/u/279701?s=52&v=4)
](/mjcarroll) [
![@traversaro](https://avatars.githubusercontent.com/u/1857049?s=52&v=4)
](/traversaro) [
![@gavanderhoorn](https://avatars.githubusercontent.com/u/4550046?s=52&v=4)
](/gavanderhoorn) [
![@fujitatomoya](https://avatars.githubusercontent.com/u/43395114?s=52&v=4)
](/fujitatomoya) [
![@CraigBuilds](https://avatars.githubusercontent.com/u/88379416?s=52&v=4)
](/CraigBuilds)


Thank you for your reply [ @clalancette ](https://github.com/clalancette) .


> Why?


In practice though I've found it's too easy for ROS 2 nodes to embed
(implicit) assumptions about the behaviour of a particular RMW, thereby making
a switch to another RMW (even if both/all are DDS-based) non-trivial.


> it would be even better if the user didn't have to install any other pieces
> of software before using the ROS2 application that has been given to them


  Component

This ROS2 driver makes use of Component nodes. If you're not familiar with
component nodes please familiarize yourself with the [ ROS2 design
](https://index.ros.org/doc/ros2/Tutorials/Composition) document on it.

The component node allow for the driver and its processing nodes to be
launched into the same process and is a new feature in ROS2. This allows the
sensor and its data clients to operate without serialization or copying
between nodes sharing a memory pool.

There's a little work in ROS2 Eloquent to launch a component-lifecycle node
using only the roslaunch API. It may be necessary to include the Ouster driver
in your lifecycle manager to transition into the active state when loading the
driver into a process as a component. Example using the ROS2 component
manager:


[ ouster_msgs ](/ros-drivers/ros2_ouster_drivers/tree/ros2/ouster_msgs
"ouster_msgs")

|


 transition to active lifecycle stage (will now stream data)
    ros2 lifecycle set OusterDriver 3


* [ Pricing ](/pricing)


MDOT
METRA
Learn more about netTerrain
netTerrain Resources
Case Studies, Webinars, Trainings & More.


Email Address


Click here for more information:


  Usage with the default driver

Now that we have a connection over the network, lets view some data. After
building your colcon workspace with this package, source the install space,
then run:

    ros2 launch ros2_ouster driver_launch.py

Make sure to update your parameters file if you don't use the default IPs
(10.5.5.1, 10.5.5.87). You may also use the ` .local ` version of your ouster
lidar. To find your IPs, see the ` dnsmasq ` output or check with ` nmap -SP
10.5.5.*/24 ` . An alternative tool is [ avahi-browse
](https://linux.die.net/man/1/avahi-browse) :

    avahi-browse -arlt

Now that your connection is up, you can view this information in RViz. Open an
RViz session and subscribe to the points, images, and IMU topics in the laser
frame. When trying to visualize the point clouds, be sure to change the Fixed
Frame under Global Options to "laser_data_frame" as this is the default parent
frame of the point cloud headers.

When the driver configures itself, it will automatically read the metadata
parameters from the Ouster. If you wish to save these parameters and use them
with captured data (see the next section) then you can save the data to a
specific location using the ` getMetadata ` service that the driver offers. To
use it, run the driver with a real Ouster LiDAR and then make the following
service call:

    ros2 service call /ouster_driver/get_metadata ouster_msgs/srv/GetMetadata "{metadata_filepath: "/path/to/your/metadata.json"}"

The driver will then save all the required metadata to the specified file and
dump the same metadata as a JSON string to the terminal. Alternatively, the
service can be called without specifying a filepath (see below) in which case


[ https://sick.com/lrs4000
](https://s2116941023.t.en25.com/e/er?s=2116941023&lid=13447&elqTrackId=F7F6600A470E84EB80B9F4CE20123D2A&elq=00000000000000000000000000000000&elqaid=9042&elqat=2)


[
![@fujitatomoya](https://avatars.githubusercontent.com/u/43395114?s=80&u=20a48e7d8972be2e39519c3e48215f897767b85f&v=4)
](/fujitatomoya)


[ ![@CraigBuilds](https://avatars.githubusercontent.com/u/88379416?s=80&v=4)
](/CraigBuilds)


[ LICENSE ](/ros-drivers/ros2_ouster_drivers/blob/ros2/LICENSE "LICENSE")

|

|


To help you understand the OSRA and why we’re doing this, we have prepared several documents you can read and reference at your leisure.


  Parameterizing the Active Data Processors

The ` os1_proc_mask ` parameter is set to a mask-like-string used to define
the data processors that should be activated upon startup of the driver. This
will determine the topics that are available for client applications to
consume. The _de facto_ reference for these values are defined in [
processor_factories.hpp ](/ros-
drivers/ros2_ouster_drivers/blob/ros2/ros2_ouster/include/ros2_ouster/processors/processor_factories.hpp)
. It is recommended to only use the processors that you require for your
application.

The available data processors are:

  * **IMG** Provides 8-bit image topics encoding the noise, range, intensity, and reflectivitiy from a scan.
  * **PCL** Provides a point cloud encoding of a LiDAR scan
  * **IMU** Provides a data stream from the LiDAR's integral IMU
  * **SCAN** Provides a 2D LaserScan from the closest to 0-degree azimuth ring

To construct a valid string for the ` os1_proc_mask ` parameter, join the
tokens from above (in any combination) with the pipe character ( ` | ` ). For
example, valid strings include but are not limited to: ` IMG|PCL ` , `
IMG|PCL|IMU ` , ` PCL ` , etc. The default value is ` IMG|PCL|IMU|SCAN ` .

More details about data processors in the driver is provided in the
Additional Lidar Processing  section below.


The current solution I am using is to send a whole virtual machine (or send a
physical computer) with the software installed on it to the user. This is very
heavyweight, and sending a file or download link would be preferable. Other
solutions are Docker for Windows, or to expect the user to set up the ROS2
environment beforehand. Both of these involve some software development
experience.


[ ![@gavanderhoorn](https://avatars.githubusercontent.com/u/4550046?s=80&v=4)
](/gavanderhoorn)


Copy link


  Watchers

[ **9** watching ](/ros-drivers/ros2_ouster_drivers/watchers)


Complete Hybrid Infrastructure Views
Complete Hybrid Infrastructure Views
Automatically visualize your entire IT stack. Get real-time views of your Cloud, Virtual and Physical Networks.


A homeowner buys a robotic vacuum cleaner. They use an app to control the
cleaner, schedule cleaning times, and monitor its progress. The homeowner
interacts with a user-friendly interface, which, unbeknownst to them,
communicates with the cleaner through ROS2. They can install 3rd party tools
to expand their vacuum's capability.


However, I don't think it is as simple as providing an executable. While that
would help the user to get the core of ROS 2, one of the huge benefits of ROS
in general is the ecosystem. On Linux, for instance, you can choose from
thousands of packages to install, that will help you with manipulation,
navigation, embedded systems, ground truth, etc.


i am not really following this... i mean even with ` snap ` , we need to
install ` snapd ` ?
if that requirement comes down to application framework, each framework would
have own application deployment procedure?
i am not sure if that is really useful for the user space application...
maybe i am mistaken, we can keep this open more feedback.

---

All reactions


Reality however sometimes makes this difficult/impossible.

---

👍  2  traversaro and CraigBuilds reacted with thumbs up emoji


Sorry, something went wrong.


    * [ Learning Pathways  ](https://resources.github.com/learn/pathways/)
    * [ White papers, Ebooks, Webinars  ](https://resources.github.com/)
    * [ Customer Stories ](/customer-stories)
    * [ Partners  ](https://partner.github.com/)


[ Sign in
](/login?return_to=https%3A%2F%2Fgithub.com%2Fros2%2Fros2%2Fissues%2F1514)


pyinstaller .\src\my_pkg\my_pkg\main.py --collect-all rclpy --collect-all rosidl_parser --collect-all rcl_interfaces --collect-all builtin_interfaces --collect-all std_msgs --add-data C:\dev\ros2_humble:ros2_humble -y


We have created a second thread where you can post questions you would like answered. The OSRF team will work to get an answer for each question, and the answer will be posted in this announcement thread, to ensure it doesn’t get lost amongst the noise.
We will be holding a live Question and Answer session at  March 20, 2024 4:00 PM →  5:30 PM (Los Angeles) . This session will be attended by the OSRF team and moderated by Aaron Blasdel. We will post detailed instructions on participation closer to the time.
Finally, if you or your organization is interested in joining the OSRA as a paying member and supporting the future of open source robotics, you can apply right now. See the section on joining on the OSRA’s website for more information. We look forward to working with our members and all other contributors and users on growing open source robotics on the sound foundation that the OSRA will provide.


The Open Source Robotics Foundation, aka Open Robotics, is pleased to announce the creation of the Open Source Robotics Alliance (OSRA). The OSRA is a new initiative from the OSRF to ensure the long-term stability and health of our open-source robot software projects.


**[ mjcarroll ](/mjcarroll) ** commented  Feb 8, 2024


Download the LiDAR System guide


 Set parameters
    ros2 param set OusterDriver lidar_ip 10.5.5.86
    ros2 param set OusterDriver computer_ip 10.5.5.1


##  Footer


  About

ROS2 Drivers for the Ouster OS-0, OS-1, and OS-2 Lidars

[ ouster.com/ ](https://ouster.com/ "https://ouster.com/")


Become familiar with the LRS4000 2D LiDAR scanner! The LRS4000 is a durable
and compact 2D sensor with high frequency resolution, maximum scanning
frequency of up to 25 Hz, and maximum opening angle of up to 360 degrees.


> Other solutions are Docker for Windows, or to expect the user to set up the
> ROS2 environment before-hand.


    * [ Topics ](/topics)
    * [ Trending ](/trending)
    * [ Collections ](/collections)


Repositories


All reactions


[ ouster_msgs ](/ros-drivers/ros2_ouster_drivers/tree/ros2/ouster_msgs
"ouster_msgs")

|

|


* [ The ReadME Project  GitHub community articles  ](/readme)


[ CraigBuilds ](/CraigBuilds) opened this issue  Jan 26, 2024  · 13 comments


Toggle navigation


**[ CraigBuilds ](/CraigBuilds) ** commented  Jan 29, 2024  •


Cancel  Submit feedback


edited


> The cost. Unfortunately Docker on Windows requires Docker Desktop


To be super-clear, I think that ROS2 is really great, I am just not sure if I
would like to use it as interface to closed source components that I may not
be able to update in the future.

---

All reactions


Projects


> To clarify, I am not suggesting providing ROS2 as an executable, but asking
> for the ability to turn applications that use ROS2 into standalone
> applications that do not need ROS2 installed first. (i.e static-linking,
> bundled etc).


[ ros2_ouster ](/ros-drivers/ros2_ouster_drivers/tree/ros2/ros2_ouster
"ros2_ouster")

|

|


53
    dnsmasq: read /etc/hosts - 10 addresses

You need to wait until you see something like:

    dnsmasq-dhcp: DHCPDISCOVER(enxa0cec8c012f8) [HWaddr]
    dnsmasq-dhcp: DHCPOFFER(enxa0cec8c012f8) 10.5.5.87 [HWaddr]
    dnsmasq-dhcp: DHCPREQUEST(enxa0cec8c012f8) 10.5.5.87 [HWaddr]
    dnsmasq-dhcp: DHCPACK(enxa0cec8c012f8) 10.5.5.87 [HWaddr] os1-SerialNumXX

Now you're ready for business. Lets see what IP address it's on (10.5.5.87).
Lets ping it

    ping 10.5.5.87

and we're good to go!


Sorry, something went wrong.


[ Sign up
](/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-
name%3E%2F%3Crepo-
name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-
repo&source_repo=ros2%2Fros2)


As I've said, the best solution I have found so far is to give users virtual
machines, but it is a very heavyweight solution and it does not feel like a
polished experience.

---

All reactions


**[ fujitatomoya ](/fujitatomoya) ** commented  Jan 26, 2024


Copy link


Author


OSRA explainer
OSRA FAQ
Plain English version of the OSRA Charter
You may also find the following formal documents useful.


    * [ Enterprise ](/enterprise)
    * [ Teams ](/team)
    * [ Startups ](/enterprise/startups)
    * [ Education  ](https://education.github.com)


  Ouster Messages

A message ` Metadata ` was created to describe the metadata of the lidars. In
addition the ` GetMetadata ` service type will be used to get the metadata
from a running driver.


[ Terms of Use  ](https://www.sick.com/terms-of-
use/?elqTrackId=9824a3f387f74741a2f8b199be1e8b31&elq=00000000000000000000000000000000&elqaid=9042&elqat=2&elqCampaignId=&elqcst=272&elqcsid=5796)
|


To capture more data about the surrounding contours, you take the pulse of
light and bounce it off a rotating mirror. As the laser rotates around, you
get all these measurements in a fan around the LiDAR, which forms a flat plane
of measurement. This plane of measurement can be stacked with subsequent
planes (like a loaf of sliced bread) to create a three-dimensional map. This
is called a point cloud.


> > Interoperability between closed software provided by different non-
> coordinated vendors
>
> I think this could be achieved. You can ` apt-install ` a ros2 node on Linux
> (which could be closed source), and as far as I'm aware, this will work with
> any RMW. It could work the same on Windows. The user installs the ROS2 node
> (likely using an installer, the idiomatic way to install programs for non-
> technical users on Windows), and this will also install the ROS2
> dependencies if required, along with the default RMW. Another installer
> could be used for installing and setting the current RMW in use. Incorrectly
> configured components would not be interoperable, but this could be solved
> with documentation. i.e. "If you use our product, you must use this RMW".
> ROS2 isn't providing interoperability here, it is the RMW, however, ROS2
> applications should work with any RMW.


  Additional Lidar Units

To create a new lidar for this driver, you only need to make an implementation
of the ` ros2_ouster::SensorInterface ` class and include any required SDKs.
Then, in the ` driver_types.hpp ` file, add your new interface as a template
of the ` OusterDriver ` and you're good to go.

You may need to add an additional ` main ` method for the new templated
program, depending if you're using components. If it uses another underlying
SDK other than ` sensor ` you will also need to create new processors for it
as the processors are bound to a specific unit as the data formatting may be
different. If they are the same, you can reuse the ` sensor ` processors.


If you are interested in helping, I think the best thing you could do would be
to get in touch with the Robostack people and see how you could help. In
particular, it looks like only about 30-50% of packages currently build on
Robostack, and Robostack only supports Humble at the moment. It would be best
if more of those packages built and worked, and Robostack also supported Iron
and Rolling.

---

🚀  1  traversaro reacted with rocket emoji


Jump to bottom


All reactions


  One time setup with IPv4

These are bash commands in Linux to setup the connection. These steps only
need to happen the first time you set up the laser. After the first time, when
you establish the network connection to the sensor, you can just select this
created network profile. **Ensure the sensor is powered off and disconnected
at this point.**

The ` [eth name] ` is the nework interface you're connecting to. On older
Linux systems, that's ` eth0 ` or similar. In newer versions, its ` enp... `
or ` enx... ` when you look at the output of ` ifconfig ` .

     ip addr flush dev [eth name]
     ip addr show dev [eth name]

The output you see from ` show ` should look something like ` [eth name] ...
state DOWN ... ` . Its only important that you see ` DOWN ` and not ` UP ` .
Next, lets setup a static IP address for your machine so you can rely on this
in the future. Ouster uses the 10.5.5.* range, and I don't see a compelling
reason to argue with it.

    sudo ip addr add 10.5.5.1/24 dev [eth name]

Now, lets setup the connection. At this point you may now plug in and power on
your sensor.

    sudo ip link set [eth name] up
    sudo addr show dev [eth name]

The output you see from ` show ` should look something like ` [eth name] ...
state UP ... ` . Its only important that you see ` UP ` now and not ` DOWN ` .
At this point, you've setup the networking needed for the one time setup.


#  Deploying/distributing a ROS2 application as a standalone (self-contained)
package on Windows is difficult. (We need a Snap equivalent for Windows)
#1514


For


Also, it's been a while since I used Docker on Windows (before they changed
the subscription model), but my memory of it was that it was not as good as
the Linux version, and had many problems. This may have changed now to be
fair.


> In practice though I've found it's too easy for ROS 2 nodes to embed
> (implicit) assumptions about the behaviour of a particular RMW, thereby
> making a switch to another RMW (even if both/all are DDS-based) non-trivial.


###  Footer navigation


Learn More
Visualize your VCenter Environment Automatically
Visualize your VCenter Environment Automatically
By Jan Durnhofer -
As more and more IT information today resides within virtual environments, there is an increasing need to document this information within a visual repository. Because of this growing need, we are often asked if VMware data can be visualized in netTerrain. Why…? Here’s what we’ve gleaned from our customers: the main reason to visualize VMware data is to have …


Name


Pick a username


Sorry for the OT, I still think that it would be cool to simplify deployment
of Windows software using ROS 2, I am just afraid that it would not magically
provide interoperability between closed software provided by different non-
coordinated vendors.

---

All reactions


LiDAR technology has a number of advantages, like :


edited


For what it is worth, you are absolutely right. Installing ROS 2 on Windows
today is very long, tedious, and error-prone.


  License

[ Apache-2.0 license ](/ros-drivers/ros2_ouster_drivers/blob/ros2/LICENSE)

[ 127  stars ](/ros-drivers/ros2_ouster_drivers/stargazers) [ 73  forks
](/ros-drivers/ros2_ouster_drivers/forks) [ Branches  ](/ros-
drivers/ros2_ouster_drivers/branches) [ Tags  ](/ros-
drivers/ros2_ouster_drivers/tags) [ Activity  ](/ros-
drivers/ros2_ouster_drivers/activity)

[ Star  ](/login?return_to=%2Fros-drivers%2Fros2_ouster_drivers)

[ Notifications ](/login?return_to=%2Fros-drivers%2Fros2_ouster_drivers)

  * [ Code  ](/ros-drivers/ros2_ouster_drivers)
  * [ Issues  21  ](/ros-drivers/ros2_ouster_drivers/issues)
  * [ Pull requests  2  ](/ros-drivers/ros2_ouster_drivers/pulls)
  * [ Actions  ](/ros-drivers/ros2_ouster_drivers/actions)
  * [ Projects  0  ](/ros-drivers/ros2_ouster_drivers/projects)
  * [ Security  ](/ros-drivers/ros2_ouster_drivers/security)
  * [ Insights  ](/ros-drivers/ros2_ouster_drivers/pulse)

Additional navigation options

  * [ Code  ](/ros-drivers/ros2_ouster_drivers)
  * [ Issues  ](/ros-drivers/ros2_ouster_drivers/issues)
  * [ Pull requests  ](/ros-drivers/ros2_ouster_drivers/pulls)
  * [ Actions  ](/ros-drivers/ros2_ouster_drivers/actions)
  * [ Projects  ](/ros-drivers/ros2_ouster_drivers/projects)
  * [ Security  ](/ros-drivers/ros2_ouster_drivers/security)
  * [ Insights  ](/ros-drivers/ros2_ouster_drivers/pulse)


it can start the ROS 2 application with one line? (the above CLI example is on
linux, but it should be similar?)

---

All reactions


    * [ CI/CD & Automation ](/solutions/ci-cd/)
    * [ DevOps ](/solutions/devops/)
    * [ DevSecOps  ](https://resources.github.com/devops/fundamentals/devsecops/)


  Timestamp Modes

Referring to the parameter table above, the ` timestamp_mode ` parameter has
four allowable options (as of this writing). They are: `
TIME_FROM_INTERNAL_OSC ` , ` TIME_FROM_SYNC_PULSE_IN ` , ` TIME_FROM_PTP_1588
` , ` TIME_FROM_ROS_RECEPTION ` . A description of each now follows.


This structure, and the use of paid membership to provide financial support for open-source projects, is not new. It is a commonly-used model amongst open-source non-profit organizations such as the OSRF. We are walking a well-trodden path, following in the footsteps of such organizations as The Linux Foundation, the Eclipse Foundation, and the Dronecode Foundation.


The transition of governance to the OSRA is in the final stages of preparation. We expect to commence operation on the 15th of April, 2024. Between now and the 15th of April there may be some small disruptions as we organize GitHub permissions, calendars, mailing lists, and so on. Once the OSRA commences operations, our four PMCs will take over the day-to-day operations of their respective projects.


 component manager for dynamic loading (also may be done through launch)
    ros2 run rclcpp_components component_container


Copy link


    tomoyafujita@~/DVT >docker run --rm ros:humble ros2 topic pub /chatter std_msgs/String "data: Hello Windows"
    publisher: beginning loop
    publishing #1: std_msgs.msg.String(data='Hello Windows')

    publishing #2: std_msgs.msg.String(data='Hello Windows')

    publishing #3: std_msgs.msg.String(data='Hello Windows')

    ...


####  Final questions


Email Address  *


  Footer navigation

  * [ Terms ](https://docs.github.com/site-policy/github-terms/github-terms-of-service)
  * [ Privacy ](https://docs.github.com/site-policy/privacy-policies/github-privacy-statement)
  * [ Security ](/security)
  * [ Status ](https://www.githubstatus.com/)
  * [ Docs ](https://docs.github.com/)
  * [ Contact ](https://support.github.com?tags=dotcom-footer)
  * Manage cookies
  * Do not share my personal information

You can’t perform that action at this time.


> However, I don't think it is as simple as providing an executable.


[ CHANGELOG.rst ](/ros-drivers/ros2_ouster_drivers/blob/ros2/CHANGELOG.rst
"CHANGELOG.rst")

|


    * [ All features ](/features)
    * [ Documentation  ](https://docs.github.com)
    * [ GitHub Skills  ](https://skills.github.com/)
    * [ Blog  ](https://github.blog)


[ http://www.sick.com/LMS1000
](https://s2116941023.t.en25.com/e/er?s=2116941023&lid=13445&elqTrackId=F48AA9A4F78D3192761090789540ECE8&elq=00000000000000000000000000000000&elqaid=9042&elqat=2)


Platinum: Intrinsic, NVIDIA, and Qualcomm Technologies
Gold: Apex.AI and Zettascale
Silver: Clearpath Robotics, Ekumen, eProsima, and PickNik
Associate: Silicon Valley Robotics
Supporting Organisations: Canonical and Open Navigation
We have also received commitments to join from organizations such as Bosch and ROS-Industrial.


* Solutions


[ CraigBuilds ](/CraigBuilds) opened this issue  Jan 26, 2024  · 13 comments


For decades, LiDAR detector technology has been used as an effective means of
detection and ranging in various settings and industries. But what exactly is
it and where did it come from? This page explains what the acronym LiDAR
stands for and how this technology can be used effectively.


Edit: I fully expect other commenters to respond to this with " _yes, but of
course you shouldn't do that_ ".


  * [ Code  ](/ros2/ros2)
  * [ Issues  ](/ros2/ros2/issues)
  * [ Pull requests  ](/ros2/ros2/pulls)
  * [ Actions  ](/ros2/ros2/actions)
  * [ Security  ](/ros2/ros2/security)
  * [ Insights  ](/ros2/ros2/pulse)


That's true, but I think there could be an even better solution than snaps.
Also, linux users tend to be more comfortable with the command line and having
to install dependencies.


Learn more
Latest posts:
Will Network Diagram Software Visualize Your Third-Party Apps & Data?
Will Network Diagram Software Visualize Your Third-Party Apps & Data?
By Fred Koh - October 9, 2023
Tired of dealing with network headaches stemming from a lack of insights and visibility? If, for example, you’re a new company network administrator, it can be a real…errr maybe downright impossible….challenge to figure out what’s installed without doing a tedious site survey, right? And let’s be honest, those spreadsheets and manual network diagrams in a SharePoint folder, …


[ ![@CraigBuilds](https://avatars.githubusercontent.com/u/88379416?s=80&v=4)
](/CraigBuilds)


This creates a folder than can be zipped and sent to the user, which includes
an executable (entry point is the "main.py" node) and the ros2_humble install
directory which includes the setup.ps1 script. It also bundles the python
interpreter and any other dependencies so it is a truly standalone executable.
This could likely be improved further with pyinstaller hooks that will get the
executable to run the setup.ps1 script first. I haven't tried it with a ROS2
node that depends on other local ros2 packages.


One App - All Clouds
One App - All Clouds
Ditch the gazillion consoles to view your cloud. Access information graphically and not just tables.


Resources


* 👍  1 reaction


Sorry, something went wrong.


  Using IPv6 with link local

Instead of having to configure ` dnsmasq ` and static addresses in the
previous section, you can use link local IPv6 addresses.

  1. Find the link local address of the Ouster. With avahi-browse, we can find the address of the ouster by browsing all non-local services and resolving them.

    $ avahi-browse -arlt
    +   eth2 IPv6 Ouster Sensor 992109000xxx                    _roger._tcp          local
    +   eth2 IPv4 Ouster Sensor 992109000xxx                    _roger._tcp          local
    =   eth2 IPv6 Ouster Sensor 992109000xxx                    _roger._tcp          local
       hostname = [os-992109000xxx.local]
       address = [fe80::be0f:a7ff:fe00:2861]
       port = [7501]
       txt = ["fw=ousteros-image-prod-aries-v2.0.0+20201124065024" "sn=992109000xxx" "pn=840-102144-D"]
    =   eth2 IPv4 Ouster Sensor 992109000xxx                    _roger._tcp          local
       hostname = [os-992109000xxx.local]
       address = [192.168.90.2]
       port = [7501]
       txt = ["fw=ousteros-image-prod-aries-v2.0.0+20201124065024" "sn=992109000xxx" "pn=840-102144-D"]

As shown above, on interface ` eth2 ` , the ouster has an IPv6 link local
address of ` fe80::be0f:a7ff:fe00:2861 ` .

To use link local addressing with IPv6, the standard way to add a scope ID is
appended with a ` % ` character like so in ` sensor.yaml ` . Automatic
detection for computer IP address can be used with an empty string.

    lidar_ip: "fe80::be0f:a7ff:fe00:2861%eth2"
    computer_ip: ""

Note that this feature is only available with the default driver version,
configured by ` driver_config.yaml ` . When running the Tins-based driver (see
the following sections), both the LiDAR and computer IP address must be
specified in ` tins_driver_config.yaml ` .


    * [ DevSecOps  ](https://resources.github.com/devops/fundamentals/devsecops/)

Resources

    * [ Learning Pathways  ](https://resources.github.com/learn/pathways/)
    * [ White papers, Ebooks, Webinars  ](https://resources.github.com/)
    * [ Customer Stories ](/customer-stories)
    * [ Partners  ](https://partner.github.com/)

  * Open Source

    * [ GitHub Sponsors  Fund open source developers  ](/sponsors)

    * [ The ReadME Project  GitHub community articles  ](/readme)

Repositories

    * [ Topics ](/topics)
    * [ Trending ](/trending)
    * [ Collections ](/collections)

  * [ Pricing ](/pricing)

Search or jump to...


[ README.md ](/ros-drivers/ros2_ouster_drivers/blob/ros2/README.md
"README.md")

|

|

View all files


I have asked for advice on Robotics Stack Exchange, however, it seems that
there is no standard way to do this.


> ROS2 isn't providing interoperability here, it is the RMW, however, ROS2
> applications should work with any RMW.


[
](https://sick.com?elqTrackId=50867bce0cb5457ebe6a8038caed6e4c&elqaid=9042&elqat=2
"SICK Global Website")


Copy link


####  Feature description


edited


None yet


**[ gavanderhoorn ](/gavanderhoorn) ** commented  Feb 28, 2024  •


First Name  *


  Usage with Tins-based driver

If you want to use the driver to read data from a pcap file, you can use the `
Tins ` -based driver. To do this, open the ` tins_driver_config.yaml ` file
and edit the following parameter:

  * ` ethernet_device ` : Change this to a working ethernet device on your computer that you plan to replay data through (e.g. "eth1").

You can run the Tins driver with the command below. This will use the default
` ouster_os0128_1024_metadata.json ` file:

    ros2 launch ros2_ouster tins_driver_launch.py

Alternatively, you can change the metadata being used by specifying the
metadata filepath as shown below. You can generate a metadata file using the `
getMetadata ` service as shown in the previous section. Or you can use one of
the example metadata files provided, which come from an Ouster OS0-128 in
either 1024x10 or 2048x10 mode.

    ros2 launch ros2_ouster tins_driver_launch.py metadata_filepath:=/path/to/metadata.json

After launching the driver, in a new terminal, you can replay a pcap file of
recorded ouster data using the following command (as an example):

    sudo tcpreplay --intf1=eth1 saved_ouster_data.pcap

You may need to run this command with ` sudo ` . Note that this driver version
will also work with a live Ouster sensor, provided the data is coming into the
correct ethernet device, and the parameters in the metadata file match those
of the sensor. However it is recommended that you run the default drive with a
real sensor, as this will guarantee that the metadata settings are correct.


[
![@mjcarroll](https://avatars.githubusercontent.com/u/279701?s=80&u=6930bd5ee4cfa665c62e3745702b254687eb4d3d&v=4)
](/mjcarroll)


Author


Looking for
Network Documentation,
DCIM or OSP software?
Learn more
netTerrain LogicalnetTerrain OSPnetTerrain DCIMnetTerrain LogicalnetTerrain OSPnetTerrain DCIMnetTerrain Logical
We use cookies and other tracking technologies to improve your browsing experience on our website, to show you personalized content and targeted ads, to analyze our website traffic, and to understand where our visitors are coming from.


> if that requirement comes down to application framework, each framework
> would have own application deployment procedure?
>  i am not sure if that is really useful for the user space application...
>  maybe i am mistaken, we can keep this open more feedback.


The new 3D and 2D LiDAR sensors MRS1000 and LMS1000 from SICK use the
innovative measurement principle HDDM+.


I may be wrong, but (unless I am missing something, and in that case please
correct me) ROS 2 (as of early 2024) is not the appropriate technology to do
something like that, beside any kind of technical deployment issue such as the
one described here. In general two different piece of software that use
different versions of ROS 2 and/or different RMW may not communicate
appropriately (see [
https://docs.ros.org/en/rolling/Concepts/Intermediate/About-Different-
Middleware-Vendors.html#multiple-rmw-implementations
](https://docs.ros.org/en/rolling/Concepts/Intermediate/About-Different-
Middleware-Vendors.html#multiple-rmw-implementations) , [
ros2/ros2_documentation#3288
](https://github.com/ros2/ros2_documentation/issues/3288) , [
https://discourse.ros.org/t/ros-2-tsc-meeting-minutes-2023-02-16/29927
](https://discourse.ros.org/t/ros-2-tsc-meeting-minutes-2023-02-16/29927) ).
The fact that in the future there will be official supported non-DDS RMW will
make this even worse.


that driver.
` use_system_default_qos ` |  bool  |  Publish data with default QoS for
rosbag2 recording, default ` False `
` timestamp_mode ` |  String  |  Method used to timestamp measurements,
default ` TIME_FROM_INTERNAL_OSC `
` os1_proc_mask ` |  String  |  Mask encoding data processors to activate,
default ` IMG | PCL | IMU | SCAN `
` pointcloud_filter_zero_points ` |  bool  |  Reduce pointcloud size by
omitting (0, 0, 0) points, default ` False ` . If used, will make the PC2
unstructured.

Note: TF will provide you the transformations from the sensor frame to each of
the data frames.


[ Privacy Policy
](https://www.sick.com/dataprotection/?elqTrackId=51b7131f5363460796f6329d0904f69f&elq=00000000000000000000000000000000&elqaid=9042&elqat=2&elqCampaignId=&elqcst=272&elqcsid=5796)


To see all available qualifiers, see our [ documentation
](https://docs.github.com/search-github/github-code-search/understanding-
github-code-search-syntax) .


  Stars

[ **127** stars ](/ros-drivers/ros2_ouster_drivers/stargazers)


**Have a question about this project?** Sign up for a free GitHub account to
open an issue and contact its maintainers and the community.


I have also recently been told about:


  Repository files navigation

  * README
  * Apache-2.0 license


**[ CraigBuilds ](/CraigBuilds) ** commented  Feb 28, 2024  •


No one assigned


####  Related Videos


[ https://github.com/ms-iot/msix_ros ](https://github.com/ms-iot/msix_ros)


No branches or pull requests


For more information, visit


##  Comments


6 participants


I agree that having the full ROS ecosystem is beneficial for some. However I
think it's useful to think about the types of users more broadly, and not all
users will benefit from being able to tap into the wider ROS ecosystem.


[ Sign in
](/login?return_to=https%3A%2F%2Fgithub.com%2Fros2%2Fros2%2Fissues%2F1514)


  Search code, repositories, users, issues, pull requests...

Search

Clear

[ Search syntax tips ](https://docs.github.com/search-github/github-code-
search/understanding-github-code-search-syntax)


New issue


####  Implementation considerations


Copy link


Reduce Troubleshooting Times
Reduce Troubleshooting Times
Improve mean-time-to-repair and reduce downtime with visual alerts, heatmaps, notifications and more.


  Use saved searches to filter your results more quickly

Name

Query

To see all available qualifiers, see our [ documentation
](https://docs.github.com/search-github/github-code-search/understanding-
github-code-search-syntax) .

Cancel  Create saved search

[ Sign in ](/login?return_to=https%3A%2F%2Fgithub.com%2Fros-
drivers%2Fros2_ouster_drivers)

[ Sign up
](/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-
name%3E%2F%3Crepo-name%3E&source=header-repo&source_repo=ros-
drivers%2Fros2_ouster_drivers)

You signed in with another tab or window. [ Reload ]() to refresh your
session.  You signed out in another tab or window. [ Reload ]() to refresh
your session.  You switched accounts on another tab or window. [ Reload ]() to
refresh your session.  Dismiss alert

{{ message }}

[ ros-drivers ](/ros-drivers) /  **[ ros2_ouster_drivers ](/ros-
drivers/ros2_ouster_drivers) ** Public

  * [ Notifications ](/login?return_to=%2Fros-drivers%2Fros2_ouster_drivers)
  * [ Fork  73  ](/login?return_to=%2Fros-drivers%2Fros2_ouster_drivers)
  * [ Star  127  ](/login?return_to=%2Fros-drivers%2Fros2_ouster_drivers)

  *

ROS2 Drivers for the Ouster OS-0, OS-1, and OS-2 Lidars

[ ouster.com/ ](https://ouster.com/ "https://ouster.com/")


Saved searches


**[ traversaro ](/traversaro) ** commented  Feb 28, 2024  •


  ` TIME_FROM_PTP_1588 `

Synchronize with an external PTP master. A monotonically increasing counter
that will begin counting seconds and nanoseconds since startup. As soon as a
1588 sync event happens, the time will be updated to seconds and nanoseconds
since 1970. The counter must always count forward in time. If another 1588
sync event happens the counter will either jump forward to match the new time,
or slow itself down. It is reported at ns resolution (there is both a second
and nanosecond register in every UDP packet), but the minimum increment
varies. Accuracy is +/- <50 us from the 1588 master.


Milestone


###  Learn the difference between HDDM and HDDM+ Technology


All reactions


Eventually we'd like to get there with Windows as well. I think the most
promising thing we could do would be to switch to something like [ Robostack
](https://robostack.github.io/) , which would allow us to provide that same
experience on Windows. Unfortunately we haven't had a lot of time to work on
this, so it is just an idea at this point.


##  **What is LiDAR?**


Business Phone


  ROS Interfaces

Topic  |  Type  |  Description
---|---|---
` scan ` |  sensor_msgs/LaserScan  |  2D laser scan of the 0-angle ring
` range_image ` |  sensor_msgs/Image  |  Image of the range values from the
sensor
` intensity_image ` |  sensor_msgs/Image  |  Image of the Intensity values
from the sensor
` noise_image ` |  sensor_msgs/Image  |  Image of the noise values from the
sensor
` reflectivity_image ` |  sensor_msgs/Image  |  Image of the reflectivity
values from the sensor
` points ` |  sensor_msgs/PointCloud2  |  3D Pointcloud generated from a 360
rotation
` imu ` |  sensor_msgs/Imu  |  IMU values at transmission rate
Service  |  Type  |  Description
---|---|---
` reset ` |  std_srvs/Empty  |  Reset the sensor's connection
` GetMetadata ` |  ouster_msgs/GetMetadata  |  Get information about the
sensor. A optional filepath can be specified to save the metadata to a local
file.
Parameter  |  Type  |  Description
---|---|---
` lidar_ip ` |  String  |  IP or hostname of lidar (ex. 10.5.5.87,
os1-serialno.local)
` computer_ip ` |  String  |  IP or hostname of computer to get data (ex.
10.5.5.1) or broadcast (ex. 255.255.255.255) or if using the default driver,
"" for automatic detection
` lidar_mode ` |  String  |  Mode of data capture, default ` 512x10 `
` imu_port ` |  int  |  Port of IMU data, default 7503
` lidar_port ` |  int  |  Port of laser data, default 7502
` sensor_frame ` |  String  |  TF frame of sensor, default `
laser_sensor_frame `
` laser_frame ` |  String  |  TF frame of laser data, default `
laser_data_frame `
` imu_frame ` |  String  |  TF frame of imu data, default ` imu_data_frame `
` ethernet_device ` |  String  |  An ethernet device (e.g. eth0 or eno1) on
which the Tins driver will listen for packets. Note that this is only a
parameter for the Tins driver, and is only specified in the config file for


The issue of RMW compatibility was overcome by prescribing one RMW that is
compatible with our system, and documenting that future extensions must also
use this. We also use none-ros2 components in our system that use DDS, so we
were restricted to that vendor's version of DDS from the start anyway.


This is another project with a potential solution to deploy/distribute ROS2 on
Windows.

---

All reactions


> Some examples of these users (some are real, some are made up for the sake
> of this post):
>
> A team of robotics and software engineers (api-users) deliver a robotics
> facility, control system, graphical user interfaces, and training tools, to
> a waste management site. The team at the waste management site (end-users)
> use the graphical user interfaces (which uses ROS2) to control the robots.
> They also have visualization tools, logging tools, planning tools etc, all
> which use ROS2 yet can be used without knowing what ROS2 is. There are also
> simulators that publish the same ROS2 data as the robots. These can be used
> in an office alongside the same digital tools used for the real operations.
> This office set-up is a particular pain point as the end-users do not have
> the expertise needed to install the dependencies.
>
> A homeowner buys a robotic vacuum cleaner. They use an app to control the
> cleaner, schedule cleaning times, and monitor its progress. The homeowner
> interacts with a user-friendly interface, which, unbeknownst to them,
> communicates with the cleaner through ROS2. They can install 3rd party tools
> to expand their vacuum's capability.
>
> An agricultural technician uses a tablet to control a drone for crop
> monitoring. The drone, equipped with ROS2 for flight control and data
> processing, collects and sends back real-time data on crop health. The
> technician, focusing on agricultural expertise rather than robotics,
> utilizes this data for farm management decisions.


Password


* 🚀  1 reaction


Complete Hybrid Infrastructure Views
Complete Hybrid Infrastructure Views
Automatically visualize your entire IT stack. Get real-time views of your Cloud, Virtual and Physical Networks.


  * [ Code  ](/ros2/ros2)
  * [ Issues  127  ](/ros2/ros2/issues)
  * [ Pull requests  2  ](/ros2/ros2/pulls)
  * [ Actions  ](/ros2/ros2/actions)
  * [ Security  ](/ros2/ros2/security)
  * [ Insights  ](/ros2/ros2/pulse)


Learn More
How Does It Work?
Discover
Visualize
Assess
Control
Use Cases
Multi-Cloud Visualization
Cloud Monitoring
Cloud Troubleshooting
Security Audits
Technology Supported
AWS
Azure
Google Cloud
On-Premises IT
Support
Open Ticket
Chat Support
About
Get in Touch
Blog
Copyright © 2024 Graphical Networks. All rights reserved. / Privacy


LiDAR is an acronym, standing for  **LI** ght  **D** etection  **A** nd  **R**
anging. It operates on a very well tested concept in the industry called time
of flight. We know the speed of light through our atmosphere, so that means we
can send a pulse of light, bounce it off a target, and measure the amount of
time it takes to come back. By halving the total time and multiplying by the
speed of light, we now know the distance to the target. This is the core of
how LiDAR works.


[
![@fujitatomoya](https://avatars.githubusercontent.com/u/43395114?s=80&u=20a48e7d8972be2e39519c3e48215f897767b85f&v=4)
](/fujitatomoya)


When this is run on the users computer it successfully runs ` rclpy.init() ` ,
but it fails during the creation of the Node because it cannot find the
licence for RTI connext. I use RTI Connext on my PC, but since the user does
not have the environment variables set I assumed it would use the default RMW
(which should be contained in the ros2_humble directory).


Copy link


Search


  [ Releases  11  ](/ros-drivers/ros2_ouster_drivers/releases)

[ 0.5.1  Latest  Feb 17, 2024  ](/ros-
drivers/ros2_ouster_drivers/releases/tag/0.5.1)

[ \+ 10 releases ](/ros-drivers/ros2_ouster_drivers/releases)


###  Find the right LiDAR sensor for your application with the SICK TiM series
LiDAR System Guide:


  * [ Notifications ](/login?return_to=%2Fros2%2Fros2)
  * [ Fork  589  ](/login?return_to=%2Fros2%2Fros2)
  * [ Star  3.1k  ](/login?return_to=%2Fros2%2Fros2)


[ LICENSE ](/ros-drivers/ros2_ouster_drivers/blob/ros2/LICENSE "LICENSE")

|


  ` TIME_FROM_ROS_RECEPTION `

The sensor will run in ` TIME_FROM_INTERNAL_OSC ` time mode but data are
stamped with the ROS time when they are received. The inherent latency between
when the data were sampled by the LiDAR and when the data were received by
this ROS node is not modelled. This approach may be acceptable to get up and
running quickly or for static applications. However, for mobile robots,
particularly those traveling at higher speeds, it is not recommended to use
this ` timestamp_mode ` . When running in this mode, the on-LiDAR `
timestamp_mode ` will not be set by this driver.


Sign up for GitHub


#  Provide feedback


Skip to content


  ros-drivers/ros2_ouster_drivers

This commit does not belong to any branch on this repository, and may belong
to a fork outside of the repository.

ros2

[ Branches  ](/ros-drivers/ros2_ouster_drivers/branches) [ Tags  ](/ros-
drivers/ros2_ouster_drivers/tags)

[ ](/ros-drivers/ros2_ouster_drivers/branches) [ ](/ros-
drivers/ros2_ouster_drivers/tags)

Go to file

Code


Why?


Sorry, something went wrong.


  ROS2 Ouster Drivers

These are an implementation of ROS2 drivers for the Ouster lidar. This
includes all models of the OS-x from 16 to 128 beams running the firmware
2.2-2.4.

You can find a few videos looking over the sensor below. They both introduce
the ROS1 driver but are extremely useful references regardless:

OS-1 Networking Setup  |  OS-1 Data Overview
---|---
[ ![IMAGE ALT TEXT
HERE](https://camo.githubusercontent.com/048a54b301390dec4a0566beeadbbdb49a7e1fd24323a64232c71872b450f9bd/687474703a2f2f696d672e796f75747562652e636f6d2f76692f3932616a586a497844474d2f302e6a7067)
](http://www.youtube.com/watch?v=92ajXjIxDGM) |  [ ![IMAGE ALT TEXT
HERE](https://camo.githubusercontent.com/bf7c8030fcc0abde356854790dbd1fa1c3422860a076e2efd312322424bc5687/687474703a2f2f696d672e796f75747562652e636f6d2f76692f34566747473858653449412f302e6a7067)
](http://www.youtube.com/watch?v=4VgGG8Xe4IA)


I agree
I decline
Settings


edited


[ ![@CraigBuilds](https://avatars.githubusercontent.com/u/88379416?s=80&v=4)
](/CraigBuilds)


####  Superior Distance & range detection


Author


Meaningful, Aggregated Cost Views
Meaningful, Aggregated Cost Views
Show the cost of your IT resources logically connected to your application and services.


In addition to robostack/pixi/conda, I think it would be interesting to see an
extension/alternative to [ colcon-bundle ](https://github.com/colcon/colcon-
bundle) that would allow you to generate a bundle of files necessary for
runtime deployment of a ROS system. I believe that currently, colcon-bundle
really only works on Linux, but could be extended to other operating systems.

---

All reactions


Learn More
Want to Visualize Your AWS Infrastructure?
Want to Visualize Your AWS Infrastructure?
By Jason Sherman -
Use Amazon Web Services (AWS)? The AWS interface is great: you can service anywhere in the world and more. It’s not, however, without its limitations. What’s missing? What if you want to view relationships between things (such as backups, volumes, and snapshots) in a documented view of information and data? This helps you to better …


Member


You signed in with another tab or window. [ Reload ]() to refresh your
session.  You signed out in another tab or window. [ Reload ]() to refresh
your session.  You switched accounts on another tab or window. [ Reload ]() to
refresh your session.  Dismiss alert


[ Imprint
](https://www.sick.com/imprint/?elqTrackId=b5fa1836366e43419ca5cb934d958d19&elq=00000000000000000000000000000000&elqaid=9042&elqat=2&elqCampaignId=&elqcst=272&elqcsid=5796)
|


As part of announcing the OSRA, we are pleased to also announce our inaugural members. We wish to express our gratitude for their early support for our vision. The inaugural members are:


  Additional Lidar Processing

It can be imagined that if you have a stream of lidar or IMU packets, you may
want to process them differently. If you're working with a high speed vehicle,
you may want the packets projected into a pointcloud and published with little
batching inside the driver. If you're working with pointclouds for machine
learning, you may only want the pointcloud to include the ` XYZ ` information
and not the intensity, reflectivity, and noise information to reduce
dimensionality.

In any case, I provide a set of logical default processing implementations on
the lidar and IMU packets. These are implementations of the `
ros2_ouster::DataProcessorInterface ` class in the ` interfaces ` directory.
To create your own processor to change the pointcloud type, buffering
methodology, or some new cool thing, you must create an implementation of a
data processor.

After creating your implementation, that will take in a ` uint8_t * ` of a
data packet and accomplish your task, you will need to create a factory method
for it in ` processor_factories.hpp ` and add it to the list of processors to
be created in the ` createProcessors ` method.

I encourage you to contribute back any new processor methods to this project!
The default processors will buffer 1 full rotation of data of the pointcloud
and publish the pointcloud with the X, Y, Z, range, intensity, reflectivity,
ring, and noise information. It will also buffer a full rotation and publish
the noise, intensity, and reflectivity images. Finally, it will publish the
IMU data at transmission frequency.

Some examples:

  * If you wanted the points at transmission frequency to reduce aliasing
  * Different types of pointclouds published containing a subset or additional information.
  * If you wanted the information in another format (ei 1 data image with 3 channels of the range, intensity, and noise)
  * Downsample the data at a driver level to only take every ` N ` th ring.


no file will be saved, and the metadata will still be printed to terminal.
Copying this string and manually saving it to a .json file is also a valid way
to generate a metadata file.

    ros2 service call /ouster_driver/get_metadata ouster_msgs/srv/GetMetadata

Have fun!


MH, Network Operations,
United States Department of Defense
Some of our customers
METRA
MITRE
NASA
NHS
SANTANDER
SCHINDLER
UNIVERSAL
UNIVERSITY-OF-NOTRE-DAME
US-ARMY
VOLKSWAGEN
AT-T
BELL
BOSTON CHILDRENS HOSPITAL
BWI
HARTFORD HEALTHCARE
HELSINKI
IOWA
KINGS COLLEGE
MDOT
METRA
MITRE
NASA
NHS
SANTANDER
SCHINDLER
UNIVERSAL
UNIVERSITY-OF-NOTRE-DAME
US-ARMY
VOLKSWAGEN
AT-T
BELL
BOSTON CHILDRENS HOSPITAL
BWI
HARTFORD HEALTHCARE
HELSINKI
IOWA
KINGS COLLEGE


Search or jump to...


I think comparing ROS2 to other middleware frameworks will clarify why I think
there is an issue. Let's say I developed my application with opc-ua as the
middleware between all of the components. I could compile or package the
result into plain old executables and the user wouldn't even know it was using
opc-ua. I believe this is a very desirable property, and ROS2 should have this
as well. The robot operator (for example, a welding and cutting engineer, a
crane operator, or other specialist), should not need to know the software
they are using is built using ROS2. I should be able to send them my GUIs, my
simulators, my front end for ROS Bag, my supervisory nodes, the control system
nodes, gateways, etc, and they should be able to start them up on their own
computer and use them. They care about the function of the app, not that it is
using ROS2. This isn't always an issue, e.g, code running on an industrial PC
in a work cell that can be set up, locked up, and then tell people to never
touch it (but it would be nice if I didn't have to do that), but for "office
use" applications - e.g, the exact same nodes but using a simulator instead of
the real robot, it becomes much more of an issue.


I do not know very much Windows, but


> i am not really following this... i mean even with snap, we need to install
> snapd?


Sorry, something went wrong.


Contributor


{{ message }}


Copy link


[ CHANGELOG.rst ](/ros-drivers/ros2_ouster_drivers/blob/ros2/CHANGELOG.rst
"CHANGELOG.rst")

|

|


I think the vast majority of ROS2 users are robotics engineers, software
engineers, or researchers. However, there are many more potential users out
there who interact with robots (and other hardware) at a higher level. They
are unaware of the software frameworks or how it works, but they could benefit
from the digital tools that can be used with robots. You could perhaps call
these two user types API-Users and End-Users.


**[ CraigBuilds ](/CraigBuilds) ** commented  Mar 4, 2024


#  LiDAR Sensors


#####  [ info@sick.com  ](mailto:info@sick.com) | 1-800-325-7425


* These fields are mandatory


Reduce Troubleshooting Times
Reduce Troubleshooting Times
Improve mean-time-to-repair and reduce downtime with visual alerts, heatmaps, notifications and more.


Cancel  Create saved search


We know you will have questions that we were not able to think of before-hand. We want to answer these questions as best we can, so we have prepared two ways for you to ask your questions and get some answers.


Learn more
Upcoming Webinars
Learn Online With Us.


Additional navigation options


  Documentation

Documentation can be generated using Doxygen.

Run ` doxygen ` in the root of this repository. It will generate a ` /doc/* `
directory containing the documentation. Entrypoint in a browser is `
index.html ` .


  ` TIME_FROM_SYNC_PULSE_IN `

A free running counter synced to the ` SYNC_PULSE_IN ` input counts seconds (


Author


Assignees


  [ Packages  0  ](/orgs/ros-drivers/packages?repo_name=ros2_ouster_drivers)

No packages published


Linkedin
X
Youtube
Facebook
Graphical Networks


Last Name  *


  * The latest 2D LiDAR sensor innovations within the TiM product family
  * Innovative HDDM+ technology that enables measurement at long distances
  * How to select the correct LiDAR sensor for your application
  * Technical product specifications


  Connection with IPv4

We can setup the network connection to the sensor now with the proper
settings. Note: This command could take up to 30 seconds to setup, be patient.
If after a minute you see no results, then you probably have an issue. Start
the instructions above over. Lets set up the network

    sudo dnsmasq -C /dev/null -kd -F 10.5.5.50,10.5.5.100 -i [eth name] --bind-dynamic

Instantly you should see something similar to:

    dnsmasq: started, version 2.75 cachesize 150
    dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify
    dnsmasq-dhcp: DHCP, IP range 10.5.5.50 -- 10.5.5.100, lease time 1h
    dnsmasq-dhcp: DHCP, sockets bound exclusively to interface enxa0cec8c012f8
    dnsmasq: reading /etc/resolv.conf
    dnsmasq: using nameserver 127.0.1.1


  Forks

[ **73** forks ](/ros-drivers/ros2_ouster_drivers/forks)

[ Report repository ](/contact/report-
content?content_url=https%3A%2F%2Fgithub.com%2Fros-
drivers%2Fros2_ouster_drivers&report=ros-drivers+%28user%29)


  License

Apache-2.0 license

[ Activity  ](/ros-drivers/ros2_ouster_drivers/activity)

[ Custom properties  ](/ros-drivers/ros2_ouster_drivers/custom-properties)


Already on GitHub? [ Sign in
](/login?return_to=%2Fros2%2Fros2%2Fissues%2Fnew%2Fchoose) to your account


Include my email address so I can be contacted


my initial thoughts that it dose not see the “my_controllers.yaml” file but it
runs the “joint_broad” without any problems


  ROS2_CONTROL_DEMO_HARDWARE_PUBLIC
  hardware_interface::return_type read() override;


Error ...  (more)


[ none ](/questions/scope:all/sort:activity-desc/tags:none/page:1/) ×


[ERROR] [ros2_control_node-2]: process has died [pid 4388, exit code -6, cmd
‘/opt/ros/humble/lib/controller_manager/ros2_control_node --ros-args --params-
file /tmp/launch_params_izmqttko --params-file
/home/robot_ws/install/lunorobot/share/lunorobot/config/my_controllers.yaml’].
[spawner-3] [INFO] [1696345932.213156760] [spawner_joint_broad]: Waiting for
‘/controller_manager’ node to exist
[spawner-4] [INFO] [1696345932.541984436] [spawner_diff_cont]: Waiting for
‘/controller_manager’ node to exist
[spawner-3] [INFO] [1696345934.271893949] [spawner_joint_broad]: Waiting for
‘/controller_manager’ node to exist
[spawner-4] [INFO] [1696345934.602429954] [spawner_diff_cont]: Waiting for
‘/controller_manager’ node to exist
[spawner-3] [INFO] [1696345936.328438815] [spawner_joint_broad]: Waiting for
‘/controller_manager’ node to exist
[spawner-4] [INFO] [1696345936.660799370] [spawner_diff_cont]: Waiting for
‘/controller_manager’ node to exist


Powered by [ Discourse ](https://www.discourse.org) , best viewed with
JavaScript enabled


  return state_interfaces;
}
std::vector<hardware_interface::CommandInterface> TopicBasedSystem::export_command_interfaces()
{
  std::vector<hardware_interface::CommandInterface> command_interfaces;
  // Joints' state interfaces
  for (auto i = 0u; i < info_.joints.size(); i++)
  {
    const auto& joint = info_.joints[i];
    for (const auto& interface : joint.command_interfaces)
    {
      if (!getInterface(joint.name, interface.name, i, joint_commands_, command_interfaces))
      {
        throw std::runtime_error("Interface is not found in the standard list.");
      }
    }
  }
  return command_interfaces;
}
hardware_interface::return_type TopicBasedSystem::read(const rclcpp::Time& /*time*/, const rclcpp::Duration& /*period*/)
{
  if (rclcpp::ok())
  {
    rclcpp::spin_some(node_);
  }
  for (std::size_t i = 0; i < latest_joint_state_.name.size(); ++i)
  {
    const auto& joints = info_.joints;
    auto it = std::find_if(joints.begin(), joints.end(),
                           [&joint_name = std::as_const(latest_joint_state_.name[i])](
                               const hardware_interface::ComponentInfo& info) { return joint_name == info.name; });
    if (it != joints.end())
    {
      auto j = static_cast<std::size_t>(std::distance(joints.begin(), it));
      if (sum_wrapped_joint_states_)
      {
        sumRotationFromMinus2PiTo2Pi(latest_joint_state_.position[i], joint_states_[POSITION_INTERFACE_INDEX][j]);
      }
      else
      {


[ Oct '22 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/9 "October 21,
2022  8:25pm") [ ▶ Sasffm
](https://discourse.articulatedrobotics.xyz/t/discussion-running-ros2-control-
on-a-real-robot-making-a-mobile-robot-pt-13/107/8)


This [ ros2 example
](https://github.com/ros2/examples/blob/foxy/rclcpp/topics/minimal_publisher/member_function.cpp)
uses:


###  [ Jeffrey_Jene
](https://discourse.articulatedrobotics.xyz/u/Jeffrey_Jene)


###  [ KaushikBoora
](https://discourse.articulatedrobotics.xyz/u/KaushikBoora)


    ros2 topic pub --rate 30 /diffbot_base_controller/cmd_vel_unstamped geometry_msgs/msg/Twist "linear:
     x: 0.2
     y: 0.0
     z: 0.0
    angular:
     x: 0.0
     y: 0.0
     z: 1.0" -1


[ 1 reply ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/42)


[ May '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/35 "May 17, 2023
11:14am") [ ▶ LeoCleaner
](https://discourse.articulatedrobotics.xyz/t/discussion-running-ros2-control-
on-a-real-robot-making-a-mobile-robot-pt-13/107/32)


Great - I’m glad we got it sorted!


###  [ jonnyr ](https://discourse.articulatedrobotics.xyz/u/jonnyr)


this should solve the second issue:


[
![](https://discourse.articulatedrobotics.xyz/letter_avatar_proxy/v4/letter/b/d2c977/45.png)
](https://discourse.articulatedrobotics.xyz/u/BigShark3000)


###  [ JoshNewans ](https://discourse.articulatedrobotics.xyz/u/JoshNewans)


Ok so if my guess is correct, this is something I knew I should probably
improve in the code which is exception handling to give a more helpful error
message.


[ roman.smid  ](https://get-help.theconstruct.ai/u/roman.smid) May 7, 2022,
4:51am  1


[ Oct '22 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/8 "October 21,
2022  3:10pm")


I wanted to check and see if there may be a workaround by editing the
diffdrive_arduino.h file to not use base_interface? Any guidance would be
greatly appreciated, thanks!


gmake[1]: *** Waiting for unfinished jobs…
In file included from
/home/agnes/ros2_ws/src/diffdrive_arduino/src/diffdrive_arduino.cpp:1:
/home/agnes/ros2_ws/src/diffdrive_arduino/include/diffdrive_arduino/diffdrive_arduino.h:7:10:
fatal error: hardware_interface/base_interface.hpp: No such file or directory
7 |  #include  “hardware_interface/base_interface.hpp”
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/diffdrive_arduino.dir/build.make:76:
CMakeFiles/diffdrive_arduino.dir/src/diffdrive_arduino.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:139: CMakeFiles/diffdrive_arduino.dir/all]
Error 2
gmake: *** [Makefile:146: all] Error 2


###  [ Cliff_Andrew_Oliver
](https://discourse.articulatedrobotics.xyz/u/Cliff_Andrew_Oliver)


###  [ Sasffm ](https://discourse.articulatedrobotics.xyz/u/Sasffm)


##  1  Answer


[
![](https://discourse.articulatedrobotics.xyz/letter_avatar_proxy/v4/letter/j/c67d28/45.png)
](https://discourse.articulatedrobotics.xyz/u/JoshNewans)


Hi Josh, Thanks for a great series. I got pretty much stuck on getting it all
to work on a real robot. I’m running Humble on Ubuntu 22.04. Since ROS-Serial
has been replaced by MicroRos I went that route.


[ __ ](/questions/) |


[ Jun '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/48 "June  6, 2023
8:28pm")


[ Mike Scheutzow ](/users/75154/mike-scheutzow/)
4918  ●  2  ●  430  ●  45


  if (hardware_interface::SystemInterface::on_init(info) != CallbackReturn::SUCCESS)
  {
    return CallbackReturn::ERROR;
  }


[
![](https://discourse.articulatedrobotics.xyz/letter_avatar_proxy/v4/letter/j/3ec8ea/45.png)
](https://discourse.articulatedrobotics.xyz/u/jaronski)


[ 1 reply ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/64)


[ 1 reply ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/71)


Hello [ @roman.smid ](/u/roman.smid) ,


Failed <<< diffdrive_arduino [3.85s, exited with code 2]


###  [ mamba0206 ](https://discourse.articulatedrobotics.xyz/u/mamba0206)


[ 1 reply ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/68)


###  [ Sudhanshu_ranjan
](https://discourse.articulatedrobotics.xyz/u/Sudhanshu_ranjan)


can someone help me to convert or let me know what all i should change from
the provided code for 2WD diff_drive to 4WD diff_drive


![](https://discourse.articulatedrobotics.xyz/user_avatar/discourse.articulatedrobotics.xyz/praveen_kumar/40/40_2.png)
Praveen_Kumar:


![](https://discourse.articulatedrobotics.xyz/user_avatar/discourse.articulatedrobotics.xyz/jeffrey_jene/40/49_2.png)
Jeffrey_Jene:


[ Jun '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/58 "June 11, 2023
3:57am")


###  [ JoshNewans ](https://discourse.articulatedrobotics.xyz/u/JoshNewans)


[ May '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/36 "May 17, 2023
11:17am") [ ▶ jaronski
](https://discourse.articulatedrobotics.xyz/t/discussion-running-ros2-control-
on-a-real-robot-making-a-mobile-robot-pt-13/107/33)


Is it possible to set a parameter for defining the Serial Port of arduino in
the launch file. I can scan the ports automatically and say on which port is
my Lidar and on which is the Arduino Motor Control but I do not know how to
set it dynamically in the diffdrive_arduino.


  ROS2_CONTROL_DEMO_HARDWARE_PUBLIC
  CallbackReturn on_activate(const rclcpp_lifecycle::State & previous_state) override;


[ Jun '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/40 "June  2, 2023
10:05am") [ ▶ Afiq003
](https://discourse.articulatedrobotics.xyz/t/discussion-running-ros2-control-
on-a-real-robot-making-a-mobile-robot-pt-13/107/39)


[
![](https://discourse.articulatedrobotics.xyz/letter_avatar_proxy/v4/letter/s/a5b964/45.png)
](https://discourse.articulatedrobotics.xyz/u/Sasffm)


Hi,


###  [ Mikhail_Andryievich
](https://discourse.articulatedrobotics.xyz/u/Mikhail_Andryievich)


[ 1 reply ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/56)


###  [ robotmaker ](https://discourse.articulatedrobotics.xyz/u/robotmaker)


[ 15 Jan ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/97 "January 15,
2024 10:45am") [ ▶ Afiq003
](https://discourse.articulatedrobotics.xyz/t/discussion-running-ros2-control-
on-a-real-robot-making-a-mobile-robot-pt-13/107/39)


###  [ Jeffrey_Jene
](https://discourse.articulatedrobotics.xyz/u/Jeffrey_Jene)


#  [ ROS2 Control Framework unit5 ERROR ](/t/ros2-control-framework-
unit5-error/17129)


[ Jul '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/70 "July  5, 2023
8:00am") [ ▶ Devbot ](https://discourse.articulatedrobotics.xyz/t/discussion-
running-ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/68)


Ok so the main error here is that it goes to load ` diff_cont ` and `
joint_broad ` but can’t find them. Instead it is finding one called `
test_controller ` (I’m not sure if you’ve put that in or if it’s standard?)


[ Oct '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/80 "October 18,
2023  5:34am")


namespace ros2_control_demo_hardware
{


            </plugin>
        </gazebo>

    </robot>


[ 1 reply ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/34)


  ROS2_CONTROL_DEMO_HARDWARE_PUBLIC
  CallbackReturn on_deactivate(const rclcpp_lifecycle::State & previous_state) override;


[ Mar '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/31 "March 24,
2023  3:22pm")


[ Jun '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/57 "June 10, 2023
7:41pm") [ ▶ JoshNewans
](https://discourse.articulatedrobotics.xyz/t/discussion-running-ros2-control-
on-a-real-robot-making-a-mobile-robot-pt-13/107/52)


ROS Resources: [ Documentation ](http://wiki.ros.org/) | [ Support
](http://wiki.ros.org/Support) | [ Discussion Forum
](http://discourse.ros.org/) | [ Index ](http://index.ros.org/) | [ Service
Status ](http://status.ros.org/) | [ ros @ Robotics Stack Exchange
](https://robotics.stackexchange.com/questions/tagged/ros)
---

_Attention:_ Answers.ros.org is deprecated as of August the 11th, 2023. Please
visit [ robotics.stackexchange.com ](http://robotics.stackexchange.com) to ask
a new question. This site will remain online in read-only mode during the
transition and into the foreseeable future. Selected questions and answers
have been migrated, and redirects have been put in place to direct users to
the corresponding questions on Robotics Stack Exchange. Additional details are
[ available here ](https://discourse.ros.org/t/ros-and-gazebo-answers-
migration-to-robotics-stack-exchange-process/31494) .


[ Jan '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/20 "January 29,
2023  2:56am") [ ▶ JoshNewans
](https://discourse.articulatedrobotics.xyz/t/discussion-running-ros2-control-
on-a-real-robot-making-a-mobile-robot-pt-13/107/19)


  1. Rename ` configure ` to ` on_init ` and change return type to ` CallbackReturn `
  2. If using BaseInterface as base class then you should remove it. Specifically, change:


[
![](https://discourse.articulatedrobotics.xyz/letter_avatar_proxy/v4/letter/e/fbc32d/45.png)
](https://discourse.articulatedrobotics.xyz/u/Enno_Stelma)


Roberto


This should solve the first issue.


> then please replace it by this block:
>
>
>     position_goals = PathJoinSubstitution(
>         [
>             FindPackageShare("joint_trajectory_publisher"),
>             "config",
>             "joint_trajectory_publisher.yaml",
>         ]
>     )
>


[
![](https://discourse.articulatedrobotics.xyz/user_avatar/discourse.articulatedrobotics.xyz/praveen_kumar/45/40_2.png)
](https://discourse.articulatedrobotics.xyz/u/Praveen_Kumar)


###  [ Shai_Mizrachi
](https://discourse.articulatedrobotics.xyz/u/Shai_Mizrachi)


Initial I would see the command and the robot would move. But after a few
seconds, no more commands would be sent even when the joystick is held full
forward with the enable button pressed.


Hey Josh, wanted to let you know I purchased a couple of 100RPM motors and
that seemed to do the trick. Everything is now running smoothly. Those other
motors were probably just too fast for the PID/encoders to handle.


        joint_states_[POSITION_INTERFACE_INDEX][j] = latest_joint_state_.position[i];
      }
      if (!latest_joint_state_.velocity.empty())
      {
        joint_states_[VELOCITY_INTERFACE_INDEX][j] = latest_joint_state_.velocity[i];
      }
      if (!latest_joint_state_.effort.empty())
      {
        joint_states_[EFFORT_INTERFACE_INDEX][j] = latest_joint_state_.effort[i];
      }
    }
  }
  for (const auto& mimic_joint : mimic_joints_)
  {
    for (auto& joint_state : joint_states_)
    {
      joint_state[mimic_joint.joint_index] = mimic_joint.multiplier * joint_state[mimic_joint.mimicked_joint_index];
    }
  }
  return hardware_interface::return_type::OK;
}
template <typename HandleType>
bool TopicBasedSystem::getInterface(const std::string& name, const std::string& interface_name,
                                    const size_t vector_index, std::vector<std::vector<double>>& values,
                                    std::vector<HandleType>& interfaces)
{
  auto it = std::find(standard_interfaces_.begin(), standard_interfaces_.end(), interface_name);
  if (it != standard_interfaces_.end())
  {
    auto j = static_cast<std::size_t>(std::distance(standard_interfaces_.begin(), it));
    interfaces.emplace_back(name, *it, &values[j][vector_index]);
    return true;
  }
  return false;
}
hardware_interface::return_type TopicBasedSystem::write(const rclcpp::Time& /*time*/, const rclcpp::Duration& /*period*/)
{
  // To avoid spamming TopicBased's joint command topic we check the difference between the joint states and
  // the current joint commands, if it's smaller than a threshold we don't publish it.
  const auto diff = std::transform_reduce(


If that is all ok then check your diff drive parameters (wheel spacing etc)
are all correct and you don’t have anything odd in there like rotational
limits.


I found the problem it seems to be some internal problem with the Arduino uno,
it works fine on the nano.


#include "pluginlib/class_list_macros.hpp"
PLUGINLIB_EXPORT_CLASS(
  ros2_control_demo_hardware::DiffBotSystemHardware, hardware_interface::SystemInterface)


Very odd, I’m suspicious of maybe a wiring issue with the
motors/driver/arduino?


It looks like that branch is for Humble. I’m using Foxy, can it be used with
it or do I need to upgrade?


I have a question and would appreciate your help.


[ Oct '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/78 "October  3,
2023  6:38pm")


###  [ Jeffrey_Jene
](https://discourse.articulatedrobotics.xyz/u/Jeffrey_Jene)


Hi Praveen!


I’m glad you got it sorted but I’m a bit confused by your solution.


The site is read-only. Please transition to use Robotics Stack Exchange


> is it possible that ill just make my own hard code controller instead of
> using diff drive from ros2 control package? Ill just convert the cmd_vel to
> left and right motor velocity.


Remember that if you already installed it on your dev machine but are now
building on the Pi you need to install it there too! (I forgot when I was
filming haha)


looks like the controller manager services are not available?


    if (joint.state_interfaces[1].name != hardware_interface::HW_IF_VELOCITY)
    {
      RCLCPP_FATAL(
        rclcpp::get_logger("DiffBotSystemHardware"),
        "Joint '%s' have '%s' as second state interface. '%s' expected.", joint.name.c_str(),
        joint.state_interfaces[1].name.c_str(), hardware_interface::HW_IF_VELOCITY);
      return CallbackReturn::ERROR;
    }
  }

  return CallbackReturn::SUCCESS;
}


###  [ ketill ](https://discourse.articulatedrobotics.xyz/u/ketill)


[ May '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/32 "May  4, 2023
6:05am")


[
![](https://discourse.articulatedrobotics.xyz/letter_avatar_proxy/v4/letter/e/fbc32d/45.png)
](https://discourse.articulatedrobotics.xyz/u/Enno_Stelma)


[
![](https://discourse.articulatedrobotics.xyz/letter_avatar_proxy/v4/letter/j/c67d28/45.png)
](https://discourse.articulatedrobotics.xyz/u/JoshNewans)


Thanks for the great tutorial. I followed everything correctly till Ros2
Controller. My setup is a 4 wheel robot instead of 2 wheels. I have used
differential drive and setup wheel count as 2. Everything worked perfectly
until I added diffdrive_arduino package. I have modified the package to take
in four wheels as input. However the issues are:


The files inside ros2_control_course should be up to date now.


Solved this. Figure out don’t need to install gazebo ros2 control package


Hi,
I’m running directly on arduino and have the same issue.


Hi Josh
I’m trying to run “ros2 launch articubot_one launch_robot.launch.py” but get
this error, I wonder if you can guide me to a solution. Thanks


###  [ JoshNewans ](https://discourse.articulatedrobotics.xyz/u/JoshNewans)


Wow that is a strange issue, I’m not sure, sorry.
Also I haven’t mentioned this but I actually swapped to a different router as
I thought the first one was maybe causing me problems…but then I still had
problems with the new one too so I never said anything.


[ Mar '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/27 "March 18,
2023  7:02am")


But yeah, doing it the long way is always an option (and not a bad one for
learning how differential drive control works) but at some point it makes
sense to take the more robust, flexible option of ros2_control.


###  [ Sasffm ](https://discourse.articulatedrobotics.xyz/u/Sasffm)


###  [ Shah ](https://discourse.articulatedrobotics.xyz/u/Shah)


Skip to content

Search…
All gists
Back to GitHub
@ahmaddidiks
ahmaddidiks/diffbot_system.cpp
Forked from renderedSafe/diffbot_system.cpp
Created 7 months ago • Report abuse
Code
Revisions
2
Clone this repository at <script src="https://gist.github.com/ahmaddidiks/a3d78642754c8e5bef2cfa7e6729ef98.js"></script>
<script src="https://gist.github.com/ahmaddidiks/a3d78642754c8e5bef2cfa7e6729ef98.js"></script>
ROS2 Control Demos diffbot hardware interface publisher. Useful for micro-ROS hardware control.
diffbot_system.cpp
// Copyright 2021 ros2_control Development Team
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


![](https://discourse.articulatedrobotics.xyz/user_avatar/discourse.articulatedrobotics.xyz/jeffrey_jene/40/49_2.png)
Jeffrey_Jene:


class HardwareCommandPub : public rclcpp::Node  //the node definition for the publisher to talk to micro-ROS agent
{
  public:
    HardwareCommandPub();
    void publishData();


CallbackReturn DiffBotSystemHardware::on_init(const hardware_interface::HardwareInfo & info)
{
  base_x_ = 0.0;
  base_y_ = 0.0;
  base_theta_ = 0.0;


add a comment


I have the “autorepeat_rate” set to 20.0 in the joystick.yaml file.


[ Jun '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/50 "June  7, 2023
10:16am")


[INFO] [launch]: All log files can be found below
/home/system/.ros/log/2023-03-21-14-56-32-932971-mapperbot-5148
[INFO] [launch]: Default logging verbosity is set to INFO
[ERROR] [launch]: Caught exception in launch (see debug for traceback): Caught
exception when trying to load file of format [py]: name ‘Command’ is not
defined


###  [ Afiq003 ](https://discourse.articulatedrobotics.xyz/u/Afiq003)


Hey [ @JoshNewans ](https://discourse.articulatedrobotics.xyz/u/joshnewans)
thank you for the great tutorial, it has been of great benefit to us as
students. We are having difficulty loading the /controller_manager services,
we’ve tried the solutions you suggested earlier in the thread to [ @Sasffm
](https://discourse.articulatedrobotics.xyz/u/sasffm) , but it is still not
working. We have the same setup, and the device port has been set correctly,
even the user has been added to the dialout group. The following is the error
obtained on running the launch file.


[
![](https://discourse.articulatedrobotics.xyz/letter_avatar_proxy/v4/letter/a/a87d85/45.png)
](https://discourse.articulatedrobotics.xyz/u/ali_ghasemi)


[ Jun '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/51 "June  8, 2023
9:58am") [ ▶ Adi ](https://discourse.articulatedrobotics.xyz/t/discussion-
running-ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/50)


[
![](https://discourse.articulatedrobotics.xyz/user_avatar/discourse.articulatedrobotics.xyz/omar_khaled/45/62_2.png)
](https://discourse.articulatedrobotics.xyz/u/Omar_Khaled)


Error message:
devuser@pi:/overlay_ws$ ros2 launch articubot_one launch_robot.launch.py
[INFO] [launch]: All log files can be found below
/home/devuser/.ros/log/2023-09-26-11-54-50-619436-pi-2661
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [2663]
[INFO] [twist_mux-2]: process started with pid [2665]
[twist_mux-2] [INFO] [1695729293.661287767] [twist_mux]: Topic handler
‘topics.joystick’ subscribed to topic ‘cmd_vel_joy’: timeout = 0.500000s ,
priority = 100.
[twist_mux-2] [INFO] [1695729293.669544297] [twist_mux]: Topic handler
‘topics.navigation’ subscribed to topic ‘cmd_vel’: timeout = 0.500000s ,
priority = 10.
[twist_mux-2] [INFO] [1695729293.671005906] [twist_mux]: Topic handler
‘topics.tracker’ subscribed to topic ‘cmd_vel_tracker’: timeout = 0.500000s ,
priority = 20.
[robot_state_publisher-1] [INFO] [1695729293.707919896]
[robot_state_publisher]: got segment base_footprint
[robot_state_publisher-1] [INFO] [1695729293.708507536]
[robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1695729293.708640478]
[robot_state_publisher]: got segment camera_link
[robot_state_publisher-1] [INFO] [1695729293.708740736]
[robot_state_publisher]: got segment camera_link_optical
[robot_state_publisher-1] [INFO] [1695729293.708833883]
[robot_state_publisher]: got segment caster_wheel
[robot_state_publisher-1] [INFO] [1695729293.708923104]
[robot_state_publisher]: got segment chassis
[robot_state_publisher-1] [INFO] [1695729293.709009436]
[robot_state_publisher]: got segment face_link
[robot_state_publisher-1] [INFO] [1695729293.709094694]
[robot_state_publisher]: got segment laser_frame
[robot_state_publisher-1] [INFO] [1695729293.709181637]
[robot_state_publisher]: got segment left_wheel
[robot_state_publisher-1] [INFO] [1695729293.709267247]
[robot_state_publisher]: got segment right_wheel
[INFO] [ros2_control_node-3]: process started with pid [2700]
[INFO] [spawner-4]: process started with pid [2702]
[INFO] [spawner-5]: process started with pid [2704]
[ros2_control_node-3] [INFO] [1695729302.263149623] [resource_manager]:


"./nptl/pthread_kill.c", line 89, in __pthread_kill_internal
[ros2_control_node-1] | Source "./nptl/pthread_kill.c", line 78, in
__pthread_kill_implementation [ros2_control_node-1] Source
"./nptl/pthread_kill.c", line 44, in __pthread_kill [0x7faad2c969fc]
[ros2_control_node-1] Aborted (Signal sent by tkill() 10123 1000) [ERROR]
[ros2_control_node-1]: process has died [pid 10123, exit code -6, cmd
'/opt/ros/humble/lib/controller_manager/ros2_control_node --ros-args --params-
file /tmp/launch_params_xpux93li --params-file
/home/namdc/project_arduino/install/diffdrive_arduino/share/diffdrive_arduino/config/diffbot_controllers.yaml'].
[spawner-3] [INFO] [1700891538.812032991] [spawner_joint_state_broadcaster]:
Waiting for '/controller_manager' node to exist [spawner-3] [INFO]
[1700891540.830612800] [spawner_joint_state_broadcaster]: Waiting for
'/controller_manager' node to exist [spawner-3] [INFO] [1700891542.849569356]
[spawner_joint_state_broadcaster]: Waiting for '/controller_manager' node to
exist [spawner-3] [INFO] [1700891544.867227744]
[spawner_joint_state_broadcaster]: Waiting for '/controller_manager' node to
exist [spawner-3] [ERROR] [1700891546.883473615]
[spawner_joint_state_broadcaster]: Controller manager not available [ERROR]
[spawner-3]: process has died [pid 10127, exit code 1, cmd
'/opt/ros/humble/lib/controller_manager/spawner joint_state_broadcaster
--controller-manager /controller_manager --ros-args']. [INFO] [spawner-4]:
process started with pid [10167] [INFO] [rviz2-5]: process started with pid
[10169] [rviz2-5] Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use
QT_QPA_PLATFORM=wayland to run on Wayland anyway. [rviz2-5] [INFO]
[1700891547.947906029] [rviz2]: Stereo is NOT SUPPORTED [rviz2-5] [INFO]
[1700891547.948230081] [rviz2]: OpenGl version: 4.6 (GLSL 4.6) [rviz2-5]
[INFO] [1700891547.987819732] [rviz2]: Stereo is NOT SUPPORTED [rviz2-5]
[ERROR] [1700891548.258911760] [rviz2]: The link is static or has unrealistic
inertia, so the equivalent inertia box will not be shown. [rviz2-5] [rviz2-5]
[ERROR] [1700891548.259194124] [rviz2]: The link is static or has unrealistic
inertia, so the equivalent inertia box will not be shown. [rviz2-5]
[spawner-4] [INFO] [1700891549.758581685] [spawner_diffbot_base_controller]:
Waiting for '/controller_manager' node to exist [spawner-4] [INFO]
[1700891551.777160247] [spawner_diffbot_base_controller]: Waiting for
'/controller_manager' node to exist [spawner-4] [INFO] [1700891553.793324662]
[spawner_diffbot_base_controller]: Waiting for '/controller_manager' node to
exist [spawner-4] [INFO] [1700891555.810854949]
[spawner_diffbot_base_controller]: Waiting for '/controller_manager' node to
exist [spawner-4] [ERROR] [1700891557.828001767]
[spawner_diffbot_base_controller]: Controller manager not available [ERROR]


I hope that helps, please let me know how you go!


std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&,
std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&,
rclcpp::NodeOptions const&) [ros2_control_node-1] #16 Object
"/opt/ros/humble/lib/libcontroller_manager.so", at 0x7faad3656b2e, in
controller_manager::ControllerManager::init_resource_manager(std::__cxx11::basic_string<char,
std::char_traits, std::allocator > const&) [ros2_control_node-1] #15 Object
"/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad32f8900, in
hardware_interface::ResourceManager::activate_all_components()
[ros2_control_node-1] #14 Object
"/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad32f80bb, in
hardware_interface::ResourceManager::set_component_state(std::__cxx11::basic_string<char,
std::char_traits, std::allocator > const&, rclcpp_lifecycle::State&)
[ros2_control_node-1] #13 Object
"/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad32f95e2, in bool
hardware_interface::ResourceStorage::set_component_state(hardware_interface::System&,
rclcpp_lifecycle::State const&) [ros2_control_node-1] #12 Object
"/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad330489b, in
[ros2_control_node-1] #11 Object
"/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad331aaeb, in
[ros2_control_node-1] #10 Object
"/opt/ros/humble/lib/libhardware_interface.so", at 0x7faad3312776, in
hardware_interface::System::configure() [ros2_control_node-1] #9 Object
"/home/namdc/project_arduino/install/diffdrive_arduino/lib/libdiffdrive_arduino.so",
at 0x7faacd614b24, in
diffdrive_arduino::DiffDriveArduinoHardware::on_configure(rclcpp_lifecycle::State
const&) [ros2_control_node-1] #8 Object
"/home/namdc/project_arduino/install/diffdrive_arduino/lib/libdiffdrive_arduino.so",
at 0x7faacd61765c, in ArduinoComms::connect(std::__cxx11::basic_string<char,
std::char_traits, std::allocator > const&, int, int) [ros2_control_node-1] #7
Object "/usr/lib/x86_64-linux-gnu/libserial.so.1.0.0", at 0x7faacd5a40b3, in
[ros2_control_node-1] #6 Object "/usr/lib/x86_64-linux-
gnu/libstdc++.so.6.0.30", at 0x7faad30ae4d7, in __cxa_throw
[ros2_control_node-1] #5 Object "/usr/lib/x86_64-linux-
gnu/libstdc++.so.6.0.30", at 0x7faad30ae276, in std::terminate()
[ros2_control_node-1] #4 Object "/usr/lib/x86_64-linux-
gnu/libstdc++.so.6.0.30", at 0x7faad30ae20b, in [ros2_control_node-1] #3
Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30", at 0x7faad30a2b9d, in
[ros2_control_node-1] #2 Source "./stdlib/abort.c", line 79, in abort
[0x7faad2c287f2] [ros2_control_node-1] #1 Source "../sysdeps/posix/raise.c",
line 26, in raise [0x7faad2c42475] [ros2_control_node-1] #0 | Source


RCLCPP_INFO(rclcpp::get_logger("DiffBotSystemHardware"), "Successfully activated!");


Hmm that is odd.


  // START: This part here is for exemplary purposes - Please do not copy to your production code
  RCLCPP_INFO(
    rclcpp::get_logger("DiffBotSystemHardware"), "Joints successfully read! (%.5f,%.5f,%.5f)",
    base_x_, base_y_, base_theta_);
  // END: This part here is for exemplary purposes - Please do not copy to your production code


* [ ros2 ](/questions/scope:all/sort:activity-desc/tags:ros2/page:1/)


[ 1 reply ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/18)


Then watch the [ hardware interface ](https://youtu.be/J02jEKawE5U) tutorial
which shows how to connect that to ros2_control. You should be able to pretty
much take my hardware interface and make some small modifications to the class
that handles the comms.


###  [ JoshNewans ](https://discourse.articulatedrobotics.xyz/u/JoshNewans)


Specifically, why are the desired angular velocities divided by both the `
rads_per_count ` conversion factor and the ` loop_rate ` ?


[
![](https://discourse.articulatedrobotics.xyz/letter_avatar_proxy/v4/letter/t/41988e/45.png)
](https://discourse.articulatedrobotics.xyz/u/tadashi)


[ 1 reply ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/50)


[ Dec '23 ](https://discourse.articulatedrobotics.xyz/t/discussion-running-
ros2-control-on-a-real-robot-making-a-mobile-robot-pt-13/107/91 "December 29,
2023  5:37am")


hi , i m an issue while launch ros2 control list hardware interface output
will coming like this could not contact to service controller manager


[
![](https://discourse.articulatedrobotics.xyz/letter_avatar_proxy/v4/letter/t/d2c977/45.png)
](https://discourse.articulatedrobotics.xyz/u/tiptonnet)


[ **answered 2022-11-07 20:02:06 -0500  ** ](/answers/409093/revisions/)


[ros2_control_node-2] [INFO] [1694504172.944274701] [resource_manager]:
Loading hardware ‘RealRobot’
[ros2_control_node-2] [INFO] [1694504172.946497851] [resource_manager]:
Initialize hardware ‘RealRobot’
[ros2_control_node-2] terminate called after throwing an instance of
‘std::invalid_argument’


[
![](https://discourse.articulatedrobotics.xyz/uploads/default/original/1X/1a22b037c8091e83f07f103b802a2bd4142afa56.png)
](https://discourse.articulatedrobotics.xyz) [ Continue Discussion
](https://discourse.articulatedrobotics.xyz/t/discussion-running-ros2-control-
on-a-real-robot-making-a-mobile-robot-pt-13/107/105)


This error should be clearer, except I have not explicitly made ` twist_mux `
a dependency of ` articubot_one ` so it tries to run without checking that it
exists, and you get that very messy error.


Hi Josh!
I’m planning to simulate an AUV for 3D underwater object tracking with camera
sensor using ROS and Gazebo. Do you have Any recommendations on the ROS
version, Gazebo version, and plugins for simulation this scenario? or GitHub
directory?