setStiffities on Pepper для перемещения рук

Я хотел бы поместить Пеппер в определенную позицию (немного как при использовании приложения «Удар и поза». Я использую этот минимальный код:

import qi

session = qi.Session()
session.connect("tcp://YOUR_IP:9559")
almotion = session.service("ALMotion")
almotion.setStiffnesses("RArm", 0.0)
  1. Я запускаю приведенный выше фрагмент кода (теперь переместите правую руку)
  2. Я держу правую руку в нужном мне положении
  3. Я запускаю тот же код выше с жесткостью 1.0.

Однако это не фиксирует руку в том положении, в котором я ее держал. Рука опускается, а затем устанавливается жесткость 1,0.

Когда я делаю то же самое с «Head» вместо «RArm», это работает нормально, как будто двигатели не исправляются, когда мы их держим. Как мне поступить?

РЕДАКТИРОВАТЬ 1: после отключения автономных способностей у меня все еще возникает проблема, заключающаяся в том, что руки не блокируются в том положении, которое я держу. Мой код в настоящее время:

import sys
import qi

stiffness = 1.0
if len(sys.argv) > 1: stiffness = float(sys.argv[1])

session = qi.Session()
session.connect("tcp://YOUR_IP:9559")

almotion = session.service("ALMotion")
almotion.setBreathEnabled("Body", False) # Also tried True
almotion.setIdlePostureEnabled("Body", False) # Also tried True

allife = session.service("ALAutonomousLife")
allife.setAutonomousAbilityEnabled("BackgroundMovement", False)
allife.setAutonomousAbilityEnabled("BasicAwareness", False)
allife.setAutonomousAbilityEnabled("ListeningMovement", False)
allife.setAutonomousAbilityEnabled("SpeakingMovement", False)

almotion.stiffnessInterpolation("LArm", stiffness, 1.0)

Проверить это с помощью

python code.py 0.0 # To free the left arm
# Move the left arm how you wish
python code.py 1.0 # To fix the arm

person wyatt    schedule 03.10.2017    source источник


Ответы (2)


Есть "автономные возможности" на Перец, который заставляет его дышать, осмотритесь и опустите руки. Вы хотите, чтобы в вашем случае были инвалиды.

Для этого добавьте в свой код:

alife = session.service("ALAutonomousLife")
alife.setAutonomousAbilityEnabled("BackgroundMovement", False)
alife.setAutonomousAbilityEnabled("BasicAwareness", False)
alife.setAutonomousAbilityEnabled("ListeningMovement", False)
alife.setAutonomousAbilityEnabled("SpeakingMovement", False)

Вы также можете сделать это с помощью ALMotion.setIdlePostureEnabled & ALMotion.setBreathEnabled

person JLS    schedule 04.10.2017
comment
Спасибо, но у меня все еще та же проблема. См. Правка 1. - person wyatt; 06.10.2017
comment
То же самое с ALMotion.setIdlePostureEnabled и ALMotion.setBreathEnabled? - person JLS; 09.10.2017

Роботы NAO и Pepper автоматически регулируют жесткость своих суставов, чтобы снизить перегрев и потребление энергии. См. эту страницу документации. Я думаю, вы можете быть уверены, что он предоставит вам безопасное значение жесткости для перемещения суставов робота.

По моему опыту, если вы слегка надавите на руку Пеппера, жесткость автоматически уменьшится, пока вы не сможете двигать рукой. Затем, если вы оставите руку неподвижной и перестанете принуждать ее, скованность автоматически вернется.

Однако, если это вас не устраивает и вы хотите контролировать жесткость, вы можете отключить интеллектуальную жесткость с помощью almotion.setSmartStiffnessEnabled(False).

Тогда не забывайте, что ваш вызов almotion.stiffnessInterpolation("LArm", stiffness, 1.0) потребует 1,0 секунды, чтобы включить жесткость, и что этого времени достаточно для того, чтобы рука упала. Убедитесь, что спусковой крючок для включения жесткости сработал за некоторое время до того, как пользователь уронит руку Пеппера.

person Victor Paléologue    schedule 21.11.2019