Indoor autonomous flight with Arducopter, ROS and Aruco Boards Detection

Thanks Andrea. Another thing I’d like to really narrow down in one video is how to capture the video and then pipe it to both the on board OpenCv and the streamer. And then stream also the modified frames from the OpenCv. That I think would be a nice step one

Would it be possible to run aruco board detection on the RPi (or different small companion computer) onboard the quad?

Ciao Tiziano
it is an interesting thing but is a little bit different from what I have done in my system. if I understood correctly you would like to capture, process and stream the video directly with OpenCV without using the ROS and I have no experience in this.
This thing could be done with ROS using usb_cam or gscam to capture, cv_bridge to convert ROS images into OpenCV images, and vice versa and gscam to stream using gstreamer pipelines.

Not using Raspberry Pi 0, the one I use, maybe using Raspberry Pi 3 but I have not tested.
In my system I have tried to do all by using minimal and cheap hardware, so I use my desktop PC to do more heavy processing. This anyway has the advantage to simplify the testing of other visual pose estimation package. Working on PC is way more easier and speedier then working on embedded board.

Is the RPi 0 mounted on the quadcopter.
And if it is mounted on it, would it be possible to use it fully as the receiving end with OpenCV installed on it so it can send the commands wirelessly back to the quad?

Yes the Raspberry Pi 0 is mounted on the quadcopter. On first post is all explained.
The Raspberry Pi 0 has not enough computing resources to do the pose estimation on board (at least with the method I am using) so the pose estimation is done on desktop PC and then the results is transmitted to the quadcopter.

Now I am doing the same thing but on a slightly bigger quad (160mm) with a Raspberry Pi 3 on board. In this way I am able to do all the calculations stuff on the quadcopter without using the desktop PC, I am using it only for visualization with rviz.

When I organize better all the steps I will post all the info relative to this new setup.

1 Like

Hi everyone!

I’m working on positioning of a drone indoor, for this, I followed the published description. Indoor autonomous flight with ArduCopter, ROS and Aruco Boards Detection — Dev documentation

However, during the test flight - which is a straight rise to 1 meter and then landing - the following strongly fluctuating behavior was experienced.

I’m using a raspberry pi 3 B+ with ubuntu 16.04 (from ubiquity) + MAVROS
I have a Pixhawk 4 controller with Arducopter 3.7.0-dev stack.
The camera is a raspicamera v2.
In rviz i can see the realtime position from the marker using mavros/vision/pose
But I realized that i don’t get any data from /mavros/local_position/pose.

The parameters what i use are the same as in the article:

AHRS_EKF_TYPE 2
BRD_RTC_TYPES 1
EKF2_ENABLE 1
EKF3_ENABLE 0
EK2_GPS_TYPE 3
EK2_POSNE_M_NSE 0.1
EK2_VELD_M_NSE 0.1
EK2_VELNE_M_NSE 0.1
EK2_EXTNAV_DELAY 80
GPS_TYPE 0
COMPASS_USE 0
COMPASS_USE2 0
COMPASS_USE3 0
SERIAL1_BAUD 921 (the serial port used to connect to Raspberry Pi)
SERIAL1_PROTOCOL 2
SYSID_MYGCS 1 (to accept control from mavros)
VISO_TYPE 0

Does anyone have any idea what can cause this problem?

Hello @ptroll, is it possible to have the logs of this flight ?

Hi @ptroll I would like to see the output of rostopic list after the launch of mavros.

Hi Anbello!

i attached the output of rostopic list after the launch of mavros apm.launch

rostopic list.txt (2.8 KB)

@ptroll sorry, I would like to see also the output in the terminal in which you launch mavros.

No problem, here you have it
mavros launch output.txt (12.6 KB)

I don’t see anything wrong …

at this time after launching mavros if you give the following command:
rosrun aruco_gridboard set_origin.py
you should see messages from /mavros/local_position/pose topic

if this doesn’t happen try to reboot the FC via GCS (I use mavproxy connected to gcs_url) and after seeing the messages (on GCS or term tab with mavros running):
[ERROR] [1455211795.669665982]: FCU: GPS Glitch
[ERROR] [1455211795.760278673]: FCU: GPS Glitch cleared
give the command:
rosrun aruco_gridboard set_origin.py
again

Dear Anbello,

I tried what you suggested, but I don’t receive any message from /mavros/local_position/pose topic. (Meanwhile /mavros/vision_pose/pose works fine)

After I launched the aruco_gridboard detection_rpicam.launch , mavros pm.launch , rosrun aruco_gridboard set_origin.py (just after GPS Glitch cleared)
I gave the command: rosrun aruco_gridboard mavros_control1.py
And then i saw the following graph in rqt_graph:

It seems the /mavros/local_position/pose topic doesn’t get any source from /mavros
I can’t find the reason for this.
Does anyone have any tips on where the error might be?
What should i modify to get messages from local_position topic? Maybe something in apm_config.yaml or apm_pluginlists.yaml?

The local position is internal to the EKF on ArduPilot, there is not external position estimator , so mavros is basically just used to transform ENU to NED references. You can still use the tools for mav control.

Just an idea, but if you are using the branch Copter-3.7.0-dev stack, maybe you should use a “released” branch like Copter-3.6.7. This one has the external navigation feature, and you are sure to not suffer from any bug appearing during development.
Also, it can happens that some topics (maybe /mavros/local_position/pose is part of it), need a frequency parameter to publish. Not sure, but I had a bug like this once. I use the service rosservice call /mavros/set_stream_rate 0 20(Hz) 1 for this.

Dear guys,
I am going to try this setup soon, Do it need px4flow so that the pixhawk can fly indoor ?

Dear Mark
In this system I don’t use optical flow, I use Aruco Board pose estimation to control the position of the Copter.
It is explained in the first post, there is a Raspberry Pi zero and Cam on board that send video stream to PC via WiFi, the PC do the pose estimation stuff and send control messages to the Copter.

In another Copter I used a Raspberry Pi 3 so all the computing stuff is done on board, this is explained here:
https://ardupilot.org/dev/docs/ros-aruco-detection.html

1 Like

thanks for your previous reply. I try to setup the packages but i face this problem when building cv_bridge, any suggestions?

cv_bridge:cmake /home/greah/catkin_ws_apm/logs/cv_bridge/build.cmake.004.log
CMake Error at /usr/share/cmake-3.5/Modules/FindBoost.cmake:1677 (message):
Unable to find the requested Boost libraries.

Boost version: 1.58.0

Boost include path: /usr/include

Could not find the following Boost libraries:

      boost_python37

No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the
directory containing Boost libraries or BOOST_ROOT to the location of
Boost.

Which OS and ROS version are you using?

In my system with Ubuntu 18.04 and ROS Melodic I don’t see that error.