# Tag Info

4

I would say true scale actually doesn't really matter. A good way to reason about this is actually video games. If you play a racing game(or really any kind of 3D game) do you care that the world has the proper scale? No you don't. If I went in and modified the video game to double the size/scale of all the models you would still be able to play it. So it is ...

4

"Realtime" is a fairly vague term. What ROS is referring to is often termed "soft realtime" because it is able to calculate control actions as fast enough to keep up with the robot's physical motion. More often than not, this is actually good enough and certainly easier to achieve. Especially if watchdog timers are used appropriately, ...

4

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. http://virtual.vtt.fi/virtual/proj2/multimedia/alvar/ And there's a ROS package which wraps that and publishes the results as ROS messages. https://index.ros.org/...

3

The position coordinates x, y, z are inadequate information to compute the roll pitch and yaw. x, y, and z are the position of the vehicle in space. roll, pitch, and yaw are the attitude or orientation. They can change independently. Aka you can change the orientation of the vehicle independently from the position of the vehicle.

3

The URDF file simply references DAE/COLLADA files that exist elsewhere on the filesystem. Blender and FreeCAD have exporters for DAE files. Saying Blender is a "monstrous tool" is an opinion that probably has little facts to back it up. If you plan on doing URDF file generation more in the future, you will need to learn Blender. DAE is the default ...

3

First of all, you have to define real-time. Is it "motion control real-time" or "instant messaging chat app real-time". For the first one, ROS is not a good option. In theory yes, but in practice, the advantage of ROS, the ready made ROS nodes for interfacing with robots, path planning, interfaces to different sensors are largely only ...

3

The quaternion part [q_x, q_y, q_z, q_w] has four numbers but is a representation of 3D orientation, which has 3 degrees of freedom. Another common representation for orientation is the matrix Lie group $\mathrm{SO}(3)$, which is the group of $3\times 3$ rotation matrices (9 numbers, but only 3 degrees of freedom). Neither the quaternion nor the rotation ...

3

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 ...

3

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:) class IMUIntegrator { public: void start(); private: void imu_callback(const your_imu::Message::...

2

The melodic desktop-full metapackages is defined in REP 150 with several of the other core metapackages.

2

I prototyped a bit to investigate this behaviour. Ran the following node: #!/usr/bin/env python import rospy ...

2

You said: 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.

2

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 ...

2

The official ROS tutorials are the best place to start. If you go through each of them (shouldn't take too long given your skill set), you will learn all the basics needed to start using widely available complex packages!

2

The KDL Ik solver KDL::ChainIkSolverPos_LMA can be construct with a weight matrix. You should be able to solve using only the end effector's target position by setting rotation components weights to 0.

2

You have added an extra line to the __init__ function given in the referenced answer, and that code tries to use values which haven't been set yet. To fix the error just remove the pose = [self.Xmin, ... , self.Zmax] line.

2

The easiest way is to set up a new router that is not connected to the internet. This gives you an isolated network that only local devices can see and connect with. You can even hide the SSID so it can be even more private. This requires the expense of purchasing a new router but has the advantage that you can use a router with multiple high gain antennas ...

2

The tf2_ros::TransformListener takes up a relatively high amount of processing power because it subscribes to the publications of the high volume /tf topics and caches the results locally in memory. It's much more efficient to have one copy which you access from multiple places in your code by passing a reference to it and querying it directly rather than ...

2

The subscriber connection callback is triggered when there's a new subscriber connected to a publisher. There's documentation of how you can use that function in the Node Handle Documentation It's not a commonly used feature. I don't know what your use case is but would gess that it is not something that you want to try to leverage.

2

You can write a simple node which subscribes to the 2 RGB feeds, uses blob matching (look up Stereo matching in OpenCV or Stereo Binary SGBM) to create the stereo image, and publishes it. Alternately, I think OpenCV contains the functionality for image_to_pointcloud conversion.

2

From what I understand, the fixed frame is one where objects are assumed to be stationary with time. Maybe an example will make this clear: Assume a robot with a lidar sensor moving in your world. It spits out a laserscan in the /lidar frame. The goal pose might be in an /odom frame. Now, if you encounter objects in the /lidar frame, your navigation stack ...

2

Look in CommandCallback, where you set "stop = True". That sets a local variable, not the global variable you intended. Declare the variable to be global by preceding the assignment with the declaration "global stop". This contrasts with reading a global variable, which just works without declaring it (notably, in PathScanning). It might ...

2

Reducing reflection on an image is hard, really hard, because you only have the pixels, and they are most likely white. So changing the environment to get good images is the desired solution. Robotiq wrote a nice article about it: https://blog.robotiq.com/10-solutions-to-improve-robot-vision-with-shiny-objects You can however detect reflection using OpenCV, ...

2

turns out the problem was my opencv 4.2 interfering with opencv 3.2 which is installed by default through ros melodic. After taking Alex's seggestion and installing GDB. I ran the launch file with GDB and it was in fact a segmentation fault. While tracing back the issue I saw couple of lines pointing to opencv3.2.so and others pointing to opencv4.2.so. after ...

2

I took at look at your example and you're correctly noticing that it is not executing. The problem is that python expects the constructor will invoke __init__ while you are defining _init_ Note the different number of underscores. Thus non of your setup code is being executed. I fixed that and saw more of the outputs that you expected since the system was ...

2

The usual way is to use: rosinstall . <your_package>.rosinstall This answer will explain rosinstall clearly https://answers.ros.org/question/9213/how-exactly-does-rosinstall-work/

2

I believe you need to remove the declaration of the global ROS publisher outside the main function.

2

Since you're using gazebo already and it should then be generating simulated time you can ask gazebo to run slower than realtime. In the physics section of your world you can ajdust the maximum realtime factor to tell gazebo to run slower than realtime using the real_time_factor parameter. There's a tutorial on the physics parameters here which you may find ...

1

This is basic geometry/trigonometry. Here is an image of your situation (the plane being your turtle bot, and the red circle being your target ($x$,$y$). You want your turtle bot to first turn to face the target and then head towards it. So first you need to compute your desired heading ($\theta_t$) This is basic trigonometry:  tan(\theta_t) = \frac{y_t-y}...

1

I have resolved the problem. It was about conflicting namespaces for the controller manager. I have removed the control.launch file and included the stuff in the rover.launch itself. then i had to include namespaces everywhere. <launch> <arg name="init_pose"/> <arg name="robot_name"/> <param name="...

Only top voted, non community-wiki answers of a minimum length are eligible