I am using a Navio2 running arducopter 3.6.10 and would simply like to use external navigation data, from a Intel Real-Sense T265 tracking camera to control the drone. I am sending VISION_POSITION_ESTIMATE messages from my own custom C++ program using mavlink.
Despite following the many different tutorials available, nothing has worked as it should have and I have slowly learned that the documentation is not all correct. I think this is a problem in and of itself. I would simply like to understand the following so I can finally get this system working:
How does Arducopter setup connections at start up? What actually has to happen to establish a udp connection with Arducopter? Does an exchange need to happen or can I just start sending mavlink messages? What is arducopter’s listening address? This is necessary to know for making a C++ program which connects to Arducopter at startup, but is completely absent from documentation. All I would like to do is establish a udp connection so I can send mavlink messages.
How is timing verified? There is no comprehensive documentation on the details of how timing is handled, meaning knowing if there is a problem with message timing is not possible.
Sorry for the vague questions, but they are as specific as they can be given the documentation.
I have seen this and unfortunately it does not address my problem. They have scripts that allows them send mavlink messages for configuration (e.g. setting EKF origin), which is the part I’m missing. I need to know how to do that in order to attempt what they are doing. I guess I could install all of the python code they supply and use dronekit but I’m trying to stay in C++ for speed and lower memory usage.
Also, so far it seems that an Rpi3B+ can handle the load. I also plan on swithching to a 4 once, Emlid releases an OS that can handle it.
Actually I know for a fact that the tutorial you pointed to won’t work. With the deafult Emlid raspbian image for the Navio2, you cannot install mavros trivially. Ros amazingly doesn’t focus on Debian or Raspbian systems and so “sudo apt-get install ros-kinetic-mavros ros-kinetic-mavros-extras” will not work. Hence you cannot easily communicate with ardupilot using mavros. You have to make the mavlink connection yourself, or fight the battle of finding a way to install mavros. I eventually found the mavros battle not worth it and so moved to trying to send my own mavlink messages. Hence the post.
Something must have changed on the default Emlid image, because a few months back I successfully managed to get ROS+MavROS running, following this tutorial and back then both ROS and MavROS were already pre-installed on the Emlid image.
I should have been sightly more specific. Mavros is installed by default but the mavros_extras package is not. (So everywhere I said mavros in my last post, I really meant mavros_extras.) And unfortunately the mavros_extras package is what provides the plugins that actually listen to the ‘/mavros/vision_pose/pose’ topic. Thus without it, nothing is listening to that topic and so you cannot use the method that is outlined in the tutorial.
Unless somehow mavros_extras was actually installed hidden somewhere, but I looked through the file system and saw no traces of it. I also specifically checked to see if there was anything listening to the /mavros/vision_pose/pose topic and there were no subscribers.
They have scripts that allows them send mavlink messages for configuration (e.g. setting EKF origin), which is the part I’m missing. I need to know how to do that in order to attempt what they are doing.
The overall workflow that I have tested is described in this flowchart. In short:
Run all ROS nodes beforehand, verify that FCU is connected through mavros and vision/mocap topic is available.
Wait until you see the messages GPS Glitch and GPS Glitch Cleared, this indicates that the EKF is ready to set home position. These messages might not appear 100% of the time, however you can still proceed with the following steps.