python画二维图图

陈杰杰12个月前自动驾驶49
import codecs
import re
import numpy as np
import matplotlib.pyplot as plt
class Compare:
    def __init__(self, str_demo):
        self.str_demo = str_demo
    def transfer(self, vec):
        vec_match_list = [i.split(",") for i in vec.findall(self.str_demo)]
        for i in range(len(vec_match_list)):
            for j in range(len(vec_match_list[0])):
                vec_match_list[i][j] = float(vec_match_list[i][j])
        return vec_match_list
def run(method):
    with codecs.open('pose1.txt', encoding="iso-8859-15") as file:
        str_demo = file.read()
    odom_vec = re.compile(r"info odom:(.*?),pose:")
    pose_vec = re.compile(r",pose:(.*?),c_delta:")
    compare_demo = Compare(str_demo)
    odom_vec_match_list = compare_demo.transfer(odom_vec)
    pose_vec_match_list = compare_demo.transfer(pose_vec)
    odom_first = odom_vec_match_list[0]
    pose_first = pose_vec_match_list[0]
    TF_odom_map = []
    if method == 1:
        # 方法一
        d_th = pose_first[2] - odom_first[2]
        d_x = -1 * odom_first[0] * np.cos(d_th) + odom_first[1] * np.sin(d_th) + pose_first[0]
        d_y = -1 * odom_first[1] * np.cos(d_th) - odom_first[0] * np.sin(d_th) + pose_first[1]
        TF_odom_map = np.array([[np.cos(d_th), -np.sin(d_th), d_x],
                                [np.sin(d_th), np.cos(d_th), d_y],
                                [0, 0, 1]])
    elif method == 2:
        # 方法2
        TF_base_map = np.array([[np.cos(pose_first[2]), -np.sin(pose_first[2]), pose_first[0]],
                                [np.sin(pose_first[2]), np.cos(pose_first[2]), pose_first[1]],
                                [0, 0, 1]])
        TF_base_odom = np.array([[np.cos(odom_first[2]), -np.sin(odom_first[2]), odom_first[0]],
                                 [np.sin(odom_first[2]), np.cos(odom_first[2]), odom_first[1]],
                                 [0, 0, 1]])
        TF_odom_map = np.dot(TF_base_map, np.linalg.inv(TF_base_odom))
    odom_x = []
    odom_y = []
    pose_x = []
    pose_y = []
    pose_x_by_odom = []
    pose_y_by_odom = []
    plt.ion() #开启interactive mode 成功的关键函数
    
    for i in range(len(odom_vec_match_list)):
        odom_ele = odom_vec_match_list[i]
        pose_ele = pose_vec_match_list[i]
        odom_i = np.array([[odom_ele[0]],
                           [odom_ele[1]],
                           [odom_ele[2]]])
        pose_i = np.array([[pose_ele[0]],
                           [pose_ele[1]],
                           [pose_ele[2]]])
        odom_i[-1][0] = 1  # 转成齐次坐标
        pose_i_by_odom = np.dot(TF_odom_map, odom_i)
        odom_x.append(odom_i[0][0])
        odom_y.append(odom_i[1][0])
        pose_x.append(pose_i[0][0])
        pose_y.append(pose_i[1][0])
        pose_x_by_odom.append(pose_i_by_odom[0][0])
        pose_y_by_odom.append(pose_i_by_odom[1][0])
        plt.xlabel('x-value')
        plt.ylabel('y-label')
        plt.axis('equal')
        plt.plot(pose_x, pose_y,'-b')
        plt.plot(pose_x_by_odom, pose_y_by_odom,'-g')
        plt.draw()#注意此函数需要调用
        plt.pause(0.01)
        if(i == 0):
            plt.pause(0.01)
    plt.pause(100)
if __name__ == '__main__':
    run(2)


标签: Python
每天进步一点点!
返回列表

上一篇:python画折线

下一篇:wsl使用

相关文章

python画折线

# -*- coding: utf-8 -*- """ build by cjiejie, py...

Python正则表达式

Python正则表达式浮点数表示方法:[-+]?[0-9]*\.?[0-9]+...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。