There's a lot of solutions out there already for this. I'll start by suggesting AR tags not QR tags. They're better optimized for localizing.
The Alvar library is commonly used for tracking AR tags.
And there's a ROS package which wraps that and publishes the results as ROS messages.
I came back to this question and thought a bit more about it because of your bounty - typically the bounties are offered from a point of desperation, and I hate that feeling myself.
I think probably your code is fine, in looking at it. There are things that I'd do differently, like scaling your PID output by the time step, but you could distribute that ...
I find it easiest to make a class for stuff like this, where you have data you want to use between callbacks, or your want to publish a message inside of another callback. For example, your class might look something like (in the header:)
void imu_callback(const your_imu::Message::...
If you want to start from first principals there's a pretty thorough paper here
There's a question here which is related Calculate covariance matrix from x,y,z data
And there's some pretty practical advice here: https://answers.ros.org/question/12642/calculating-covariances-of-robots-odometry/
Behavior like this suggests that your odometry is not being computed properly when the vehicle turns. It's hard to tell but the model appears to have rotated about 90 degrees but the laser scans appear to have rotated close to 180 degrees comparatively. There may be an issue with your wheel radius or some similar setting. Alternatively there could be a sign ...
It appears that the package you're looking for is available in noetic: https://index.ros.org/p/jderobot_drones/#noetic
If you're getting that error it's likely that you have not setup the ROS package sources: http://wiki.ros.org/noetic/Installation/Ubuntu#Installation.2FUbuntu.2FSources.Setup_your_sources.list
If you are still having trouble please edit your ...
Assuming you mean a LaserScan ROS message. It's possible to use the geometry of your robot and laser positions to create one ray per sensor in the laser scan. This is basically going to be a manual process to do this. You can see someone else working out the math here
There's a lot of questions on this already: https://answers.ros.org/question/348155/slam-...
Try swapping the order in your main function, so your publisher exists before you start the subscriber callback. I also haven't tried running a publisher and subscriber from the same node handle and can't seem to find anything that explicitly says you can or can't do that.
If just swapping the order doesn't work, then try making separate node handles, one ...
the RGBa values I set in my model in gazebo all have value 1
and you also said:
but no values are 255
Which I would expect is correct, because you just said you set them all to 1. Did you mean to scale them from 1 to 255 at some point? Casting 1.0 from float to uint8 will give you 1, not 255.
It looks like there might be a bug in your code as pointed to by @MorganStark47 above in the comment
You may also want to use Gazebo/White as the material versus Gazebo/Grey to get the full brightness. I think the settings your adjusting effect how it interacts with different light sources and may not fully override the texture which a grey will take off ...
If you're using the ROS distribution melodic, it's likely that installing python-rosdep2 removed much of it from your system if you didn't pay attention to the apt prompts.
If you're using the packages.ros.org sources following the official installation you should be using python-rosdep not python-rosdep2 which comes from the Upstream repositories.
The same ...
Based on your configuration, you are trying to create map -> odom -> /thrbot/base_link. But you do not have a map frame. Looking at your oroginal TF, you should instead create world -> odom -> base_footprint.
I think your configuration should be:
EDIT: as ...