1. 程式人生 > >2018年智慧機器人技術綜合實訓專題二控制演算法

2018年智慧機器人技術綜合實訓專題二控制演算法

2018年智慧機器人技術綜合實訓專題二控制演算法


教材:《ROS機器人專案開發11例》

自學:

第2章,使用ROS、OpenCV和Dynamixel伺服電機進行人臉檢查與跟蹤,

(攝像頭檢測人臉得到方位PID控制舵機跟蹤)

人臉識別之前已經講過,控制機器人左轉和右轉的程式碼也提過,這裡需要複習並實現;

第8章,在Matlab和Android上執行ROS,此部分延續專題一,很多演算法可以在Matlab中找到,

應用API可以直接控制ROS機器人;


複習智庫文章-甲子光年-APP--->API

案例學習:

V-Rep巡線小車示例:(線導引式物流小車)

理解模數轉換,灰度感測器,電機控制,與能控能觀的聯絡。

將其巡線核心程式碼讀懂。


        if (simExtK3_getLineSensor(k3Handle,0)>0.5) then 
            velLeft=maxVel         -- left sensor intensity > 0.5
        else
            velLeft=maxVel*0.5    -- left sensor intensity <= 0.5
        end

        if (simExtK3_getLineSensor(k3Handle,1)>0.5) then 
            velRight=maxVel        -- right sensor intensity > 0.5
        else
            velRight=maxVel*0.5    -- right sensor intensity <= 0.5
        end

        simExtK3_setVelocity(k3Handle,velLeft,velRight) -- Set desired left and right motor


認真學習視訊,v.youku.com/v_show/id_XMzkyNjQ1NzMxMg==.html

將上述程式碼,修改為PID演算法。程式碼精簡優雅,並且效率提高,如何做到?

補充練習:

將灰度感測器改為攝像頭,如何實現下述巡線小車功能?

參考連結:blog.csdn.net/ZhangRelay/article/details/81352622

四旋翼呢?空中機器人演算法如何設計?為什麼?

說明PID控制的侷限性,傳統控制理論的優勢和不足,並比較現代控制理論。

誤差在傳統PID控制中的作用,被控物件模型在現代控制理論中的作用?

學有餘力的同學,請自學並完成ETH的ROS課程:

blog.csdn.net/ZhangRelay/article/details/79463689

完成第3課:本課練習的目標是實現Husky機器人閉環控制。 首先,從鐳射掃描中獲取支柱(singlepillar)的位置,然後控制機器人,使其行駛到支柱附近。(PID演算法)

blog.csdn.net/zhangrelay/article/details/79956801

提示:


        //P-Controller to drive husky towards the pillar
        //propotinal gain
        float p_gain_vel = 0.1;
        float p_gain_ang = 0.4;
        if(x_pillar>0.2)
        {
            if (x_pillar <= 0.4 )
             {
                 vel_msg_.linear.x = 0; 
                 vel_msg_.angular.z = 0;
 
             }
            else 
              {
                 vel_msg_.linear.x = x_pillar * p_gain_vel  ;
                 vel_msg_.angular.z = -(y_pillar * p_gain_ang) ;
 
              }
 
       }
       else
       {
                 vel_msg_.linear.x = 0;
                 vel_msg_.angular.z = 0;
       }
       cmd_pub_.publish(vel_msg_);
 


為什麼是這樣?