ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Elric's profile - activity

2023-08-09 12:48:34 -0500 marked best answer Convert SDF world made with building editor to URDF

I'm using ROS Melodic and Gazebo 9.6.0.

I will use Gazebo's Build Editor to build a building using a floor plant image, like this:

image description

You can see how it can be done in this video.

I'm going to use that world with ROS, but its format will be SDF, and I need a URDF file.

Do I need to convert it to URDF or I can use it in SDF format?

2021-09-10 05:24:06 -0500 marked best answer Robot overturn when I controlled with the keyboard

I've just started with ROS and Gazebo and I'm learning how and where to implement my code to control a robot in Gazebo.

I'm trying to control robot Pioneer 2DX robot in Gazebo using ROS.

To do it, I have followed the tutorial: Controlling a differential drive robot in Gazebo from ROS. And to control it with the keyboard, I run this:

rosrun turtlesim turtle_teleop_key /turtle1/cmd_vel:=/pioneer2dxCamera/cmd_vel

But, there is a problem, because if I press up key, and then down key the robot overturn:

image description

I think, the problem is because the linear velocity changes from 2 to -2. Look:

linear: 
  x: 2.0
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: 0.0
---
linear: 
  x: -2.0
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: 0.0
---

I have decided to modify program turtle_teleop_key to store current linear and angular velocity, and, if linear velocity is 2 and I press down key, linear velocity will 0 instead of -2.

My question is:

Is this the correct place to do it or do I have to do it in the diff drive plugin?

By the way, I'm using this plugin, libgazebo_ros_diff_drive.so, to control the robot.

Yes, I know that change linear velocity to 2 to -2 will flip a real robot too. I'm not asking that.

2021-08-11 04:34:32 -0500 received badge  Famous Question (source)
2021-07-13 17:02:47 -0500 marked best answer Using ROS to control a DYI robotic arm

I'm newbie in ROS, I've just started to learn it, and I wondering if I can use ROS to control a real robotic arm like this one: DIY Robot Arm Kit Educational Robotic Claw Set (at gearbest), or the Ebotics BXARM01 robotic arm.

Can I use ROS to control it?

Note: I don't know if control is right word here because I'm not sure what I'm doing when I create a node in ROS that reads from sensors and sends instructions to actuator.

2021-06-16 12:47:54 -0500 received badge  Popular Question (source)
2021-06-16 12:47:54 -0500 received badge  Notable Question (source)
2021-06-16 12:47:54 -0500 received badge  Famous Question (source)
2021-05-01 18:18:40 -0500 received badge  Famous Question (source)
2021-04-28 09:39:01 -0500 received badge  Famous Question (source)
2021-04-22 09:14:29 -0500 received badge  Famous Question (source)
2020-12-18 13:29:39 -0500 marked best answer Avoid to hit corners using A* algorithm

I'm using ROS melodic with Gazebo 9.9.0 on an Ubuntu 18.04.2 LTS.

I'm implementing an autonomous node that uses A* algorithm to move a robot from one position to another. The robot will be on a Gazebo World.

My problem is when moves on diagonal, sometimes it hits a corner and can not continue moving.

For example, I want to move from cell (1,1) to cell(10,12). I'm using an ones and zeros grid that it is represented in Gazebo and I translate the cells into Gazebo world's locations. Moving from (1,1) to (10,12), I get this path:

The Path is -> (1,1) -> (2,2) -> (3,3) -> (4,4) -> (4,5) -> (5,6) -> (6,6) -> (7,6) -> (8,7) -> (9,7) -> (10,7) -> (11,7) -> (12,8) -> (11,9) -> (11,10) -> (10,11) -> (10,12)

Cell (1,1) is the top most left cell in map. The problem comes when it tries to move from (4,5) to (5,6). In the following picture, the robot is on cell (4,5) facing to cell (5,6), and if it moves, it will hit the corner.

image description

The algorithm is doing this:

image description

Is there any way to solve this problem or this is a problem attached to A* algorithm?

2020-10-26 11:17:46 -0500 received badge  Notable Question (source)
2020-10-18 22:48:01 -0500 received badge  Notable Question (source)
2020-07-03 10:40:22 -0500 received badge  Famous Question (source)
2020-06-04 15:51:24 -0500 received badge  Notable Question (source)
2020-06-04 15:51:24 -0500 received badge  Popular Question (source)
2020-04-28 01:38:34 -0500 received badge  Famous Question (source)
2020-03-23 09:00:02 -0500 received badge  Famous Question (source)
2020-03-08 04:18:56 -0500 received badge  Notable Question (source)
2020-02-13 00:24:11 -0500 received badge  Famous Question (source)
2020-02-07 05:06:08 -0500 received badge  Famous Question (source)
2020-01-12 05:48:19 -0500 marked best answer Gazebo ROS package structure

I've just started to learn ROS using Lunar distribution on an Ubuntu 16.04.

I need to use Gazebo with ROS to do my academic exercises.

Reading the Tutorial: Using roslaunch to start Gazebo, world files and URDF models, on section, Creating your own Gazebo ROS Package, I've found this text:

"Everything concerning your robot's model and description is located, as per ROS standards, in a package named /MYROBOT_description ..."

I have tried to find those ROS standards but I don't know where they are.

Is there any standard to add a robot to a ROS package? Where can I find more information about it?

2020-01-03 04:03:02 -0500 received badge  Famous Question (source)
2019-12-10 13:51:08 -0500 received badge  Famous Question (source)
2019-11-16 11:45:01 -0500 received badge  Popular Question (source)
2019-11-04 20:56:08 -0500 received badge  Famous Question (source)
2019-11-03 06:38:37 -0500 received badge  Famous Question (source)
2019-11-01 01:27:25 -0500 received badge  Famous Question (source)
2019-10-31 10:08:47 -0500 received badge  Notable Question (source)
2019-10-31 10:08:47 -0500 received badge  Popular Question (source)
2019-09-19 07:27:09 -0500 received badge  Notable Question (source)
2019-09-07 01:00:23 -0500 asked a question How to know if robot has moved one meter using odometry

How to know if robot has moved one meter using odometry I'm working with ROS Melodic and Gazebo 9.9.0 on Ubuntu 18.04.2

2019-09-06 09:07:14 -0500 received badge  Notable Question (source)
2019-09-04 20:59:49 -0500 received badge  Notable Question (source)
2019-09-04 07:33:59 -0500 marked best answer Data structure to store a map while doing it with SLAM

I'm studying robotics at the university and I have to implement on my own SLAM algorithm. To do it I will use ROS Melodic, Gazebo 9.1.0 and C++.

I have a doubt about what data structure I have to use to store the map (and what I'm going to store it, but this is another story).

I have thought to represent the map as a 2D grid and robot's start location is (0,0). But I don't know where exactly is the robot on the world that I have to map. It could be at the top left corner, at the middle of the world, or in any other unknonw location inside the world.

Each cell of the grid will be 1x1 meters. I will use a laser to know where are the obstacles. Using current robot's location, I will set to 1 on all the cells that represent an obstacle. For example, it laser detects an obstacle at 2 meters in front of the robot, I will set to 1 the cell at (0,2).

Using a vector, or a 2D matrix, here is a problem, because, vector and matrices indices start at 0, and there could be more room behind the robot to map. And that room will have an obstacle at (-1,-3).

On this data structure, I will need to store the cells that have an obstacle and the cells that I know they are free.

Which kind of data structure will I have to use?

UPDATE:

The process to store the map will be the following:

  1. Robot starts at (0,0) cell. It will detect the obstacles and store them in the map.
  2. Robot moves to (1,0) cell. And again, detect and store the obstacles in the map.
  3. Continue moving to free cells and storing the obstacles it founds.

the robot will detect the obstacles that are in front of him and to the sides, but never behind it.

My problem comes when the robot detects an obstacle on a negative cell (like (0,-1). I don't know how to store that obstacle if I have previously stored only the obstacle on "positive" cells. So, maybe the "offset", it is not a solution here (or maybe I'm wrong).

2019-09-03 00:46:22 -0500 asked a question Make a iteratively using laser data

Make a iteratively using laser data I'm using ROS Melodic and Gazebo 9. I'm implementing SLAM algorithm using C++ and I

2019-08-28 13:22:42 -0500 received badge  Popular Question (source)
2019-08-27 08:35:05 -0500 asked a question Data structure to store a map while doing it with SLAM

Data structure to store a map while doing it with SLAM I'm studying robotics at the university and I have to implement o

2019-08-26 05:13:53 -0500 received badge  Notable Question (source)
2019-08-13 17:59:13 -0500 received badge  Popular Question (source)
2019-07-23 05:14:27 -0500 received badge  Popular Question (source)
2019-07-23 00:34:28 -0500 marked best answer Two different nodes getting odometry messages

I'm using C++ to program two nodes on ROS melodic with Gazebo 9.9.0 running on an Ubuntu 18.04.2 LTS.

I'm learning ROS and I have to do the same: move a robot, Pioneer 2DX, to make a map using Odometry.

Yes, I know, there are a lot of better ways to do a map, but I'm learning and this is an exercise that I have to do at the university.

I've thought to use two nodes:

  • One to store odometry data.
  • Other to move the robot using keyboard.

My problem, or doubt, is that I need to use Odometry data on both. In the second one, because if I have to rotate the robot, I need to know robot's heading.

I'm using ros::spinOnce(); to process callbacks waiting.

My question is: if one node read a Odometry message, that message read from one node, will it be available for the other node? Or maybe, I will lose that message.

I've also thought to use one node to store odometry data and also to move the robot if calling ros::spinOnce(); will make me to lose the message.

2019-07-22 11:37:23 -0500 received badge  Popular Question (source)
2019-07-22 02:29:15 -0500 commented answer Two different nodes getting odometry messages

Great!!! Thanks a lot.

2019-07-22 02:19:34 -0500 received badge  Associate Editor (source)
2019-07-22 02:19:34 -0500 edited question Two different nodes getting odometry messages

Two different nodes getting odometry messages I'm using C++ to program two nodes on ROS melodic with Gazebo 9.9.0 runnin

2019-07-22 02:08:28 -0500 marked best answer Different between private node handler and not private

I'm using ROS melodic and Gazebo 9.9.0 on an Ubuntu 18.04.2 LTS.

I've been reading this: http://wiki.ros.org/roscpp/Overview/N..., but I don't understand what is (or are) the different between this two declarations:

ros::NodeHandle n;

And

ros::NodeHandle n("~");

What are the different between a private and a not private node handler?