肩の位置の計算

キャリブレーションの際に求める方の位置の計算方法です。

1、①②とキャリブレーションした点を取ります。
2、1の2点を通る線分を引きます。
3,2に頭の位置から垂線を引きます。
4,3の交点を肩の位置とします。

高さは1の時の高さを用います。

robot_support.pyの以下の部分が該当します。

    def __calibrate_hand_positon_main(self, head_position, pos1, pos2):
        """
        位置のキャリブレーション情報を作成するためのメイン関数:calibrate_hand_positonから呼び出している
        """
        # pos1手を前に伸ばした時の位置
        # pos2肘を90度まげて脇につけた時の位置
        # 腕の長さを求める
        # len1 = pos1[1] - pos2[1] #上腕
        # len2 = np.sqrt( (pos2[0] - head_position[0]) *
        #                 (pos2[0] - head_position[0]) \
        #               + (pos2[2] - head_position[2]) *
        #                 (pos2[2] - head_position[2]))
        # arm_len = (len1 + len2)
        # うでのラインと頭の位置の垂線の交点から、肩の位置を求める

        arm_line = self.__get_2points_line([pos1[0], pos1[2]],
                                           [pos2[0], pos2[2]])

        self.shoulder_pos = self.__get_2dline_crros_point(arm_line,
                                                          [head_position[0],
                                                           head_position[2]],
                                                          [pos1[0], pos1[2]])
        self.shoulder_pos.append(self.shoulder_pos[1])
        self.shoulder_pos[1] = pos1[1]
        self.shoulder_pos = np.array(self.shoulder_pos)