ROS機器人底盤(10)-PIBOT的driver的實現(xiàn)及動態(tài)PID調(diào)節(jié)

PIBOT的ros中driver

目標

  • 串口數(shù)據(jù)發(fā)送與接收
  • 訂閱cmd_vel topic下發(fā)至下位機
  • 根據(jù)下位機的反饋發(fā)布odom topicodom tf

串口數(shù)據(jù)發(fā)送與接收

  boost::shared_ptr<Transport> trans;
  boost::shared_ptr<Dataframe> frame;
    trans = boost::make_shared<Serial_transport>(bdg.port, bdg.buadrate);
    frame = boost::make_shared<Simple_dataframe>(trans.get());

這里實現(xiàn)一個上位機的Serial_transport和一個Simple_dataframe即可完成

subscribe cmd_vel

cmd_vel_sub = nh.subscribe(bdg.cmd_vel_topic, 1000, &BaseDriver::cmd_vel_callback, this);
void BaseDriver::cmd_vel_callback(const geometry_msgs::Twist& vel_cmd)
{
    ROS_INFO_STREAM("cmd_vel:[" << vel_cmd.linear.x << " " << vel_cmd.linear.y << " " << vel_cmd.angular.z << "]");

    Data_holder::get()->velocity.v_liner_x = vel_cmd.linear.x*100;
    Data_holder::get()->velocity.v_liner_y = vel_cmd.linear.y*100;
    Data_holder::get()->velocity.v_angular_z = vel_cmd.angular.z*100;

    need_update_speed = true;
}
void BaseDriver::update_speed()
{
    if (need_update_speed)
    {
        ROS_INFO_STREAM("update_speed");
        need_update_speed = !(frame->interact(ID_SET_VELOCITY));
    }
}

代碼容易理解段誊,訂閱消息泌类,回調(diào)函數(shù)中設(shè)置標識健田,循環(huán)中根據(jù)標識下發(fā)設(shè)置指令

publish odom

ROS機器人底盤(9)-base_link聋丝、odom凉当、map關(guān)系中有個odom publisher的例子,基本拿過來就可以


void BaseDriver::update_odom()
{
    frame->interact(ID_GET_ODOM);
    
    ros::Time current_time = ros::Time::now(); 

    float x = Data_holder::get()->odom.x*0.01;
    float y = Data_holder::get()->odom.y*0.01;
    float th = Data_holder::get()->odom.yaw*0.01;

    float vxy = Data_holder::get()->odom.v_liner_x*0.01;
    float vth = Data_holder::get()->odom.v_angular_z*0.01;

    //ROS_INFO("odom: x=%.2f y=%.2f th=%.2f vxy=%.2f vth=%.2f", x, y ,th, vxy,vth);
    
    geometry_msgs::Quaternion odom_quat = tf::createQuaternionMsgFromYaw(th);

    //send the transform  
    odom_trans.header.stamp = current_time;  
    odom_trans.transform.translation.x = x;  
    odom_trans.transform.translation.y = y;  
    odom_trans.transform.rotation = odom_quat; 
    odom_broadcaster.sendTransform(odom_trans);  

    //publish the message  
    odom.header.stamp = current_time;  
    odom.pose.pose.position.x = x;  
    odom.pose.pose.position.y = y;  
    odom.pose.pose.orientation = odom_quat;  
    odom.twist.twist.linear.x = vxy;  
    odom.twist.twist.angular.z = vth;  
    odom_pub.publish(odom);
}

動態(tài)PID調(diào)節(jié)

概述

底層提供了各個電機輸入輸出的宾巍,參見協(xié)議ROS機器人底盤(3)-通訊協(xié)議

配置

params.yaml打開out_pid_debug_enable

port: /dev/pibot
buadrate: 115200

base_frame: base_link

# topic
cmd_vel_topic: cmd_vel

#pid debug
out_pid_debug_enable: true

PID曲線

運行

roslaunch pibot_bringup bringup.launch
rosrun rqt_plot rqt_plot /motor1_input /motor1_output

即可展示出實時曲線

plot

控制之前最好先架起小車

為了穩(wěn)定給出輸入直接向cmd_vel發(fā)消息

  x: 0.15
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0" -r 20

觀察曲線變化輸入輸出基本一致輸出振幅較小即可剩拢;否則打開配置頁面
rosrun rqt_reconfigure rqt_reconfigure

config

調(diào)整PID參數(shù),重復(fù)上一步操作直到輸出較為穩(wěn)定即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末够话,一起剝皮案震驚了整個濱河市蓝翰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌女嘲,老刑警劉巖霎箍,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異澡为,居然都是意外死亡漂坏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顶别,“玉大人谷徙,你說我怎么就攤上這事⊙币铮” “怎么了完慧?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剩失。 經(jīng)常有香客問我屈尼,道長,這世上最難降的妖魔是什么拴孤? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任脾歧,我火速辦了婚禮,結(jié)果婚禮上演熟,老公的妹妹穿的比我還像新娘鞭执。我一直安慰自己,他們只是感情好芒粹,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布兄纺。 她就那樣靜靜地躺著,像睡著了一般化漆。 火紅的嫁衣襯著肌膚如雪估脆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天座云,我揣著相機與錄音疙赠,去河邊找鬼。 笑死疙教,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伞租。 我是一名探鬼主播贞谓,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼葵诈!你這毒婦竟也來了裸弦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤作喘,失蹤者是張志新(化名)和其女友劉穎理疙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泞坦,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡窖贤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赃梧。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡滤蝠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出授嘀,到底是詐尸還是另有隱情物咳,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布蹄皱,位于F島的核電站览闰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巷折。R本人自食惡果不足惜压鉴,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盔几。 院中可真熱鬧晴弃,春花似錦、人聲如沸逊拍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芯丧。三九已至芍阎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缨恒,已是汗流浹背谴咸。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骗露,地道東北人岭佳。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像萧锉,于是被迫代替她去往敵國和親珊随。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容