You can use ANY hardware with ros2_control

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 พ.ย. 2024

ความคิดเห็น • 107

  • @sport99421
    @sport99421 11 หลายเดือนก่อน +24

    You call yourself a hobbyist while acting more like a professor to most of us. Hope you get the recognition you deserve and continue to grow.

  • @evanlane1690
    @evanlane1690 ปีที่แล้ว +53

    These tutorials are making ROS accessible for a ton of people, including me. I'm a hobbyist, and I don't always have the time to do deep dives into documentation and codebases. Being able to use these tutorials to get a good foundation has been extremely helpful.

  • @atticusrussell1225
    @atticusrussell1225 ปีที่แล้ว +17

    Josh this is literally the task I have to do for my project today. I haven't watched the video yet but I was dreading the task due to the lack of documentation. Have been putting it off for a bit. You're an absolute legend and a hero. Can't even express how excited I was to see the title.

    • @juandvergara
      @juandvergara ปีที่แล้ว +1

      So do i, its amazing how he reads our minds, hahaha.

    • @ArticulatedRobotics
      @ArticulatedRobotics  ปีที่แล้ว +1

      Haha thanks guys I'm so glad to hear it - and I hope it was helpful once you did watch it!

    • @atticusrussell1225
      @atticusrussell1225 ปีที่แล้ว

      @@ArticulatedRobotics Yeah it was very helpful. Thank you!
      I'm wondering if you've seen the tool ros_team_workspace which can generate templates for hardware interfaces, controllers, URDF, and many other things interactively from the command line, and in addition adds CI testing to a GitHub repo. Also adds useful aliases. I think you'd find it useful, and if you do a short video exploring it might help many more people be aware of it.

  • @DavidNewmon
    @DavidNewmon ปีที่แล้ว +4

    Performance here is critical, and especially on the Arduino side. Make sure you read the Serial I/O data one byte at a time, and make sure you loop through the bytes: while(Serial.available()) { char ch = Serial.read(); } ... calculate, and control the motors as quickly as possible in loop() and keep everything straightforward (no classes, data structures, etc). All simple functions and global variables. I learned the hard way and my robot was jerky, twitchy, and not good at driving around.

  • @remiscarrlet
    @remiscarrlet 6 หลายเดือนก่อน +1

    I wrote most of my thesis project using your videos. In a sense, i should list you as a supervisor :D Thank you so much for these videos, I know how much time it takes to make them and I want you to know these are so so very appreciated.

  • @pranavshevkar269
    @pranavshevkar269 9 หลายเดือนก่อน +1

    Your videos have helped me tremendously in my career as a robotics engineer. Could you please make a series on Movit2

  • @danh9002
    @danh9002 8 วันที่ผ่านมา

    Thank you so much for this video! I'll definitely be signing up for your patreon soon!

  • @weeklyrobotics7884
    @weeklyrobotics7884 ปีที่แล้ว +5

    Awesome work Josh! Many thanks for sharing and going into the nitty gritty details!

    • @ArticulatedRobotics
      @ArticulatedRobotics  ปีที่แล้ว

      Thanks!!

    • @_a_x_s_
      @_a_x_s_ ปีที่แล้ว

      Wow, this was commented 3 days before this video was published...

    • @weeklyrobotics7884
      @weeklyrobotics7884 ปีที่แล้ว

      @@_a_x_s_ We are in a business of finding all quality robotics content before it even comes out, but let's keep this a secret!
      On a more serious note, If you are a Patreon supporter of Josh, you get early access to the content. I highly recommend this as Josh is doing an amazing service for everyone looking to learn some advanced ROS.

  • @adamwatts16
    @adamwatts16 ปีที่แล้ว

    This video couldn't have come at a better time! I stared building my first robot last weekend and this weekends job is building the hardware internet for my motor controller. Great tutorial

  • @jonathanr4242
    @jonathanr4242 10 หลายเดือนก่อน +3

    fantastic. thank you, Josh. I should also mention that example_2 was updated on the repo a couple of weeks ago to use TwistStamped messages, which means it might not work with the teleop_twist_keyboard. I tried to map the cmd_vel to cmd_vel_stamped, but it didn't work. I ended up sending messages from the cli. Maybe try to insert this line into the /config/diffbot_controllers.yaml file (under ros parameters).
    use_stamped_vel: false

    • @AhmedMagdy-xb8bl
      @AhmedMagdy-xb8bl 9 หลายเดือนก่อน

      Exactly the same.

    • @RoboMech48
      @RoboMech48 7 หลายเดือนก่อน

      jonathanar can you help me?

    • @ShahFaisalWani14
      @ShahFaisalWani14 2 หลายเดือนก่อน +2

      You can simply use teleop_twist_keyboard and pass stamped true like this ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args --param stamped:=true This is because the diff drive controller expects /cmd_vel [geometry_msgs/msg/TwistStamped]

    • @jonathanr4242
      @jonathanr4242 2 หลายเดือนก่อน

      @@ShahFaisalWani14 thank you.

  • @8bit711
    @8bit711 ปีที่แล้ว +1

    Cheers Josh! I know how im spending my Sat night.

  • @leonardogarberoglio3611
    @leonardogarberoglio3611 ปีที่แล้ว

    I saw all of your videos about ros2_control and they are really good material. I think that you should make a video using microROS on your microcontroller and so you will have everithing under ROS2

  • @QuantumRob-yt
    @QuantumRob-yt 4 หลายเดือนก่อน

    You said in here you were connected to the robot via SSH for VScode but didn't go into how. Personally having been using linux for a long time on multiple machine. I use the SSH -Y user@hostname with X11 forwarding enabled in SSHD_CONFIG. Then anytime I use that terminal window, XWindows just pops up the display on my local linux (WSL or an actually dev Ubuntu box). This is a super easy way to just control anything from the linux box you're SSH'd into. I just run the VS Code directly on the robot and have the display show on my local. You might be just using SSH for file transfer but wanted to share in the event you havent tried this yourself.

  • @tscosef
    @tscosef ปีที่แล้ว

    Best tutorial about hardware interfaces. Was craving for this👍

  • @techcracker4566
    @techcracker4566 ปีที่แล้ว +1

    Great job! Thanks for all of your eye opening videos, keep it going🎉

  • @martijnmartijn
    @martijnmartijn 9 หลายเดือนก่อน

    This video is truly a lifesaver, thanks!

  • @kevinkipkorir3132
    @kevinkipkorir3132 ปีที่แล้ว

    An awesome 45 minute thank you

  • @slimsh4dy115
    @slimsh4dy115 ปีที่แล้ว

    is the process similar for ros1_control too ??
    glad to see that you are getting sponsors ( meaning you will keep uploading ) , you deserve it.

  • @dmranganath
    @dmranganath ปีที่แล้ว

    HI,
    It was a great lecture, thanks for sharing with us. I was able to follow most part of it, but i was unable to understand where input and output ports to arduino are connected in the hardware interface plugin.
    thanks a lot for sharing with us.

  • @matteocarlone6503
    @matteocarlone6503 ปีที่แล้ว +1

    So cool! As all of your videos..
    Can you do something about OpenRMF framework from open robotics! I would love it

    • @ArticulatedRobotics
      @ArticulatedRobotics  ปีที่แล้ว +1

      Thanks! I'll put it on the list, but OpenRMF is something I know very little about, and is also fairly low in terms of things I plan to learn more about, so you'll probably be waiting a while before I do a tutorial on it I'm afraid!

  • @ManojM-p4q
    @ManojM-p4q 5 หลายเดือนก่อน

    Thanks for the tutorial mate

  • @patrykgrzywnowicz5710
    @patrykgrzywnowicz5710 4 หลายเดือนก่อน

    With your channel I started taking my first steps with ros2, thanks! I have a question, do you know what is the correct procedure for closing an application using ros2_control so that, for example, the hardware interface calls the on_deactivate function? Currently, I am making a ros2 srv call from the controller level to request a change of state in the hardware interface, but I don't like this approach. Unfortunately, after changing the state to inactive in the controller, the hardware interfaces remain in the active state..

  • @ngocainguyen1664
    @ngocainguyen1664 ปีที่แล้ว

    Thank you for your wonderful video. Can i ask you a question about how the robot on rviz2 moving even though the wheel does not rotate?

  • @simonlop
    @simonlop ปีที่แล้ว +1

    First of all, congratulations on this great video. I have been working on something for several days now. I am trying to create a hardware interface that reads data from a topic (I am using micro-ROS and cannot find another way to do it). The only idea I had was to implement a socket to another node acting as a server. Do you have any ideas if it is possible to use topics directly in the hardware interface?

    • @DavidNewmon
      @DavidNewmon ปีที่แล้ว

      This can be done, I made all of the I/O with the hardware itself async (running in another process). It really didn't work very well... data just got backed up into a queue in the DDS implementation and I ended up sending commands to the motors that were very old. I need to change the QoS settings on the topic so that it discards older messages automatically. My setup used a control hardware interface like in the video, but I published the commands to a topic. Then I created another node/script that subscribed to that topic and handled the hardware device.

    • @DavidNewmon
      @DavidNewmon ปีที่แล้ว +1

      You can create Nodes directly, and from there call create_subscriber, create_publisher. I did this inside of a background thread function:
      rclcpp::Node::SharedPtr processing_node = rclcpp::Node::SharedPtr(new rclcpp::Node("MyControlHardwareBackgroundNode"));
      velocity_publisher_ = processing_node->create_publisher(ASYNC_VELOCITY_TOPIC, 10);
      encoder_subscription_ = processing_node->create_subscription(ASYNC_ENCODER_TOPIC, 10,
      std::bind(&MyControlHardware::on_encoder, this, std::placeholders::_1));
      while (!thread_exit_ && rclcpp::ok()) {
      rclcpp::spin_some(processing_node);
      }

  • @isrg7221
    @isrg7221 ปีที่แล้ว +1

    Hi Josh, can you clarify how you are getting the connection string to the robot " /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.3:1.0-port0", my serial connection is failing when connecting to the arduino, also is there a way to simulate serial connection so I can see it on a terminal instead of receiving the string in an actual device. Great Tutorial by the way

  • @Build_the_Future
    @Build_the_Future ปีที่แล้ว +1

    In the future, I hope you can cover Nvida Isaac Sim.

  • @nunobartolo2908
    @nunobartolo2908 ปีที่แล้ว +1

    the cpp code that is processing the encoder counts is running in the py or in the arduino? didn't see you flash the arduino

  • @quentinmalfroid5406
    @quentinmalfroid5406 11 หลายเดือนก่อน

    Incredible video !

  • @tolis5631
    @tolis5631 22 วันที่ผ่านมา

    Hello Josh, thank you for this very informative video. I have a question/issue. My Encoder Counts per Pevolution is equal to 246. That means that if i keep loop rate to 30Hz, i can't get good accuracy of the speed control due to the fact that the encoder count/loop should be an integer but for many values of targeted speed (rad/s) I get the same integer number (with different decimal part). (For example 15 rpm is 1.03 count/loop and 20 rpm is 1.37 count/loop). One way to fix this is to use a lower loop rate (lets say 15 Hz -> 15 rpm is 25 count/loop and 20 rpm is 33.3 count/loop), so the values for count/loop will be more spreaded so that an integer value will correspond to only one speed value. Do you think it will be okay to use a lower loop rate or i will have other issues? Actually based on my calculation the loop rate should be about 60 times smaller than the encoder counts/rev to get a unique pair of counts/loop for RPM of 1 to 100. In my case i should use loop rate of 4Hz. Is that enough though? I hope you understand what I am trying to say. Any feedback would be appreciated. Thank you!!

  • @TheOjayyy
    @TheOjayyy 4 หลายเดือนก่อน

    Thank you! 🙌

  • @scotver377
    @scotver377 ปีที่แล้ว

    You are amazing, thank you very much !!

  • @АлексейЛатыш-э2в
    @АлексейЛатыш-э2в ปีที่แล้ว +1

    Good day and thanks for the video!

  • @VijaySrikrishnan
    @VijaySrikrishnan หลายเดือนก่อน

    How did you connect it with ssh and how can you do the same by directly connecting the hardware with the computer?

  • @pete_handy
    @pete_handy ปีที่แล้ว

    Hello! a big fan here. May i ask if what is the point of this if I can just use a calculation to convert cmd_vel (from Twist) to left and right motor velocity? And with a Lidar, I'll just use a laser scan matcher for the odometry of the robot.

  • @ricardocasimiro6424
    @ricardocasimiro6424 ปีที่แล้ว

    i love this video series!!

  • @LucasMOV394
    @LucasMOV394 6 หลายเดือนก่อน +1

    What code did you use in the arduino?

  • @mr.p215
    @mr.p215 9 หลายเดือนก่อน

    Hi Josh, I doubt you will see this but I wanted to ask,
    The robot we are building for a project does not have encoders on the wheels instead we get the odometry with the lidar, this means that the motors only take an input, what do I need to change for the hardware interface for this to actually function?

  • @XONAPA01
    @XONAPA01 ปีที่แล้ว

    Awesome videos sir! I have a question, you have been writing all the nodes as a .launch.py file but not as a pub/sub Python file. Is there any specific reason?
    Thank you so much sir.

  • @hoangha8065
    @hoangha8065 6 หลายเดือนก่อน

    How can you type so effective? Is there any extension or just vscode shortcuts?

  • @diystudio1778
    @diystudio1778 10 หลายเดือนก่อน

    Please make video on tricycle controller 🙏

  • @karimyasser230
    @karimyasser230 ปีที่แล้ว

    Thank you Josh for the best videos as always! I just have a question tho, if I were using a robot with a mecanum drive, would I just expand the plugin to account 4 motors? How does ros know how to deal with the very different kinematics then, I feel like I don't really grasp where the kinematics of a mecanum drive should be written

    • @ArticulatedRobotics
      @ArticulatedRobotics  ปีที่แล้ว +1

      Yeah great question! If you check out my other video on ros2_control there are two halves to the solution, the hardware interface and the controller. So yep for the hardware interface you just expand it to 4 motors, but you'll need a completely different controller. Here are the ones that come with ros2_control, you'd probably need to copy one and write your own (or find someone else who's done it) github.com/ros-controls/ros2_controllers

    • @karimyasser230
      @karimyasser230 ปีที่แล้ว

      ​@@ArticulatedRobotics Aha, that makes a lot more sense now, thank you so much Josh very grateful for your help!

  • @rahultom4310
    @rahultom4310 7 หลายเดือนก่อน

    Hii,
    Can I control and communication with Pioneer 3DX robot using ros2_control which designed to supported by the ARIA, a C++, package or library?
    Your reply will be very helpful for me.

  • @DavidNewmon
    @DavidNewmon ปีที่แล้ว

    I'm curious if you know of any systems that are "bigger" than rviz2, which can do more mission-level stuff. There's the "Commander API" in ros-navigation, but is there anything more big-picture out there that would make it easy to create some repeatable mission route of some sort?

    • @russhall1097
      @russhall1097 ปีที่แล้ว

      You can use waypoint navigation, and read in data from a text file for the waypoints.

  • @h2o11h2o
    @h2o11h2o 3 หลายเดือนก่อน

    blog please~

  • @connor2729
    @connor2729 9 หลายเดือนก่อน

    I have a question, does this ros control code needs to run on Linux with ros or needs to run on the microcontroller with microros or rosserial. And if the code run on Linux what should run on the microcontroller to allow the ros comunication and wich topics should it publish/subscribe

  • @kumarnaveen
    @kumarnaveen ปีที่แล้ว

    Great job!

  • @Choubo168
    @Choubo168 ปีที่แล้ว

    update your course to humble please!
    Lastly, I would like to grateful to you for your teaching

    • @thenoobinventor
      @thenoobinventor ปีที่แล้ว

      He already did, check out the previous video on the channel.

  • @mr.p215
    @mr.p215 9 หลายเดือนก่อน

    If I don't have wheel encoders and am instead generating the odometry with a lidar, how should I go about creating the controller?

  • @kieblade4316
    @kieblade4316 ปีที่แล้ว

    Can you make a video that involve c++ algorithm to control real robot with ros

  • @juanpaez8039
    @juanpaez8039 ปีที่แล้ว

    Hi. I'm new here but i got a problem with diff controller. When I use the teleop_keyboards, it seems nodes are correctly but my robot doesn't move. I don't understand what happend

  • @hiteshjain-c8p
    @hiteshjain-c8p ปีที่แล้ว

    Hey Josh, can I add additional sensors to the interface?
    how do I add IMU to this? I just need to know if I'm editing the right file. I'm a noob, please help.

  • @Ducerobot
    @Ducerobot ปีที่แล้ว

    I installed ros2 humble on pi 4 it runs the examples but wont open with ros2 command even if I source bash first . It's there but wont open thanks for any help.😁👍cool video!

  • @MayankMukesh-m9w
    @MayankMukesh-m9w ปีที่แล้ว

    I need an ROS2 control plugin for the Open Manipulator-X arm (hardware). I'm trying to write it because I haven't found it open-source. However, I'm new to this, so any help would be appreciated.

  • @prathamgyanani5132
    @prathamgyanani5132 9 หลายเดือนก่อน

    Which ros version are you using for this , ros2-focy or any other ??

  • @patrickwasp
    @patrickwasp ปีที่แล้ว

    Is there any special integration between ros control and micro Ros?

  • @Josuzare
    @Josuzare 5 หลายเดือนก่อน

    Gracias, genio

  • @oscarbest5744
    @oscarbest5744 ปีที่แล้ว +1

    Does anyone else get the TextSubstitution error when running the diffbot.launch example? I'm just running the example_2 launch file but i haven't edited anything yet, was wondering if there's been a recent update?

    • @oscarbest5744
      @oscarbest5744 ปีที่แล้ว +2

      Installing xacro sorted it 😊

    • @quentinmalfroid5406
      @quentinmalfroid5406 11 หลายเดือนก่อน

      Hi, thank you for your auto answer ! That help me to resolve this error ! Thank you so much to help community

    • @quentinmalfroid5406
      @quentinmalfroid5406 11 หลายเดือนก่อน

      @@oscarbest5744 Tank you !

  • @0jeetparmar0
    @0jeetparmar0 3 หลายเดือนก่อน

    how do i use teleop with carlikebot ?? in ros2_control_demo anyone knows how?
    thanks

  • @engiucation
    @engiucation 3 หลายเดือนก่อน

    Anyone have tried doing this without Arduino?
    Connecting the GPIO pins of the Raspberry Pi straight to to the system?

  • @letianwang8049
    @letianwang8049 ปีที่แล้ว

    for hardware_interface, seems on_deactive, on_cleanup and on_shutdown will not be called and can not be graceful shutdown. do you know how they work?

    • @ArticulatedRobotics
      @ArticulatedRobotics  ปีที่แล้ว

      This is a great question and I almost covered it in the video. So those will be called IF you use the appropriate service call to deactivate/shutdown the hardware interface. This WON'T happen if you just interrupt it in the terminal with Ctrl-C, but would be used as part of a broader, structured system.

    • @letianwang8049
      @letianwang8049 ปีที่แล้ว

      @@ArticulatedRobotics thanks for the answer. but why they don't implement auto graceful shutdown for hardware interface? is their any concern for that?

  • @divy04
    @divy04 4 หลายเดือนก่อน

    fatal error: hardware_interface/base_interface.hpp: No such file or directory
    7 | #include "hardware_interface/base_interface.hpp"
    | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    compilation terminated.
    same error as discussed in the thread, please help, using ros2 humble

  • @RithJosef
    @RithJosef ปีที่แล้ว

    Hi @JoshNewans How could i do if i am using in Foxy ?

    • @ArticulatedRobotics
      @ArticulatedRobotics  ปีที่แล้ว

      The same ros2_control demo code is available for foxy so you can find the appropriate branch/commit and start from there, but the rest of my instructions will be harder to follow as things have changed. The concepts are the same though.
      But you should swap to humble as foxy is EOL now!

  • @MG.102
    @MG.102 ปีที่แล้ว

    Hi josh one question is the pi3 with 1GB ram enough for uploading ros

    • @russhall1097
      @russhall1097 ปีที่แล้ว +1

      I would say, "No." Even 2 GB is sketchy. 4 GB works much better. PI 4 with 4GB is good.

    • @ArticulatedRobotics
      @ArticulatedRobotics  ปีที่แล้ว +1

      As Russ says below, unfortunately it isn't really. Maybe if you used a different OS but that is not properly supported. I'd also recommend the 4GB Pi 4.
      But if that's what you've got, try installing Debian. I think people have run it on arch too but that's a bit harder.

    • @ArticulatedRobotics
      @ArticulatedRobotics  ปีที่แล้ว +1

      Oh and make sure you use an OS without a gui - Ubuntu Server may even be ok? But Debian headless would be better.

  • @christophermacier
    @christophermacier ปีที่แล้ว

    Is there a way to do the hardware setup using Python?

    • @ArticulatedRobotics
      @ArticulatedRobotics  ปีที่แล้ว

      Unfortunately not with ros2_control.
      You could create the entire control system in python though (i.e. a node that takes a twist or other command in, calculates drive commands, and sends them tot he motors)

  • @HarshSharma-j2p
    @HarshSharma-j2p 17 วันที่ผ่านมา

    i want to write my hardware interface code for 2 wheel diff_drive in ROS2 foxy (in jet son device Ubuntu 20).but i am having the error (may be due to version of ROS2).I am using the same code above and modify slightly.
    /home/inv-lab/Harsh/robot_ws/src/diffdrive_arduino/hardware/diffbot_system.cpp:39:26: error: ‘info_’ was not declared in this scope; did you mean ‘info’?
    39 | cfg_.left_wheel_name = info_.hardware_parameters["left_wheel_name"];
    | ^~~~~
    | info
    /home/inv-lab/Harsh/robot_ws/src/diffdrive_arduino/hardware/diffbot_system.cpp:29:44: warning: unused parameter ‘info’ [-Wunused-parameter]
    29 | const hardware_interface::HardwareInfo & info)
    /opt/ros/foxy/include/class_loader/meta_object.hpp:216:7: required from here
    /opt/ros/foxy/include/class_loader/meta_object.hpp:218:12: error: invalid new-expression of abstract class type ‘diffdrive_arduino::DiffDriveArduinoHardware’
    218 | return new C;
    | ^~~~~

  • @robertvirnau6990
    @robertvirnau6990 9 หลายเดือนก่อน

    hello! thanks for this great video! I am new to ROS2. When building then running the example 2 package I get :
    [ERROR] [launch]: Caught exception in launch (see debug for traceback): executed command failed. Command: /opt/ros/humble/bin/xacro /home/bobby/control_ws/install/ros2_control_demo_example_2/share/ros2_control_demo_example_2/urdf/diffbot.urdf.xacro use_mock_hardware:=false
    Captured stderr output: error: package not found: "package 'ros2_control_demo_description' not found, searching: ['/home/bobby/control_ws/install/ros2_control_demo_example_2', '/opt/ros/humble']"
    when processing file: /home/bobby/control_ws/install/ros2_control_demo_example_2/share/ros2_control_demo_example_2/urdf/diffbot.urdf.xacro
    rosdep gives me:
    rosdep install -i --from-path src --rosdistro $ROS_DISTRO -y
    ERROR: the following packages/stacks could not have their rosdep keys resolved
    to system dependencies:
    ros2_control_demo_example_2: Cannot locate rosdep definition for [ros2_control_demo_description]
    any ideas on what to do to fix this. A quick internet search sent me many directions... I am going to try going through the ros2_control docs and tutorials as well.

    • @robertvirnau6990
      @robertvirnau6990 9 หลายเดือนก่อน

      figured out. sometimes you just have to keep swimming :). I saw that ros2_control for humble was failing on the website, so I upgraded to iron. Not sure if that was my issue, but it works now.

    • @AhmedMagdy-xb8bl
      @AhmedMagdy-xb8bl 9 หลายเดือนก่อน +1

      Just copy the ros2_control_demo_description folder to control_ws/src then build your work space and you will get rid of this error.

    • @RoboMech48
      @RoboMech48 7 หลายเดือนก่อน

      @@AhmedMagdy-xb8bl hello sir can you help me?
      i am facing issues?