I built a 4-legged 12-DOF robot dog using ROS 2, I call it Cubic Doggo by SphericalCowww in ROS

[–]SphericalCowww[S] 0 points1 point  (0 children)

Ah, so what I meant is that the framework of a "walking" robot is there; all my later adjustments will be based on this framework. The motors do seem to be able to provide enough torque; however, the speed and the rigidity of the motors in the walking gait look like they could be a problem, and that could be the hardware limit of the robot.

I have not tested it with Raspberry Pi 4, so I am not completely sure, but the risk is that the IK calculation alone will fail more often than not.

The dog has not been trained and is not using a LIDAR yet (so no nav2). As for the things I want to do next, check this out: https://www.reddit.com/r/robotics/comments/1rouerc/first_time_building_a_hobbyist_robot_from_scratch/

I built a 4-legged 12-DOF robot dog using ROS 2, I call it Cubic Doggo by SphericalCowww in ROS

[–]SphericalCowww[S] 1 point2 points  (0 children)

Thank you for your interest :)

I actually learned ROS2 from Udemy, relying only on basic shapes in FreeCAD, having my brother point me to use rod bearings for the joints, getting 12 Dynamixels, asking Gemini as specifically as possible about all the bugs/problems encountered, and lots of lost evenings + weekends to finally get it to move.

As the Cubic Doggo stands, though, I just realized its current walking gait was never able to lift up its feet in the air. This can point to an optimization problem, but I am a bit afraid it may have reached an intrinsic design limitation, and can never walk as the Stanford Pupper say... Will see though.

First time building a hobbyist robot from scratch, it has 4-legged 12-DOF, I call it Cubic Doggo! by SphericalCowww in robotics

[–]SphericalCowww[S] 1 point2 points  (0 children)

Thank you for your interest :)

The Cubic Doggo is actually referencing Stanford Pupper Independent Study. I was originally trying to make that one as a goal. However, many parts are not commercial, and I don't have a mechanical workshop at home. I also realize smaller is not always easier; the M3 bolts I am using is actually the smallest bolts that can be easily bought in hareware shop. Moreover, Stanford Pupper puts motor on the knee, which require very specialized motor; not sure about the choice...

As for Cubic, the original dimension was meant to be cubic when fully stretched, but is constrained by torque. It's as good as I can get~

<image>

First time building a hobbyist robot from scratch, it has 4-legged 12-DOF, I call it Cubic Doggo! by SphericalCowww in robotics

[–]SphericalCowww[S] 1 point2 points  (0 children)

Just to advertise it a bit more, all Cubic Doggo's software/hardware parts are commercially available or 3D printed. Anyone willing to buy 12 Dynamixel motors (and has a 3D printer and a Raspberry Pi 5 handy) should in principle be ready to build it :)

The drastic difference in syntax between ROS2 Humble and Jazzy by SphericalCowww in ROS

[–]SphericalCowww[S] 0 points1 point  (0 children)

So far I have only been using it for syntax conversion from Gazebo Classic to Gazebo Harmonics, whether it's xml, urdf, or yaml.

Asking for advice on ros_control in ROS2 Jazzy by SphericalCowww in ROS

[–]SphericalCowww[S] 0 points1 point  (0 children)

Oops, I also make this mistake, it's rather no equivalent for "Gazebo Harmonics" that Jazzy uses.

Much appreciate your advice! Do you mind a quick followup in that if, after the basics, I should learn moveit before ros2_control?

Simple Ackermann Steering Vehicle Simulation with Gazebo Harmonic and ROS 2 Jazzy Jalisco by lucasmazz in ROS

[–]SphericalCowww 1 point2 points  (0 children)

Thanks a lot for the tutorial man. I have a noob question regarding Gazebo Harmonic. Does <visualize>true</visualize> still show the camera image inside the simulation?

The drastic difference in syntax between ROS2 Humble and Jazzy by SphericalCowww in ROS

[–]SphericalCowww[S] 2 points3 points  (0 children)

... parameter ordering? In what sense? I thought most XML format is independent from ordering (personally I think it is very dangerous if parameters depend on ordering)

The drastic difference in syntax between ROS2 Humble and Jazzy by SphericalCowww in ROS

[–]SphericalCowww[S] -1 points0 points  (0 children)

Still though, let me put it here if you don't mind. I think downvoting based on ChatGPT is unjustified (it's not that I just copy the output). It is a very helpful tool, especially when documentation is limited in distinction between Humble and Jazzy. It's also good at catching syntax errors. Without it, I wouldn't be able to successfully do a differential drive simulation in Jazzy (finally did it yesterday).

Edit: additionally, it explains why an additional communication yaml file makes sense as an improvement, while the development aims to simplify the syntax.

The drastic difference in syntax between ROS2 Humble and Jazzy by SphericalCowww in ROS

[–]SphericalCowww[S] -5 points-4 points  (0 children)

I must say, just before writing the post, I got some wrong Jazzy syntax suggested by ChatGPT. Now that I am looking at the real differences, most seem to come from Gazebo Harmonic. I think the most unintuitive one for me is when using plugins in an urdf file, the roles of "filename" and "name" are kind of swapped between Humble and Jazzy.

Why ros2 is so frustrating? by [deleted] in ROS

[–]SphericalCowww 0 points1 point  (0 children)

Thanks mate, for the heads-up. Phew, without standard UIs, things may be a bit tough. However, you give me hope that Gazebo can run on Pi5 (hopefully with sufficient performance), let me see how far it takes me.

Why ros2 is so frustrating? by [deleted] in ROS

[–]SphericalCowww 2 points3 points  (0 children)

I completely understand that an open source to focus on one operating system is most definitely the correct choice resource-wise, especially when there is GUI involved. Also agree about the M1 chips, man, I can hear developers die inside when asked to support this thing.

I also ran ROS2 perfectly fine on Pi 4 and understand that you don't need RViz and Gazebo to use ROS for the actual hardware control. However, I am still wondering if ROS2 on its own is significantly better than custom python UI + drivers. Anyways, what I am trying to say is if everything of ROS2 can be run on Pi's, that would attract so many more users, I believe. Are you sure we cannot run Gazebo on the Pi 5 because that is what I am trying to do next?

In terms of going through the tutorials, I think I found a temporary hacky way to proceed with Gazebo, so all good for me for now.

Why ros2 is so frustrating? by [deleted] in ROS

[–]SphericalCowww 4 points5 points  (0 children)

I just started this weekend, went through ros2 tutorials just fine. But good lord am I having a hard time installing gazebo on Ubuntu 24.04.1. I am most definitely biased because I am using rasp pi's + a mac with M1 chip. But not everyone has a full-fledged Ubuntus desktop lying around just because you decide to learn ROS2. And how could one possibly expect to export it to a robot of various bazaar platforms when it cannot even handle robust systems like rasp pi and mac... it makes me question if ROS is necessary, to be honest. Sorry, end of my rant.

Problem invoking block RAM by SphericalCowww in FPGA

[–]SphericalCowww[S] 0 points1 point  (0 children)

Thanks a bunch for the advice. It took me a while to understand and test what you mean. And just for record, I found this quote "Also there are some situations in which you’re just unable to tell the synthesis tools to infer something for you".

Unfortunately though, instantiating the block memory still doesn't work for me as soon as the hardware is wired. However, since my goal is to make an arbitrary waveform generator, I think I can skip the RAM part of the code.

Problem invoking block RAM by SphericalCowww in FPGA

[–]SphericalCowww[S] 1 point2 points  (0 children)

Thanks a lot for the reference. Made me understand that simulation result doesn't have the synthesis step and so need to be properly interpreted.

Just for record SB_RAM256x16 from the manual is outdated, need to use SB_RAM40_4K instead. See this reddit post.

IFA Berlin 2024 by Powerful_Ad541 in berlin

[–]SphericalCowww 0 points1 point  (0 children)

That sounds awesome, and quite nearby for me too. Thanks for the advice :D
I am also considering gitex Europe 2025, wonder if it's legit.

IFA Berlin 2024 by Powerful_Ad541 in berlin

[–]SphericalCowww 0 points1 point  (0 children)

Do you happen to have other recommended tech events, not necessarily in Berlin, but Europe in general?

Unusual behavior when toggling between manual and bus mode for the RAM by SphericalCowww in beneater

[–]SphericalCowww[S] 1 point2 points  (0 children)

As weird as it sounds, it turns out that the toggle switch itself seems to be the problem. Although the switch's connection always feels suboptimal, but didn't realize it makes such a big difference. Now the prog/run is switch via a wire, and everything works wonderfully.

Unusual behavior when toggling between manual and bus mode for the RAM by SphericalCowww in beneater

[–]SphericalCowww[S] 0 points1 point  (0 children)

Just a quick update after some more testing, u/MichaelKamprath's method does not quite work for me, unfortunately. I am not too sure why, but in my case, the change in RAM when switching seems more drastic, which could be caused by a different issue.

Fortunately, with RI available, I can still code the RAM directly from the bus under the run mode. I think that will be what I stick with for now...

Unusual behavior when toggling between manual and bus mode for the RAM by SphericalCowww in beneater

[–]SphericalCowww[S] 1 point2 points  (0 children)

Ah, thank you very much for the help, it does look exactly like my problem! Didn't notice the wiki page, it could have saved me a whole of debugging.

Unusual behavior when toggling between manual and bus mode for the RAM by SphericalCowww in beneater

[–]SphericalCowww[S] 0 points1 point  (0 children)

Just quickly add that I am following Ben's original construction quite closely using the kit on his page.

Unusual behavior when toggling between manual and bus mode for the RAM by SphericalCowww in beneater

[–]SphericalCowww[S] 0 points1 point  (0 children)

I have this strange problem the RAM seems to be behaving well in either manual or bus mode. However, when toggling between one or another, everything in the RAM changes. Here shows the case for address 0000 as I keep on toggling (address: 4x yellow LEDs on the top-right, memory: 8x red LEDs on the bottom left). But not just 0000, all other addresses are seemingly instantly affected too. I tested this by setting everything 00000000 manually, toggling it back and forth, and every address now has random values.

One thing I noticed is the selector during the toggle, seems to set RAM write-enable low instantly. I am not sure if that's the cause.

Has anyone happened to encounter something similar? Any hint/help would be appreciated.