Comments (8)
The „legacy driver” employs different mechanism for creating the loop accessing the hardware. Instead of the sleep_until:
this->create_wall_timer(
std::chrono::milliseconds(50),
is used and a callback for this timer reads data from the device and publishes data.
Which seems to work on that system as it is what I observed using ros2 topic hz
Does it mean that current ros2_control implementation with the sleep_until in fact MANDATES to have RT kernel? If so this warning which is currently printed is a kind of misleading?
from ros2_control.
Can you reproduce this with a simple c++ program, without any invocation of ROS?
from ros2_control.
In the meantime I have finally found the way to have the RT kernel for raspberry pi4 following the ros-realtime/linux-real-time-kernel-builder: build and setup RT kernel for the ROS 2 testing (github.com).
I have followed the instructions https://control.ros.org/master/doc/ros2_control/controller_manager/doc/userdoc.html#determinism
The effect … I don’t get any warnings at startup related to no RT kernel or inability to turn on FIFO RT scheduling policy – so everything seems fine.
But … no progress – I’m still getting very low hz for /odom and /tf topics.. It evens worse than with generic kernel
Now I’m lost ☹
from ros2_control.
Can you test your code on a different platform, for example in a docker container? Just to be sure that the problem is on the RPi and not on the controller code.
from ros2_control.
Not sure If I understand. I'm testing with real hardware turtlebot_manipulation with Raspberry Pi 4 as SBC connected to microContorller OpenOC which controls motors. I can't change the platform and be able to test behavior with real hardware as I can't easily connect hardware to for example laptop.
What I can observe is that process "ros2_control_no" has 95-100% CPU - which from one hand seems OK as it has the highest priority, but on the other hand if it makes the sleeps in the main loop is it normal behavior?
I have inactivated all controllers, but still "ros2_control_no" process has 95-100% which is strange as it should do currently ... nothing?
from ros2_control.
Which ros2_controller are you using? diff_drive controller? Use this together with a simulation of the turtlebot or example2 from ros2_control_demos and check if you see the expected update rate of your topics.
from ros2_control.
OK I have tested the ros2_control_demo_example_2 on the raspberry pi system and the performance is good.
Finally I have started commenting out lines of code in the turtlebot3_manipulation_hardware, and it looks that the "write" methods is a problem. Unlike "read" instead of writing all control items by single remote call, each motor is updated in separate call (which goes via USB to OpenCR microcontroller) . As turtlebot3_manipulation has more motors than just turtlebot3, this makes difference.
So it looks like that I will have to correct the source code for turtlebot3_manipulation_hardware package.
Sorry for suspecting that the problem is in ros2_control (I was misguide as "legacy" software worked - I forgot that legacy was just for turtlebot3 and turtlebot3_manipulation ) .
Thank you for your eagerness to help.
Once more sorry for troubling your.
from ros2_control.
Glad you found it!
from ros2_control.
Related Issues (20)
- Joint Limiters: Saturation (current PR971 - will be renamed) and Soft Limiter HOT 3
- Changing how handles are used (in stages and PRs) HOT 1
- Fallback controllers HOT 1
- Integrate SideloadControllers - controllers that do longer calculations in a separate thread but data access is synchronized
- release_interfaces does not seem to work (or not work as expected) HOT 17
- not able to activate 2 controllers HOT 3
- `KeyboardInterrupt` exception if shutdown before controller manager is found HOT 1
- Passing data to multiple instances of HardwareInterface from control node HOT 8
- Handling of exclusive command interfaces HOT 12
- Document `calculate_dynamics` of mock hardware HOT 3
- Spawner waiting for '/controller_manager' services to be available when they are already available HOT 1
- spawner.py parse parameters with namespace wrong HOT 2
- CI build job humble/testing failed! HOT 1
- [Question / Feature Request] - Is there a way to list _all_ controllers (not just loaded controllers) HOT 5
- Add tests for hardware components exception handling
- i hope to know the relationship of the joint name in urdf
- i hope to know the relationship of the joint name in urdf & ros2 control label & controller config file? HOT 1
- CI build job iron/main failed! HOT 1
- CI build job humble/main failed!
- Using controller with collaborative/softening mode. HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ros2_control.