基于PX4、树莓派和Mocap-Optitrack的室内飞行环境搭建
前言
想配置一套自己使用的室内环境,具体内容如下,目前还没有验证是否可行,之后会试试。原英文教程
系统结构和原理
OptiTrack运动捕捉系统(以下简称Mocap)的工作原理如下。头顶摄像头通过连接的红外LED发出红外光,然后被物体上的标记物反射并被OptiTrack摄像头检测到。已知这些标记在多个摄像头透视下的位置,可以使用三角剖分计算标记在房间中的实际三维位置。位置单位是米,方向是四元数,可以转换成弧度的欧拉角。
软硬件要求
硬件:
- 主机:运行Motive Motion Capture Software
- Optitrack定位系统
- 路由器
- 工作站:运行Linux系统的电脑或者机载计算机,如Odroid XU4、树莓派
软件:
- 主机装Motive
- 工作站装ROS
- vrpn_client_ros 用于工作站接收主机数据
Mocap环境设置
参考详细步骤
- 打开motive
- 尽量清理摄像头能看到的反光点
- 标定:1)挥T字杆收集采样点 2)放置L杆建立坐标系 3)设置坐标系方向
主机->工作站
设置wifi
- 查看ip信息
ifconfig -a
- 打开文件
sudo nano /etc/network/interfaces
- 添加内容
auto wlan0 # The following will auto-start connection after boot
allow-hotplug wlan0 # wlan0 WiFi card number
iface wlan0 inet static
address 192.168.0.xxx # Choose a static IP, usually you change the last number only for different devices
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1 # Your router IP address
dns-nameservers 8.8.8.8
wpa-ssid "RISC-AreaC" # WiFi name (case sensitive)
wpa-psk "risc3720" # WiFi password
Motive设置
打开View > Data Streaming
,确认OptiTrack Streaming Engine
和VRPN Streaming Engine
勾选Broadcast Frame Data
需要注意将使用的机器人机头对准x轴
- 创建刚体,改名和ID号(如果有多个刚体)
- 确认工作站IP
roslaunch vrpn_client_ros sample.launch server:=192.168.修改
- 然后可以从
/vrpn_client_node/<rigid_body_name>/pose
主题获取Mocap数据,打印试试,如果获取到正确的位置信息说明成功
rostopic echo vrpn_client_node/<rigid_body_name>/pose
Mocap->Pixhawk
硬件要求:
- Pixhawk飞控或者运行PX4固件的飞控
- 机载计算机:树莓派或者ODROID
- 串口连接:USB/FTDI连飞控的TELEM2,TX->RX,RX->TX,G->G
- 主机
- 路由器
软件要求:
- 工作站:Ubuntu+ROS+vrpn_client_ros
pixhawk设置
设置默认的端口TELEM2
传数据:
- 如果1.9.0版本以下,设置
SYS_COMPANION = Companion Link (921600 baud, 8N1)
- 如果1.9.0版本及以上,设置
MAV_1_CONFIG = TELEM 2 (MAV_1_CONFIG is often used to map the TELEM 2 port)
MAV_1_MODE = Onboard
SER_TEL2_BAUD = 921600 (921600 or higher recommended for applications like log streaming or FastRTPS)
- 设置
EKF2_AID_MASK
,不选GPS,选择vision position fusion
和vision yaw fusion
设置delay参数
-
这些参数直接影响EKF
-
高度数据来源为视觉,设置
EKF2_HGT_MODE = Vision
-
可选参数设置,和定义的刚体中心位置和飞控中心的偏离值
PX4获取数据
运行vrpn_client_node
,新开一个终端运行MAVROS节点
roslaunch mavros px4.launch fcu_url:=/dev/ttyUSB0:921600 gcs_url:=udp://@192.168.0.105:14550
说明:
fcu_url
连接树莓派和飞控的串口号- 用
ls /dev/ttyUSB*
指令查看串口号是否连接 - 参数
gcs_url:=udp://@192.168.0.119:14550
用来接收QGroundControl
数据(同一WIFI路由) - MAVROS 直接通过
/mavros/vision_pose/pose
给 PX4发布消息 - remap从Mocap获取的位置主题
/vrpn_client_node/<rigid_body_name>/pose
成/mavros/vision_pose/pose
rosrun topic_tools relay /vrpn_client_node/<rigid_body_name>/pose /mavros/vision_pose/pose
- 在QGC上确认是否能切position模式,如果成功,那么可以使用position/offboard模式
飞行验证
设置ROS Network
告诉笔记本,机载电脑是Master,打开.bashrc
gedit ~/.bashrc
末尾加上
export ROS_MASTER_URI=http://192.168.0.odroid_ip_number:11311
export ROS_HOSTNAME=192.168.0.pc_ip_number
- source一下
机载电脑指令
分别开终端,开启vrpn_client_ros'、'vrpn_client_ros, MAVROS and relay
vrpn_client_ros, MAVROS and relay`
roslaunch vrpn_client_ros sample.launch server:=192.168.0.101
roslaunch mavros px4.launch fcu_url:=/dev/ttyUSB0:921600 gcs_url:=udp://@192.168.0.pc_ip_number:14550
rosrun topic_tools relay /vrpn_client_node/<rigid_body_name>/pose /mavros/vision_pose/pose
笔记本电脑指令
遥控器控制
- 1 解锁
- 3 切offboard模式后起飞
- 2 着陆
- 11 上锁
没有写完,我个人还没有真机测试,身边有人测试过存在一定漂移,有机会再补充