Basic Control Containment[2]

本文详细介绍了CreateNormalizedObject函数如何使用参数lpszTricsData创建不同类型的COM对象实例,包括HTML文档、Web浏览器及根据ProgID或CLSID创建的对象。此外还介绍了ActivateAx函数如何设置客户站点、初始化或加载持久化数据以及与视图对象交互。

The CreateNormalizedObject function creates an instance of a COM object using the strings of the param lpszTricsData. 共有

static HRESULT CreateNormalizedObject(LPCOLESTR lpszTricsData, REFIID riid, void** ppvObj, bool& bWasHTML, BSTR bstrLicKey) atlhost.h ln 66

三种情况:1.It's HTML, so let's create mshtml(HTMLDocument)。2.URL so let's create shdocvw.(WebBrowser). 3.assume ProgID Or CLSID.(If the license key is present Create using IClassFactory2)

 

接下来是HRESULT ActivateAx(IUnknown* pUnkControl, bool bInited, IStream* pStream)

他负责的工作有:

1.通过控制的IOleObject实现设置客户站点,也就是CAxHostWindow的IOleClientSite实现。

2.通过控制的IPersistStreamInit实现调用,InitNew或者load。

3.把CAxHostWindow的IAdviseSink实现传递给控制的IViewObject实现。

4.。。。

 

待续

在MATLAB中实现包含控制(containment control)通常涉及多智能体系统(multi-agent systems),其中多个跟随者(followers)被引导进入由一个或多个领导者(leaders)定义的凸包区域。这种控制策略广泛应用于无人机编队、机器人协同任务等领域。 ### MATLAB中实现Containment Control的基本方法 #### 1. **数学建模** - 在多智能体系统中,每个智能体的动力学可以表示为一阶或二阶积分器模型。 - 假设系统中有 $ N $ 个跟随者和 $ M $ 个领导者,目标是设计控制器使得所有跟随者的状态收敛到由领导者定义的凸包内。 - 系统动力学可表示为: $$ \dot{x}_i = v_i, \quad \dot{v}_i = u_i $$ 其中 $ x_i $ 和 $ v_i $ 分别表示第 $ i $ 个智能体的位置和速度,$ u_i $ 是控制输入 [^2]。 #### 2. **图论与通信拓扑** - 使用图论描述智能体之间的通信关系,通常采用邻接矩阵 $ A $ 或拉普拉斯矩阵 $ L $ 表示网络拓扑结构。 - 领导者-跟随者系统的通信图应满足一定的连通性条件,以确保信息能够从领导者传播到所有跟随者 [^2]。 #### 3. **控制器设计** - 对于二阶积分器系统,常用的控制协议形式如下: $$ u_i = -k_1 \sum_{j \in N_i} a_{ij}(x_i - x_j) - k_2 \sum_{j \in N_i} a_{ij}(v_i - v_j) $$ 其中 $ k_1 $ 和 $ k_2 $ 是控制增益,$ N_i $ 表示与智能体 $ i $ 相邻的邻居集合,$ a_{ij} $ 是邻接矩阵元素 [^2]。 #### 4. **MATLAB仿真实现** - 使用 `ode45` 求解微分方程组。 - 构建通信拓扑图,使用 `graph` 或 `digraph` 函数生成邻接矩阵。 - 编写控制律函数并进行仿真。 以下是一个简单的MATLAB代码示例,展示如何实现一阶系统的Containment Control: ```matlab % 参数设置 N = 5; % 跟随者数量 M = 2; % 领导者数量 k = 1; % 控制增益 % 初始化位置和速度 x = rand(N + M, 2); % 初始位置 (x, y) v = zeros(N + M, 2); % 初始速度 % 定义通信拓扑(邻接矩阵) A = zeros(N + M); % 假设领导者之间不通信,只与部分跟随者通信 for i = 1:N for j = N+1:N+M A(i, j) = 1; % 跟随者与领导者之间的连接 end end % 拉普拉斯矩阵 L = diag(sum(A)) - A; % 控制律函数 function dxdt = containment_control(t, X, L, N, M, k) x = X(1:end/2); v = X(end/2+1:end); dxdt = zeros(size(X)); for i = 1:N sum_term = 0; for j = 1:N+M if L(i, j) ~= 0 sum_term = sum_term + L(i, j) * (x(i) - x(j)); end end dxdt(i) = v(i); dxdt(i + N) = -k * sum_term; end end % 初始状态向量 X0 = [x(:); v(:)]; % 时间范围 tspan = [0 10]; % 求解ODE [t, X] = ode45(@(t, X) containment_control(t, X, L, N, M, k), tspan, X0); % 绘制轨迹 figure; for i = 1:N plot(X(:, i), X(:, i + N)); hold on; end legend('Follower 1', 'Follower 2', 'Follower 3', 'Follower 4', 'Follower 5'); title('Containment Control Simulation in MATLAB'); xlabel('Position x'); ylabel('Position y'); grid on; ``` ### 关键点总结 - **通信拓扑**:合理的通信结构是实现Containment Control的基础。 - **控制器设计**:需要根据系统动力学选择合适的控制律。 - **稳定性分析**:通常使用Lyapunov理论或LaSalle不变原理证明闭环系统的稳定性 [^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值