ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
I believe that the issues is with the following block of code:
elif rospy.get_time() > start_time+10.0:
pub_reset.publish(Empty())
break
The reset
topic probably doesn't do what you think it does. It resets the odometry making the drone think that it's on the ground. So, with that in mind this behavior of never stopping taking off actually makes sense. It always thinks that it's on the ground (at this point) and just stays in the takeoff state (or, whatever it's called) and keeps trying to reach it's takeoff altitude.
If you want to have the drone hover, instead of publishing to the reset
topic you need to publish empty Twist()
messages to the cmd_vel
topic. According to the docs:
Hover Modes
geometry_msgs::Twist
has two other member variablesangular.x
andangular.y
which can be used to enable/disable “auto-hover” mode. “auto-hover” is enabled when all six components are set to zero.
2 | No.2 Revision |
I believe that the issues is with the following block of code:
elif rospy.get_time() > start_time+10.0:
pub_reset.publish(Empty())
break
The reset
topic probably doesn't do what you think it does. It resets the odometry making the drone think that it's on the ground. So, with that in mind this behavior of never stopping taking off actually makes sense. It always thinks that it's on the ground (at this point) and just stays in the takeoff state (or, whatever it's called) and keeps trying to reach it's takeoff altitude.
If you want to have the drone hover, instead of publishing to the reset
topic you need to publish empty Twist()
messages to the cmd_vel
topic. According to the docs:
Hover Modes
geometry_msgs::Twist
has two other member variablesangular.x
andangular.y
which can be used to enable/disable “auto-hover” mode. “auto-hover” is enabled when all six components are set to zero.
Edit:
I tried looking for a parameter to set that would change the takeoff altitude, but couldn't find one. I looked back at my own code and realized that I was just pushing the drone to my desired altitude. I also experienced issues with getting the drone to takeoff (with a real drone, however) so I made a work around like this
for i in range(51):
takeoff.launch()
rate.sleep()
which for some reason worked. Once you're up in the air continue pushing the drone to your desired height by publishing a Twist
message with the desired velocity and then stopping once you reach your target altitude.
Thinking back (I was using the AR.Drone 2.0 just over a year ago) we stopped using the simulator because of an issue just like this and we needed the tag that came with the drone. So, this may or may not work for you.