From: Marc K. <mki...@ga...> - 2011-01-17 12:08:07
|
Sorry one more follow-up question, What does setting the default axis in a Mass object do if it doesn't define the direction of the associated body? For example, M = ode.Mass() M.setCappedCylinder(10, *direction (x-axis = 1)*, *radius*, *length*) body1.setMass(M) body1.setPosition((*some position x, y, z)*) I set the mass of my links such that they would be distributed along the x-axis but is it true that this does not orient the body along the x-axis? Thank you again. marc On Mon, Jan 17, 2011 at 6:43 AM, Marc Killpack <mki...@ga...>wrote: > Ethan, > > Regardless of the delay, I really appreciate the response. Your solution > was exactly correct and cleared up my collision problems. > > I was confused about the initial orientation given to created cylinder > bodies. Also, although rotation about the center of mass for each body > makes the most sense, I was confused by the fact that all coordinates (both > used for setting and returning a body's state) are in a global frame. In > any case, works great now, thank you. > > To explain my last point more, I'm interested in getting forces that result > from collisions, but when I tried to use "setFeedback" with my contact > joints, it threw the following error: > > ODE INTERNAL ERROR 2: Bad argument(s) in dJointSetFeedback() > Aborted > > I'd seen this in other threads and thought this meant that getting reaction > forces from the contact was not possible. Also, I assumed that because the > geometry has no "mass", that getting contact forces from the collision with > a body and a geometry was also not possible. So I made an extra body for my > obstacle that is rigidly fixed to the environment with a fixed joint that > will give forces induced by the collision somewhere along the body. If > there is a better/other way, I'd be happy to hear about it. > > Thanks again for the help and course correction. > > > Sincerely, > > Marc Killpack > Healthcare Robotics Lab - Georgia Tech > > > > On Sun, Jan 16, 2011 at 4:45 AM, Ethan Glasser-Camp <gl...@cs...>wrote: > >> Hi! Sorry about the delay -- it's hard for me to find free time these >> days. I'm not really familiar with vpython so I may be vastly >> misinterpreting the function of your program. >> >> >> On 01/11/2011 03:17 PM, Marc Killpack wrote: >> >>> I've been trying to make a simple robot simulator which includes >>> collisions. I'm getting weird >>> behavior though and wondered if I'm just making a dumb mistake. I want >>> some objects that are >>> fixed in the environment. From other examples and from archived >>> questions on the list it seems like >>> the best way to do this is using geometry objects that are not associated >>> with a body. The only >>> collision that works so far is if I collide with the floor plane that is >>> defined as a fixed geometry. >>> I've attached my file that uses vpython for visualization and I had the >>> following questions if anyone >>> is willing: >>> >>> 1)If I set a tall square in place, different sizes will result in >>> collisions while smaller sizes do not, why? >>> (Try changing width and length of square to 0.1 in line 56 of .py file to >>> reproduce this) >>> >> >> It looks like body1, your robot arm, is not being rotated. If I understand >> correctly, this means that the capsule is extending along the Z-axis, >> whereas you are drawing it as extending along the X-axis. That is to say, >> your joint is not swinging the capsule like the arm of a turnstile, but more >> like the head of a hammer. I think the box obstacle is sufficiently wide >> that the capsule hits it anyhow, but if it is only 0.1, it fits "inside" the >> the radius of the hammer swing. To fix this, I put: >> >> body1.setRotation([0, 0, 1, 0, 1, 0, -1, 0, 0]) >> >> Just after your body1.setPosition() call, before adding the geom. (A 90 >> degree rotation around the Y axis, to exchange the X and Z axes, to make >> your visualization line up with the simulation.) Now a collision always >> happens. >> >> >> Also, if I change the bounciness in the collision callback function (line >>> 28), it seems to have no effect >>> on the collision, why? >>> >> >> I'm guessing the motor on the joint is sufficiently powerful to keep >> pressing the body against the obstacle. Try changing MaxForce to 0 after the >> first time step (at the end of the while loop), so that the body has an >> initial velocity. You'll definitely see a bounce, and it will definitely be >> different for different bouncinesses. >> >> >> 2)I can place a geometry object that is a capped cylinder in the >>> environment but how do I orient it? I tried >>> setting the rotation, but still couldn't get a collision to occur. >>> Change "OBSTACLE = 2" on line 9 to see this. >>> >> >> This looks right to me, and once I added the rotation of the body (as per >> point 1), this caused collisions. >> >> >> 3)If I want forces from the collision, it seems that I have to have the >>> obstacle be associated with a body >>> as well, is that true? If so, what kind of hinge or connection should I >>> use? I tried a fixed joint to the >>> environment but that also did weird things. >>> >> I don't think this is true. Can you explain further? >> >> Ethan >> >> > <#12d93c9ab7c40535_12d938cf63e95412_> > <#12d93c9ab7c40535_12d938cf63e95412_> > <#12d93c9ab7c40535_12d938cf63e95412_> <#12d93c9ab7c40535_12d938cf63e95412_> > |