Compile with Asymptote.
picture 1
unitsize(1cm);
import patterns;
path c1=circle((0,1),1),c2=circle((0,3),1);
path arc1=arc((0,1),0.7,-200,-250);
path arc2=arc((0,3),0.7,200,250);
draw(c1^^c2);
draw(arc1,Arrow(size=3));
draw(arc2,Arrow(size=3));
draw((0,1)--(0,0),Arrow());
dot((0,1),FillDraw(white));
draw((0,3)--(0,2),Arrow());
dot((0,3),FillDraw(white));
add("yourpattern",hatch(2mm,dir(45)));
fill(box((-1.5,-0.2),(1.5,0)),pattern("yourpattern"));
draw((-1.5,0)--(1.5,0),0.7bp+black);
shipout(bbox(2mm,invisible));

picture 2
unitsize(1cm);
import patterns;
import graph;
path c1=circle((0,1),1),c2=circle((0,3),1);
draw(c1^^c2);
draw((0,1)--(0,1)+dir(-150),Arrow);
draw((0,3)--(0,3)+dir(-30),Arrow);
dot((0,1),FillDraw(white));
dot((0,3),FillDraw(white));
path arc1=arc((0,1),1,210,270), arc2=arc((0,1),1,30,90), arc3=arc((0,3),1,270,330);
path line1=(0,0)--(-length(arc1),0);
add("yourpattern",hatch(2mm,dir(45)));
fill(box((-1.5,-0.2),(1.5,0)),pattern("yourpattern"));
draw((-1.5,0)--(1.5,0),0.6bp+black);
draw(arc1^^line1,0.8bp+red);
draw(arc2^^arc3,0.8bp+blue);
shipout(bbox(2mm,invisible));

Animation. (BAD CODE)
import animate;
import patterns;
settings.tex="pdflatex";
animation Ani;
unitsize(1cm);
real t=6.284; // arclength(circle((0,1),1))=6.28406679229544
for(real a=0.0; a <= t; a=a+t/50)
{
save();
draw(circle((0+a,1),1)^^circle((0+a,3),1));
draw((0+a,1)--(0+a,1)+dir(-90-a180/pi),Arrow());
draw((0+a,1)--(0+a,1)+dir(180+-90-a180/pi),dashed+blue);
draw((0+a,3)--(0+a,3)+dir(-90+a*180/pi),Arrow());
dot((0+a,1),FillDraw(white));
dot((0+a,3),FillDraw(white));
// L=alphapir/180 (wikipedia)
path arc1=(a != 0.0) ? arc((0+a,1),1,-90,-90-a180/pi) : nullpath, // r=1
arc2=(a != 0.0) ? arc((0+a,1),1,90,90-a180/pi) : nullpath,
arc3=(a != 0.0) ? arc((0+a,3),1,-90,-90+a*180/pi) : nullpath;
path line1=(a != 0.0) ? (0,0)--(a,0) : nullpath;
add("yourpattern",hatch(2mm,dir(45)));
fill(box((-1,-0.2),(1+t,0)),pattern("yourpattern"));
draw((-1,0)--(1+t,0),0.6bp+black);
draw(arc2^^arc3,0.8bp+blue);
draw(arc1^^line1,0.8bp+red);
if (a == t){
draw(circle((a,3),1),0.8bp+blue);
draw(circle((a,1),1),0.8bp+red);
}
Ani.add();
restore();
}
erase();
Ani.movie(BBox(2mm,invisible));

Good animation. (RECOMMENDED)
import animate;
import patterns;
settings.tex="pdflatex";
animation Ani;
unitsize(1cm);
real t=arclength(circle((0,1),1));
int iter=68;
for (int i=0; i <= iter; ++i)
{
save();
real a=i*t/iter;
draw((0+a,1)--(0+a,1)+dir(-90-a180/pi),Arrow());
draw((0+a,1)--(0+a,1)+dir(180+-90-a180/pi),dashed+blue);
draw((0+a,3)--(0+a,3)+dir(-90+a*180/pi),Arrow());
dot((0+a,1),FillDraw(white));
dot((0+a,3),FillDraw(white));
add("yourpattern",hatch(2mm,dir(45)));
fill(box((-1,-0.2),(1+t,0)),pattern("yourpattern"));
draw((-1,0)--(1+t,0),0.6bp+black);
if (i == 0){
draw(circle((a,3),1));
draw(circle((a,1),1));
}
else if (i < iter){
draw(circle((a,3),1));
draw(circle((a,1),1));
// L=alphapir/180 (wikipedia)
path arc1=arc((0+a,1),1,-90,-90-a180/pi), // r=1
arc2=arc((0+a,1),1,90,90-a180/pi),
arc3=arc((0+a,3),1,-90,-90+a*180/pi);
path line1=(0,0)--(a,0);
draw(arc2^^arc3,0.6bp+blue);
draw(arc1^^line1,0.8bp+red);
}
else {
draw(circle((a,3),1),0.6bp+blue);
draw(circle((a,1),1),0.6bp+red);
draw((0,0)--(a,0),0.8bp+red);
}
Ani.add();
restore();
}
erase();
Ani.movie(BBox(2mm,invisible));
https://ezgif.com/pdf-to-gif
