2016-05-29 16 views
1

私はpythonで使用されていません。基本的なことだけを知っている。 私はpythonで1行にスーパーロング文字を持つ逆jacobianの計算にmath演算を使用しています。 私の質問は 'pythonは1行に制限文字を持っていますか? 、またはPythonで正しいモジュールを作る方法は? またはPython用の演算で許可されていない演算はありますか?SyntaxError:数式のためのPython構文が無効

私のPythonプログラムが 、ROS platformのために設計されており、これは私のプログラムの一部です:

class Skelplot(): 
    def __init__(self): 
     .... 
     self.q_raw  =[0,0,0] 
     self.dq_ref  =[0,0,0] 
     .... 

     while not rospy.is_shutdown(): 
      ... 
      dx = x_now - right_hand.x() 
      dy = y_now - right_hand.y() 
      dz = z_now - right_hand.z() 

      self.inverse_jacobian(dx,dy,dz) 

      self.q_raw[0] = self.dq_ref[0] + self.q_raw[0] 
      self.q_raw[1] = self.dq_ref[1] + self.q_raw[1] 
      self.q_raw[2] = self.dq_ref[2] + self.q_raw[2] 
      ... 

    def inverse_jacobian(self, dx, dy, dz): 
     self.dq_ref[0] = (-(5*sin(self.q_raw[0] + 2*self.q_raw[1]) - 5*sin(self.q_raw[0] - self.q_raw[2]) + 5*sin(q_raw[0] + self.q_raw[1] + 2*self.q_raw[2]) + 10*sin(self.q_raw[0] + 2*self.q_raw[1] + self.q_raw[2]) - 5*sin(self.q_raw[0] + self.q_raw[1]) - 5*sin(self.q_raw[0] + self.q_raw[2]) - 15*sin(self.q_raw[0]) + 10*sin(self.q_raw[0] + 2*self.q_raw[1] + 2*self.q_raw[2]))/(cos(self.q_raw[1] + 2*self.q_raw[2]) + cos(2*self.q_raw[1] + self.q_raw[2]) + cos(2*self.q_raw[1])/2 + cos(2*self.q_raw[2]) + cos(2*self.q_raw[1] + 2*self.q_raw[2]) - cos(self.q_raw[1]) - cos(self.q_raw[2]) - 5/2))*dx + ((5*cos(self.q_raw[0] + 2*self.q_raw[1]) - 5*cos(self.q_raw[0] - self.q_raw[2]) + 5*cos(self.q_raw[0] + self.q_raw[1] + 2*self.q_raw[2]) + 10*cos(self.q_raw[0] + 2*self.q_raw[1] + self.q_raw[2]) - 5*cos(self.q_raw[0] + self.q_raw[1]) - 5*cos(self.q_raw[0] + self.q_raw[2]) - 15*cos(self.q_raw[0]) + 10*cos(self.q_raw[0] + 2*self.q_raw[1] + 2*self.q_raw[2]))/(cos(self.q_raw[1] + 2*self.q_raw[2]) + cos(2*self.q_raw[1] + self.q_raw[2]) + cos(2*self.q_raw[1])/2 + cos(2*self.q_raw[2]) + cos(2*self.q_raw[1] + 2*self.q_raw[2]) - cos(self.q_raw[1]) - cos(self.q_raw[2]) - 5/2))*dy 
     self.dq_ref[1] = (-(5*sin(self.q_raw[0] - self.q_raw[1]) - 5*sin(self.q_raw[0] + 2*self.q_raw[1]) + 5*sin(self.q_raw[0] - self.q_raw[2]) - 5*sin(self.q_raw[0] + self.q_raw[1] + self.q_raw[2]) + 5*sin(self.q_raw[0] + self.q_raw[1] + 2*self.q_raw[2]) - 10*sin(self.q_raw[0] + 2*self.q_raw[1] + self.q_raw[2]) - 10*sin(self.q_raw[0] + self.q_raw[1]) + 5*sin(self.q_raw[0] + self.q_raw[2]) + 10*sin(self.q_raw[0]) + 5*sin(self.q_raw[0] - self.q_raw[1] - self.q_raw[2]) - 5*sin(self.q_raw[0] + 2*self.q_raw[1] + 2*self.q_raw[2]))/(cos(self.q_raw[1] + 2*self.q_raw[2]) + cos(2*self.q_raw[1] + self.q_raw[2]) + cos(2*self.q_raw[1])/2 + cos(2*self.q_raw[2]) + cos(2*self.q_raw[1] + 2*self.q_raw[2]) - cos(self.q_raw[1]) - cos(self.q_raw[2]) - 5/2))*dx + ((5*cos(self.q_raw[0] - self.q_raw[1]) - 5*cos(self.q_raw[0] + 2*self.q_raw[1]) + 5*cos(self.q_raw[0] - self.q_raw[2]) - 5*cos(self.q_raw[0] + self.q_raw[1] + self.q_raw[2]) + 5*cos(self.q_raw[0] + self.q_raw[1] + 2*self.q_raw[2]) - 10*cos(self.q_raw[0] + 2*self.q_raw[1] + self.q_raw[2]) - 10*cos(self.q_raw[0] + self.q_raw[1]) + 5*cos(self.q_raw[0] + self.q_raw[2]) + 10*cos(self.q_raw[0]) + 5*cos(self.q_raw[0] - self.q_raw[1] - self.q_raw[2]) - 5*cos(self.q_raw[0] + 2*self.q_raw[1] + 2*self.q_raw[2]))/(cos(self.q_raw[1] + 2*self.q_raw[2]) + cos(2*self.q_raw[1] + self.q_raw[2]) + cos(2*self.q_raw[1])/2 + cos(2*self.q_raw[2]) + cos(2*self.q_raw[1] + 2*self.q_raw[2]) - cos(self.q_raw[1]) - cos(self.q_raw[2]) - 5/2))*dy 
     self.dq_ref[2] = (-(10*sin(self.q_raw[0] - self.q_raw[2]) - 15*sin(self.q_raw[0] + self.q_raw[1] + self.q_raw[2]) + 10*sin(self.q_raw[0] + self.q_raw[1] - self.q_raw[2]) - 10*sin(self.q_raw[0] + self.q_raw[1] + 2*self.q_raw[2]) - 5*sin(self.q_raw[0] + 2*self.q_raw[1] + self.q_raw[2]) + 10*sin(self.q_raw[0] + self.q_raw[1]) - 5*sin(self.q_raw[0] + self.q_raw[2]) + 5*sin(self.q_raw[0]) + 5*sin(self.q_raw[0] - self.q_raw[1] - self.q_raw[2]) - 5*sin(self.q_raw[0] + 2*self.q_raw[1] + 2*self.q_raw[2]))/(cos(self.q_raw[1] + 2*self.q_raw[2]) + cos(2*self.q_raw[1] + self.q_raw[2]) + cos(2*self.q_raw[1])/2 + cos(2*self.q_raw[2]) + cos(2*self.q_raw[1] + 2*self.q_raw[2]) - cos(self.q_raw[1]) - cos(self.q_raw[2]) - 5/2))*dx + ((10*cos(self.q_raw[0] - self.q_raw[2]) - 15*cos(self.q_raw[0] + self.q_raw[1] + self.q_raw[2]) + 10*cos(self.q_raw[0] + self.q_raw[1] - self.q_raw[2]) - 10*cos(self.q_raw[0] + self.q_raw[1] + 2*self.q_raw[2]) - 5*cos(self.q_raw[0] + 2*self.q_raw[1] + self.q_raw[2]) + 10*cos(self.q_raw[0] + self.q_raw[1]) - 5*cos(self.q_raw[0] + self.q_raw[2]) + 5*cos(self.q_raw[0]) + 5*cos(self.q_raw[0] - self.q_raw[1] - self.q_raw[2]) - 5*cos(self.q_raw[0] + 2*self.q_raw[1] + 2*self.q_raw[2]))/(cos(self.q_raw[1] + 2*self.q_raw[2]) + cos(2*self.q_raw[1] + self.q_raw[2]) + cos(2*self.q_raw[1])/2 + cos(2*self.q_raw[2]) + cos(2*self.q_raw[1] + 2*self.q_raw[2]) - cos(self.q_raw[1]) - cos(self.q_raw[2]) - 5/2))*dy 

これは応答です:

Traceback (most recent call last): 
    File "/home/adelleodel/ros/src/mekatron/nodes/skelplot.py", line 40, in <module> 
    class Skelplot(): 
    File "/home/adelleodel/ros/src/mekatron/nodes/skelplot.py", line 203, in Skelplot 
    self.dq_ref[2] = (-(10*sin(self.q_raw[0] - self.q_raw[2]) - 15*sin(self.q_raw[0] + self.q_raw[1] + self.q_raw[2]) + 10*sin(self.q_raw[0] + self.q_raw[1] - self.q_raw[2]) - 10*sin(self.q_raw[0] + self.q_raw[1] + 2*self.q_raw[2]) - 5*sin(self.q_raw[0] + 2*self.q_raw[1] + self.q_raw[2]) + 10*sin(self.q_raw[0] + self.q_raw[1]) - 5*sin(self.q_raw[0] + self.q_raw[2]) + 5*sin(self.q_raw[0]) + 5*sin(self.q_raw[0] - self.q_raw[1] - self.q_raw[2]) - 5*sin(self.q_raw[0] + 2*self.q_raw[1] + 2*self.q_raw[2]))/(cos(self.q_raw[1] + 2*self.q_raw[2]) + cos(2*self.q_raw[1] + self.q_raw[2]) + cos(2*self.q_raw[1])/2 + cos(2*self.q_raw[2]) + cos(2*self.q_raw[1] + 2*self.q_raw[2]) - cos(self.q_raw[1]) - cos(self.q_raw[2]) - 5/2))*dx + ((10*cos(self.q_raw[0] - self.q_raw[2]) - 15*cos(self.q_raw[0] + self.q_raw[1] + self.q_raw[2]) + 10*cos(self.q_raw[0] + self.q_raw[1] - self.q_raw[2]) - 10*cos(self.q_raw[0] + self.q_raw[1] + 2*self.q_raw[2]) - 5*cos(self.q_raw[0] + 2*self.q_raw[1] + self.q_raw[2]) + 10*cos(self.q_raw[0] + self.q_raw[1]) - 5*cos(self.q_raw[0] + self.q_raw[2]) + 5*cos(self.q_raw[0]) + 5*cos(self.q_raw[0] - self.q_raw[1] - self.q_raw[2]) - 5*cos(self.q_raw[0] + 2*self.q_raw[1] + 2*self.q_raw[2]))/(cos(self.q_raw[1] + 2*self.q_raw[2]) + cos(2*self.q_raw[1] + self.q_raw[2]) + cos(2*self.q_raw[1])/2 + cos(2*self.q_raw[2]) + cos(2*self.q_raw[1] + 2*self.q_raw[2]) - cos(self.q_raw[1]) - cos(self.q_raw[2]) - 5/2))*dy 
NameError: name 'self' is not defined 

私も例外では次のようにハンドリングしてみました:

.... 
    def inverse_jacobian(self, dx, dy, dz): 
     try: 
      self.dq_ref[0] : .. 
      self.dq_ref[1] : .. 
      self.dq_ref[2] : .. 
     except KeyError: 
     pass 
    ... 

であり、応答は

File "/home/adelleodel/ros/src/mekatron/nodes/skelplot.py", line 204 
    self.dq_ref[2] = (-(10*sin(self.q_raw[0] - self.q_raw[2]) - 15*sin(self.q_raw[0] + self.q_raw[1] + self.q_raw[2]) + 10*sin(self.q_raw[0] + self.q_raw[1] - self.q_raw[2]) - 10*sin(self.q_raw[0] + self.q_raw[1] + 2*self.q_raw[2]) - 5*sin(self.q_raw[0] + 2*self.q_raw[1] + self.q_raw[2]) + 10*sin(self.q_raw[0] + self.q_raw[1]) - 5*sin(self.q_raw[0] + self.q_raw[2]) + 5*sin(self.q_raw[0]) + 5*sin(self.q_raw[0] - self.q_raw[1] - self.q_raw[2]) - 5*sin(self.q_raw[0] + 2*self.q_raw[1] + 2*self.q_raw[2]))/(cos(self.q_raw[1] + 2*self.q_raw[2]) + cos(2*self.q_raw[1] + self.q_raw[2]) + cos(2*self.q_raw[1])/2 + cos(2*self.q_raw[2]) + cos(2*self.q_raw[1] + 2*self.q_raw[2]) - cos(self.q_raw[1]) - cos(self.q_raw[2]) - 5/2))*dx + ((10*cos(self.q_raw[0] - self.q_raw[2]) - 15*cos(self.q_raw[0] + self.q_raw[1] + self.q_raw[2]) + 10*cos(self.q_raw[0] + self.q_raw[1] - self.q_raw[2]) - 10*cos(self.q_raw[0] + self.q_raw[1] + 2*self.q_raw[2]) - 5*cos(self.q_raw[0] + 2*self.q_raw[1] + self.q_raw[2]) + 10*cos(self.q_raw[0] + self.q_raw[1]) - 5*cos(self.q_raw[0] + self.q_raw[2]) + 5*cos(self.q_raw[0]) + 5*cos(self.q_raw[0] - self.q_raw[1] - self.q_raw[2]) - 5*cos(self.q_raw[0] + 2*self.q_raw[1] + 2*self.q_raw[2]))/(cos(self.q_raw[1] + 2*self.q_raw[2]) + cos(2*self.q_raw[1] + self.q_raw[2]) + cos(2*self.q_raw[1])/2 + cos(2*self.q_raw[2]) + cos(2*self.q_raw[1] + 2*self.q_raw[2]) - cos(self.q_raw[1]) - cos(self.q_raw[2]) - 5/2))*dy 
    ^
SyntaxError: invalid syntax 

あなたはどちらが間違っていますか?よろしくお願いいたします。

+2

'NameError'は字下げの問題のようです。 'self.dq_ref [2]'で2番目のエラーが発生しているので、問題はあなたの '..'のどこかにある可能性が高いです2番目のスニペット。 –

+0

あなたの迅速な対応のためにおめでとう:)。私は正しいと確信しています。私はちょうどその行(self.dq_ref [2] ...)の最後の行を '#'でコメントしようとしています。私は私のプログラムのためにself.dq_ref [2]データが必要です。まだ私にとっては解決されていません。 – adelleodel

答えて

2

あなたのコードを私のPython2.7にコピーしましたが、エラーが出ません。私はあなたが一定の字下げを使用しなかったことが原因であると考えています。常にタブまたは同じスペースを使用していることを確認してください。あなたはSpyderやPycharmのような適切なIDEを選ぶことを検討するかもしれません、彼らはあなたのためにこれすべてを行います。

+0

実際、Python 2.7またはPython 3のことはわかりません。インストールされたパッケージをリストした後、私のシステムにもpython 3がありました。私は通常、プログラミングのためにサブライムを使用しています。すべてターミナルで実行してください。私はあなたの答えを考えます。お返事ありがとうございます:) – adelleodel

+0

@ delleodel、Windowsを使用している場合は、[Winpython](https://winpython.github.io/)をPythonスターターとして使用することを強くお勧めします。デフォルトで「Spyder」がラップされていて、より有用なパカクジかもしれません。 –

関連する問題