⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mk_gmux_robot_dbn.m

📁 基于贝叶斯网络的源程序
💻 M
字号:
function [bnet, Unode, Snode, Lnodes, Rnode, Ynode, Lsnode] = ...    mk_gmux_robot_dbn(nlandmarks, Q, R, init_x, init_V, robot_block, landmark_block)% Make DBN% S% | L1 -------> L1'% |  | L2 ----------> L2'% \  | /%  v v v%    Ls%    |%    v%    Y%    ^%    |%    R ------->  R'%    ^      %    |      %    U      %%% S is a switch, Ls is a deterministic gmux, Y = Ls-R,% R(t+1) = R(t) + U(t+1), L(t+1) = L(t)% number nodes topologicallySnode = 1;Lnodes = 2:nlandmarks+1;Lsnode = nlandmarks+2;Unode = nlandmarks+3;Rnode = nlandmarks+4;Ynode = nlandmarks+5;nnodes = nlandmarks+5; intra = zeros(nnodes, nnodes);intra([Snode Lnodes], Lsnode) =1;intra(Unode,Rnode)=1;intra([Rnode Lsnode], Ynode)=1;inter = zeros(nnodes, nnodes);inter(Rnode, Rnode)=1;for i=1:nlandmarks  inter(Lnodes(i), Lnodes(i))=1;endLsz = 2; % (x y) posn of landmarkRsz = 2; % (x y) posn of robotYsz = 2; % relative distanceUsz = 2; % (dx dy) ctrlSsz = nlandmarks; % can switch between any landmarkns = zeros(1,nnodes);ns(Snode) = Ssz;ns(Lnodes) = Lsz;ns(Lsnode) = Lsz;ns(Ynode) = Ysz;ns(Rnode) = Rsz;ns(Ynode) = Usz;ns(Unode) = Usz;bnet = mk_dbn(intra, inter, ns, 'discrete', Snode, 'observed', [Snode Ynode Unode]);bnet.CPD{Snode} = root_CPD(bnet, Snode); % always observedbnet.CPD{Unode} = root_CPD(bnet, Unode); % always observedfor i=1:nlandmarks  bi = landmark_block(:,i);  bnet.CPD{Lnodes(i)} = gaussian_CPD(bnet, Lnodes(i), 'mean', init_x(bi), 'cov', init_V(bi,bi));endbi = robot_block;bnet.CPD{Rnode} = gaussian_CPD(bnet, Rnode, 'mean', init_x(bi), 'cov', init_V(bi,bi), 'weights', eye(2));bnet.CPD{Lsnode} = gmux_CPD(bnet, Lsnode, 'cov', repmat(zeros(Lsz,Lsz), [1 1 nlandmarks]), ...			    'weights', repmat(eye(Lsz,Lsz), [1 1 nlandmarks]));W = [eye(2) -eye(2)]; % Y = Ls - R, where Ls is the lower-numbered parentbnet.CPD{Ynode} = gaussian_CPD(bnet, Ynode, 'mean', zeros(Ysz,1), 'cov', R, 'weights', W);% slice 2eclass = bnet.equiv_class;W = [eye(2) eye(2)]; % R(t) = R(t-1) + U(t), where R(t-1) is the lower-numbered parentbnet.CPD{eclass(Rnode,2)} = gaussian_CPD(bnet, Rnode+nnodes, 'mean', zeros(Rsz,1), 'cov', Q, 'weights', W);for i=1:nlandmarks  bnet.CPD{eclass(Lnodes(i), 2)} = gaussian_CPD(bnet, Lnodes(i)+nnodes, 'mean', zeros(2,1), ...						   'cov', zeros(2,2), 'weights', eye(2));end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -