\documentclass[tikz, border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{bayesnet}
\begin{document}
\tikzstyle{emptynode} = [rectangle, draw=black!0, minimum size=3mm]
\tikzstyle{rect} = [rectangle, draw=black!90, minimum size=3mm]
\tikzstyle{diam} = [diamond, draw=black!90, minimum width=1.5mm, minimum height = 1.5mm]
\begin{tikzpicture}
\node[obs] (s0) {$s_0$};
\node[obs, right= 2.4cm of s0](s1){$s_1$};
\node[obs, right= 2.4cm of s1](s2){$s_2$};
\node[emptynode, below= 2cm of s0](x0){};
\node[emptynode, below= 2cm of s1](x1){};
\node[emptynode, below= 2cm of s2](x2){};
\node[obs, below= 3cm of s0](b0){$b_0$};
\node[obs, below= 3cm of s1](b1){$b_1$};
\node[obs, below= 3cm of s2](b2){$b_2$};
\node[rect, fill = black!20 ,right = 0.8cm of x0](a0){$a_0$};
\node[rect, fill = black!20, right = 0.8cm of x1](a1){$a_1$};
\node[obs, above = 0.6 of a0](r0){$r_0$};
\node[obs, above = 0.6 of a1](r1){$r_1$};
\edge{s0}{b0,r0};
\edge{b0}{b1,a0};
\edge{b1}{b2};
\edge{a0}{r0};
\edge{s1}{r1,b1};
\edge{b1}{b2, a1};
\edge{s2}{b2};
\edge{r1,a1}{b2};
\edge{a1}{r1};
\edge{a0,r0}{b1};
\node[draw=black,thin,fit=(s0)(s1)(s2), rectangle,inner sep=10pt](rect1) {};
\node[draw=black,thin,fit=(b0)(b1)(b2), rectangle,inner sep=10pt](rect1) {};
\end{tikzpicture}
\end{document}