Ask Your Question

DIY robot arm general questions

asked 2019-09-22 13:42:46 -0600

makemelive gravatar image


i am waiting to recieve a robot arm (pls see it on amazon sorry for making this question depended on external links) It has 8 DS3218 large torque servo I also bought this dc dc buck converter to power it from a battery


I plan to use arduino due (for the 8 signals) alongside this buck converter (which has capacitors) to control the robot arm, I think i need to connect the arduino ground with the buck converter ground, also when the robot doesn't move and doesn't draw much current will the buck converter have problem? some require at least 10% load, i would like to avoid a servo shield since i dont know the compatibillity with arduino due and it's not needed (i plan to control it with rosserial easy!)

Lastly some advices on how to create a proper urdf (how to measure links length and joint origins) since some links have pulleys

Thank you for your advices!!

edit retag flag offensive close merge delete


Your question is more about electronic than ROS, I am not sure it is the best place to ask.

The issue with no name components from marketplace such Amazon is the lack of precise technical specifications.

I think it should work.

If you plan to use a computer with i2c such as Raspberry Pi, an alternative solution would be to control the servos directly from the PC using a PCA9685 such as this board It would avoid the rosserial stage.

rreignier gravatar image rreignier  ( 2019-09-23 01:55:07 -0600 )edit

I'll just to add that I would recommend using a servo shield. The generally include dedicated PWM driver chips which will be much better at generating the stable PWM signals you'll need to precisely control the servo posiiton. If you're running 7 servos as well as serial communication on an arduino you won't be able to get the PWM timing as good.

PeteBlackerThe3rd gravatar image PeteBlackerThe3rd  ( 2019-09-23 08:23:05 -0600 )edit

I tested to control 1 small servo with a uck converter that i had and didn't seem to have problem with the low load, also connecting the grounds together is mandatory. So the best is to use Adafruit 16-Channel for the pwm timing and connect it with i2c directly to jetson nano or to due since i arleady use rosserial I am a little bit confused i want to power the servos with the buck converter since it will provide more stable power how will i connect the buck converter with the Adafruit? will adafruit take the stable voltage from the buck converter? which ground to connect to due or jetson nano? I hope i am making sense

makemelive gravatar image makemelive  ( 2019-09-23 10:49:19 -0600 )edit

will adafruit need a different "logic" input voltage and can be used only for the signals?

makemelive gravatar image makemelive  ( 2019-09-23 10:51:14 -0600 )edit

Connect your buck converter to the screw terminal block (V+ and GCC) with 5V. This will be the power for the servos. Connect the Jetson Nano i2c port to the side connector (GND, SCL, SDA, 3v3 on VCC and let V+ unconnected). See instructions here:

rreignier gravatar image rreignier  ( 2019-09-23 11:00:13 -0600 )edit

ok got it! thanks!

makemelive gravatar image makemelive  ( 2019-09-23 11:35:31 -0600 )edit

now lets hope i can make an accurate simple urdf for move it, since it's real i don't think i need accurate inertia, also some servos are not directly attach to the "links" use pulleys will i need to make a translation if i assume the servo is at the link? lastly since the servos dont have feedback what i should be carefull with, except for assuming perfect motion on the move-it part? will the robot know where it is when it starts? how to drive two servos together (same pwm? offsets?)?. That i think are all the problems i will face :P thanks!

makemelive gravatar image makemelive  ( 2019-09-23 11:45:55 -0600 )edit

Did you solve this or make progress? Can you summarize what you learned in an answer?

fvd gravatar image fvd  ( 2020-03-02 04:58:36 -0600 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2020-03-03 06:56:41 -0600

makemelive gravatar image

Yes @fvd i managed to integrate my robotic arm with moveit and ros control

the condensed version is that i use the i2c servo driver (connected with the arduino due - rosserial) the ground of the arduino must be connected with the ground of the dc-dc converter powering the servo driver In the arduino i used a simple callback that just takes appropiate commands and send thems to the servos with i2c.

I also wrote and a simple hardware interface that assumes perfect execution (no feedback on the servos) this means that in the read and write functions i dont do much simply whatever command comes from the joint_command_interface i write it on the joint_state_interface.

This has the effect that the robot-rviz thinks the arm is moving even if you have no robotic arm attached.

Then i made a simple node that subscribes to joint_states transform the joint_States to the appropiate servo commands and sends them to arduino for execution. (The arm is a clone of the joint_states)

you can see the code on my graduation project the open mobile manipulator project

P.S the hardware interface is on the branch to-jetson P.S the tranform is at lynxbot_bringup/src/pub to arduino

cheers !!

edit flag offensive delete link more



Thanks for the detailed response! It's appreciated. Don't forget to share what you learned in your project on this site once in a while and help newcomers, too.

fvd gravatar image fvd  ( 2020-03-03 07:05:39 -0600 )edit

Hello @makemelive, when you say "Then I made a simple node that subscribes to joint_states"...

Which part of your GitHub is that? There is a lot of stuff on there and I am having trouble figuring out how to implement this part of my project...

Would you mind offering some assistance?

matthewmarkey gravatar image matthewmarkey  ( 2020-05-31 08:52:25 -0600 )edit

@matthewmarkey this is the node, that subscrives to joint_states and transforms them to appropiate servo commands in order to be used with this new i2c driver (directly to Nano without arduino-rosserial middleware). This node is almost the same if you want to use arduino too, and maps the range of -pi - + pi to e.g 2000 - 8000 in order to send the i2c driver. Also this driver has a small bug that if you keep sending the same command it will depower the servos after the timeout, so a hack was made to +-1 if same joint callback. Also the helper is a trick for servo2 to clone servo1 + command of servo2 bcs my arm has depedent joints while the urdf does not. Please email me (at the bottom of the Readme on my project) for further questions we ...(more)

makemelive gravatar image makemelive  ( 2020-05-31 13:18:12 -0600 )edit

Thanks! I sent you an email to both!

matthewmarkey gravatar image matthewmarkey  ( 2020-05-31 13:25:43 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools



Asked: 2019-09-22 13:42:46 -0600

Seen: 146 times

Last updated: Mar 03 '20