当前位置: 移动技术网 > IT编程>开发语言>Java > 【无人机】PX4,源码简要分析

【无人机】PX4,源码简要分析

2020年07月13日  | 移动技术网IT编程  | 我要评论

看看源码目的很单纯,就是想有没有控制方面的代码可以移植到其它地方。

【无人机】PX4,ubuntu18仿真运行

从官网可能下载代码不全,这是编译完成的源码,有点大!!!!

下载:

链接:https://pan.baidu.com/s/1a4x0IE4S75YaVyoIpu4rOw 
提取码:sbhr

 打开源码。前两个暂时不用管。

更多看驱动源码下的 modules文件。

 

例如:箭头所指文件:姿态解算文件。下面有很多。唉,这源码写的刚接触还真。。。刚刚接触结构还没懂。

 姿态解算,涉及很多,建议看看视频、书籍。不仅仅姿态解算,还有位置解算等。。。。里面可以借鉴很多。

点灯。

它这点灯并不是简单IO。是一个任务,有任务间通信。

int gpio_led_main(int argc, char *argv[])
{
	if (argc < 2) {
		print_usage(NULL);
		exit(1);
	} else {

		if (!strcmp(argv[1], "start")) {
			if (gpio_led_state != Stopped) {
				PX4_WARN("already running");
				exit(1);
			}

			/* by default GPIO_SERVO_1 on FMUv2 */
			int pin = 1;

			/* pin name to display */
			char pin_name[sizeof(PIN_NAME) + 2] = PIN_NAME;

			if (argc > 2) {
				if (!strcmp(argv[2], "-p")) {

					unsigned int n = strtoul(argv[3], NULL, 10);

					if (n >= GPIO_MIN_SERVO_PIN && n <= GPIO_MAX_SERVO_PIN) {
						pin = 1 << (n - 1);
						snprintf(pin_name, sizeof(pin_name), "AUX OUT %d", n);
					} else {
						PX4_ERR("unsupported pin: %s (valid values are %d-%d)", argv[3], GPIO_MIN_SERVO_PIN, GPIO_MAX_SERVO_PIN);
						exit(1);
					}

				}
			}

			gpio_led_data = malloc(sizeof(struct gpio_led_s));
			if (gpio_led_data == NULL) {
				PX4_ERR("failed to allocate memory!");
				exit(1);
			} else {
				memset(gpio_led_data, 0, sizeof(struct gpio_led_s));
				gpio_led_data->pin = pin;
				int ret = work_queue(LPWORK, &(gpio_led_data->work), gpio_led_start, gpio_led_data, 0);

				if (ret != 0) {
					PX4_ERR("failed to queue work: %d", ret);
					goto out;
				} else {
					usleep(1000000/CYCLE_RATE_HZ);
					if (gpio_led_state != Running) {
						gpio_led_state = Stopped;
						goto out;
					}
					PX4_INFO("start, using pin: %s", pin_name);
					exit(0);
				}
			}

		} else if (!strcmp(argv[1], "stop")) {
			if (gpio_led_state == Running) {
				gpio_led_state = Stopping;
				while(gpio_led_state != Stopped) {
					usleep(1000000/CYCLE_RATE_HZ);
				}
				PX4_INFO("stopped");
				free (gpio_led_data);
				gpio_led_data = NULL;
				exit(0);
			} else {
				PX4_WARN("not running");
				exit(1);
			}

		} else {
			print_usage("unrecognized command");
			exit(1);
		}
	}
out:
	free (gpio_led_data);
	gpio_led_data = NULL;
	exit(1);
}

 

本文地址:https://blog.csdn.net/weixin_41865104/article/details/107295090

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网