seafloor=InfinitePlane[{{1,0,0},{-1,0,0},{0,1,0}}]

Define camera tilt angle

tilt=45 Degree

Camera length

len=0.25

Camera radius

rad=1/12

Camera altitude at lens

alt=1

camera={Cylinder[{{0,0,alt},{0,-Cos[tilt] len,alt+Sin[tilt] len}},rad]}

Graphics3D[{seafloor,camera},PlotRange->All]

Implement helical lasers.

Modify the previous code to implement three lasers located on the circumference of the camera shroud, with each laser aiming towards the next laser.

Manipulate[
Module[{t1,t2,t3,t4,norm,
(* define starting and ending points for each laser direction vector *)
l1a={1/2+1/12 Cos[90 °],distance,1/2+1/12 Sin[90 °]},
l1b={1/2+1/12 Cos[210 °],distance+twist,1/2+1/12 Sin[210 °]},
l2a={1/2+1/12 Cos[210 °],distance,1/2+1/12 Sin[210 °]},
l2b={1/2+1/12 Cos[330 °],distance+twist,1/2+1/12 Sin[330 °]},
l3a={1/2+1/12 Cos[330 °],distance,1/2+1/12 Sin[330 °]},
l3b={1/2+1/12 Cos[90 °],distance+twist,1/2+1/12 Sin[90 °]},
u,w,d,n,sI,i1,i2,i3},
(* define the four corners of the target plane *)
t1={0,1-Sin[pitch]+Sin[yaw],0};t2={0,1+Sin[pitch]+Sin[yaw],1};t3={1,1+Sin[pitch]-Sin[yaw],1};t4={1,1-Sin[pitch]-Sin[yaw],0};
(* calculate where the three lasers intersect the target plane *)
norm=Cross[(t1-t2),(t3-t2)];
u=l1b-l1a;
w=l1a-t1;
d=norm.u;
n=-(norm.w);
sI=n/d;
i1=l1a+sI*u;
u=l2b-l2a;
w=l2a-t1;
d=norm.u;
n=-(norm.w);
sI=n/d;
i2=l2a+sI*u;
u=l3b-l3a;
w=l3a-t1;
d=norm.u;
n=-(norm.w);
sI=n/d;
i3=l3a+sI*u;
(* draw the target plane, then the camera, then the lasers, then the intersection points *)
Graphics3D[{Polygon[{t1,t2,t3,t4}],Cylinder[{{1/2,distance-1/4,1/2},{1/2,distance,1/2}},1/12],Green,Line[{l1a,i1}],Red,Line[{{l2a,i2},{l3a,i3}}],Green,Sphere[i1,0.005],Red,Sphere[{i2,i3},0.005]},If[camera,ViewVector->{{1/2,distance,1/2},{1/2,1,1/2}},ViewVector->{{3,-2,1.5},{viewx,viewy,1/2}}],
ViewAngle->Dynamic[zoom °],Lighting->"Standard",Boxed->False,Background->LightBlue
] (* end Graphics3D *)
] (* end Module *)
,{distance,0,0.99},{{zoom,35},60,5},{{pitch,0},-45 °,45 °},{{yaw,0},-45 °,45 °},{{twist,1},0.25,5},{{viewx,1/2},0,1},{{viewy,1/2},0,1},{{camera,False,"camera view"},{False,True}}
] (* end Manipulate *)

Use the dimensions of the actual camera on Doc Ricketts. The shroud is 26.7 cm in diameter, and the laser mounts add another 2.7 cm to the radius. The laser radius in meters is therefore

lr=0.267/2+0.027

We must rearrange the lasers to avoid a laser at the top, which would hit the ROV frame during maximum up tilt. Also calculate and display the Euclidean distance between laser dots 1 and 2 to gauge how big the pattern is.

Manipulate[
Module[{t1,t2,t3,t4,norm,
(* define starting and ending points for each laser direction vector *)
l1a={1/2+lr Cos[30 °],distance,1/2+lr Sin[30 °]},
l1b={1/2+lr Cos[150 °],distance+twist,1/2+lr Sin[150 °]},
l2a={1/2+lr Cos[150 °],distance,1/2+lr Sin[150 °]},
l2b={1/2+lr Cos[270 °],distance+twist,1/2+lr Sin[270 °]},
l3a={1/2+lr Cos[270 °],distance,1/2+lr Sin[270 °]},
l3b={1/2+lr Cos[30 °],distance+twist,1/2+lr Sin[30 °]},
u,w,d,n,sI,i1,i2,i3,skew,spacing},
(* define the four corners of the target plane *)
t1={0,3-Sin[pitch]+Sin[yaw],0};t2={0,3+Sin[pitch]+Sin[yaw],1};t3={1,3+Sin[pitch]-Sin[yaw],1};t4={1,3-Sin[pitch]-Sin[yaw],0};
(* calculate where the three lasers intersect the target plane *)
norm=Cross[(t1-t2),(t3-t2)];
u=l1b-l1a;
w=l1a-t1;
d=norm.u;
n=-(norm.w);
sI=n/d;
i1=l1a+sI*u;
u=l2b-l2a;
w=l2a-t1;
d=norm.u;
n=-(norm.w);
sI=n/d;
i2=l2a+sI*u;
u=l3b-l3a;
w=l3a-t1;
d=norm.u;
n=-(norm.w);
sI=n/d;
i3=l3a+sI*u;
skew=ArcTan[2 lr Cos[30 °]/twist]/Degree;
spacing=EuclideanDistance[i1,i2];
(* draw the parameter text, then the target plane, then the camera, then the lasers, then the intersection points *)
Graphics3D[{
(* print parameters *)
Text[StringForm["spacing = `` m",NumberForm[spacing,{3,2}]],{1,.5,.2}],Text[StringForm["skew = ``°",NumberForm[skew,{3,1}]],{1,.5,.3}],
(* target plane *)
Polygon[{t1,t2,t3,t4}],
(* camera *)
Cylinder[{{1/2,distance-0.13,1/2},{1/2,distance,1/2}},0.1335],
(* lasers lines and dots *)
Pink,Line[{{l1a,i1},{l2a,i2},{l3a,i3}}],Red,Sphere[{i1,i2,i3},0.005]},
(* viewpoint, zoom, and lighting *)
If[camera,ViewVector->{{1/2,distance,1/2},{1/2,1,1/2}},ViewVector->{{3,-2,1.5},{1/2,1.5,1/2}}],
ViewAngle->Dynamic[zoom °],Lighting->"Neutral",Boxed->False
] (* end Graphics3D *)
] (* end Module *)
,{distance,0,2.99},{{zoom,35},60,5},{{pitch,0},-45 °,45 °},{{yaw,0},-45 °,45 °},{{twist,1},0.25,5},{camera,{False,True}}
] (* end Manipulate *)