You might need to do something like
for i in range(4):
col = soldiertrans.getCol(i)
shader_data.append(UnalignedLVecBase4f(col[0], col[1], col[2], col[3]))
because getCol alone will just give a regular vec4.
I have some code that I should be able to extract out of my game that I think will be helpful, I can probably find some time tonight to have a look.