I am hesitant to answer "yes" to your question about what the right tf chain is because the names of the reference frames ("map", "rig" , "base_link" etc) can have different meanings depending on how you define it.
So instead of yes-or-no answer, here a long one:
Tagslam publishes the following transforms:
1) From its world frame (defaults to "map", but you can set it with ROS parameter "fixed_frame_id") to all defined bodies that have a valid pose. This includes the "rig" body, if that is what your camera rig is named as in "tagslam.yaml".
2) A transform from each body to the tags that are attached to it
3) If the tag had a prior transform given, also the prior transform (so you can see how much the tag was moved from its original prior pose)
4) transform between camera rig and camera
You can *not* mix TagSLAM's transforms with those published by any other SLAM/odometry package. TagSLAM will publish the complete chain to put your robot into the world frame (aka "map"). Since your tags are specified in the world frame, it can directly provide the transform "map" -> "rig". And once you have the "rig" frame, then it's up to you to manually provide the transforms from "rig" to the rest of your robot (aka "base_link" etc). If you have any other packages publishing transforms from "map" -> "base_link" (or other parts of your robot) it will interfere with the transforms that TagSLAM provides and chaos ensues.
TagSLAM can however use input from other SLAM systems to provide a better tf "map" -> "rig". This is essential when no tags are visible. For that you feed *only odometry* messages from the SLAM/VIO system into TagSLAM, no transforms. Via the odometry messages, the SLAM/VIO system tells TagSLAM how the robot moves during times when no tags are visible. For an example on how to set this up TagSLAM with external odometry have a look at test case 19 in the tagslam_test repo.
To answer your second question: You only need to specify one ("root") tag. So long as there is overlap in vision between tags (e.g. Tag1 is seen in the same frame as the root tag) TagSLAM will deduce the pose of the second tag automatically. Even if there is no overlap this will work, so long as you have a SLAM/VIO system providing odometry in between.
If you see things going "crooked", for debugging operate TagSLAM only, without external SLAM/VIO to simplify your setup. If things still are screwy, here are some usual suspects:
- bad camera calibration
- wrong tag size specified
- bad camera calibration
- really poor lighting, tags are blurry in images (check debugging output of tag detector)
- bad camera calibration
If things work out without external odomertry, and bad stuff happens when you start using external odom, then usually it's the odom-to-rig transform that is wrong.