0、关于本文
老板前不久嚷着要买飞机,前几天拿出来订单一看还真是,两个M600还有几个M200-V2,确实抛了不少钱.不过拿来直接玩的话老王肯定是舍不得的,搜了一堆论文觉得纯搞飞控的控制算法不太好抢人家的饭碗,就打起了先仿真这几个dji的想法…
1、开源项目搜集
最近开源的ROS and Gazebo packages for DJI M100 drone使用了最新的DJI Onboard-SDK和Onboard-SDK-ROS 3.8
版本,测试后编译通过,本文章主要讲解此项目.
最早开源的caochao-HKU_m100提出了gazebo下m100的仿真模型,并且做了模拟跟踪标志tag并实现着陆的研究,因为时代久远,issue中建议用DJI Onboard-SDK和Onboard-SDK-ROS 3.2
版本,同学测试后也编译通过,不过ros(kinetic)安装的gazebo为7.1版本,出现打不开world的情况…
2016年随着无人机平台RotorS的发布越来越多的人开始尝试自己搭建无人机平台,2019年后该项目因为ROS本身的迭代升级在编译方面出现了些许bug,后来CrazyS对该项目进行了改进,得以继续换发新的生机活力,感谢Github@gsilano.
2、DJI-SDK环境配置
安装Onboard-SDK (保存于/usr/local/include)以及 Onboard-SDK-ROS 3.8
We almost have all the software setup for DJI SDK ROS.因为我们没有m100的硬件,便需要对dji-m100
这个项目下手了:P
3、编译过程
1
2
$ cd ~/your_catkin_ws/
$ catkin_make
缺失nmea-msgs
1
sudo apt-get install ros-melodic-nmea-msgs
缺失 apriltags_ros
一直没出melodic版本,不用怕直接clone到src/即可
1 2 cd ~/catkin_ws/src git clone https://github.com/RIVeR-Lab/apriltags_ros.git
缺失rviz_visual_tools
1
sudo apt-get install ros-melodic-rviz-visual-tools
以及…众多的包
https://github.com/tu-darmstadt-ros-pkg/hector_quadrotor
http://wiki.ros.org/hector_pose_estimation 要删掉没有用的
http://wiki.ros.org/hector_gazebo_plugins
http://wiki.ros.org/geographic_msgs
http://wiki.ros.org/uuid_msgs
多熟悉包的安装方法,apt-get以及源码包git都好用.
4、dji_m100功能介绍
case1:
1
2
roslaunch dji_m100_gazebo start.launch
roslaunch dji_m100_gazebo spawn_dji_m100.launch //显示静态模型
两个一起食用可创建一个安静的世界
(hhhhh),可以用来查看uav结构设计的准确与否,dji_m100项目中硬件部分还是不错的,hku_m100项目摄像头部分存在bug.
case2:
而
spawn_drones.launch //显示多架无人机实现编队飞行,控制类型为sitl
这一launch文件包含在simulate.launch
中,所以只执行下面命令即可:
1
roslaunch dji_m100_gazebo simulate.launch
这下仿真的环境基本都构建好了,下面就是遥控怎么让uav飞起来.
探索阶段…
这个项目说实话在hku_m100项目的基础上进行了一定的机械结构的优化,也对定点着陆这一目标做了调整,但是缺少了README真的难受啊.
查看simnulate节点
- 话题类型
1
$ rostopic type /uav1/cmd_vel
geometry_msgs/Twist
1
$ rosmsg show /uav1/cmd_vel
geometry_msgs/Vector3 linear
float64 vx
float64 vy
float64 vz
geometry_msgs/Vector3 angular
float64 wx
float64 wy
float64 wz
1
角速度(angular_velocity)[vx vy vz]和线加速度(linear_acceleration)[wx wy wz]的类型为三维向量(geometry_msgs/Vector3)。
- 控制指令
cmd_vel一般来说应该是控制指令 ``` rostopic pub -1 /uav1/cmd_vel geometry_msgs/Twist – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’
//姿态(orientation)[q0 q1 q2 q3]类型为四元数(geometry_msgs/Quaternion);
1
2
3
4
#### 键盘控制
好,它不动= = 那么就来尝试用键盘控制它一下吧.
git@github.com:ros-teleop/teleop_twist_keyboard.git
1
2
首先从上面网址下载ros键盘控制py程序,简单查看一下程序运行时候的相关信息:
dong@Inspiron-7447:~/Ros/Ros_4$ roscore dong@Inspiron-7447:~/Ros/Ros_4$ rosrun teleop_twist_keyboard teleop_twist_keyboard dong@Inspiron-7447:~/Ros/Ros_4$ rostopic list /cmd_vel /rosout /rosout_agg dong@Inspiron-7447:~/Ros/Ros_4$ rostopic info /cmd_vel Type: geometry_msgs/Twist
Publishers:
- /teleop_twist_keyboard (http://Inspiron-7447:36347/)
Subscribers: None
```
键盘控制的话题发布到/cmd_vel
上,数据类型为geometry_msgs/Vector3
,那么只要在程序中订阅一下这个话题并赋值即可控制目标的运动,当然,对于小车的话那种轮式的可以直接拿来当速度,或者积分算个路程来运动,这个飞机模型传感器都没有装..应该只是用来做与实际物体同步情况的测试.
5、总结
在家休息
了一个月指令也忘得七七八八,正好跟师兄边讨论边练手又过了一遍.
仿真方面硬件存在很大问题,明天开始对建模部分进行探索,详细说明.urdf
、.dae
、.urdf.xacro
、.stl
、.blender
类型的文件生成过程以及记录自己的建模探索过程.