无人机仿真(位置控制)
本次项目所用的仿真环境是开源的Rotors功能包,初次了解无人机的控制,也是摸索小白,希望可以起到抛砖引玉的作用。
1. 安装Rotors软件功能包
首先需要建立ROS软件包,并下载对应的Rotors的软件功能包:
$ mkdir -p /ROS/rotors_ws/src$ cd ROS/rotors_ws/src$ catkin_init_workspace$ git clone https://github.com/xmy0916/rotors
之后编译git下来的代码即可:
$ cd ..$ catkin_make$ source devel/setup.sh
2. 运行Rotors的Firefly机器人的launch文件
Firefly机器人是一个六轴的机器人,带有三个摄像头,从rviz的topic中可以看到有深度、RGB双目摄像头。出于个人喜好,可以对launch文件中的world进行修改,选择不同的运行物理环境,我喜欢沙都没有。所以,用了basic.world来对无人机进行仿真。订阅后的摄像头图像会发现看到了上面螺旋桨的旋转,所以我在mav_with_vi_sensor.gazebo文件中对摄像头的位置进行了微调,为以后的建图以及图像识别的容错率提升打好基础。
在调整好摄像头的角度后,遇到了其他插件无法转换至bask_link上的问题,需要将坐标系换成world坐标系,来完成转换。
3. 控制Firefly
首先在控制交互上我选用的是通过扫描键盘按下的键值,然后进行对应的控制。所以识别被按下键盘值成为首要解决。
#include #include #include #include #include #include #include #include #include static struct termios initial_settings, new_settings;static int peek_character = -1;void init_keyboard(void);void close_keyboard(void);int kbhit(void);int readch(void); void init_keyboard(){
tcgetattr(0,&initial_settings); new_settings = initial_settings; new_settings.c_lflag |= ICANON; new_settings.c_lflag |= ECHO; new_settings.c_lflag |= ISIG; new_settings.c_cc[VMIN] = 1; new_settings.c_cc[VTIME] = 0; tcsetattr(0, TCSANOW, &new_settings);} void close_keyboard(){
tcsetattr(0, TCSANOW, &initial_settings);} int kbhit(){