




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
機(jī)器人操作系統(tǒng)(ROS2)入門與實(shí)踐機(jī)器人操作系統(tǒng)(ROS2)入門與實(shí)踐第1章LinuxUbuntu入門基礎(chǔ)第2章ROS2安裝與系統(tǒng)架構(gòu)第3章ROS2編程基礎(chǔ)第4章ROS2機(jī)器人運(yùn)動(dòng)控制第5章激光雷達(dá)在ROS2中的使用第6章IMU在ROS2中的使用第7章ROS2中的SLAM環(huán)境建圖第8章ROS2中的NAV2自主導(dǎo)航第9章ROS2中的圖像視覺應(yīng)用第10章ROS2的三維視覺應(yīng)用第11章ROS2的機(jī)械臂應(yīng)用第12章基于ROS2的綜合應(yīng)用第6章6.3基于IMU的航向鎖定實(shí)現(xiàn)
第6章IMU在ROS2中的使用6.2IMU數(shù)據(jù)獲取6.1IMU的話題名稱6.4本章小結(jié)
與激光雷達(dá)一樣,ROS2中的IMU節(jié)點(diǎn)會(huì)在特定的話題里發(fā)布數(shù)據(jù)消息。話題名稱在REP-145中建議為“/imu/data_raw”、“/imu/data”和“/imu/mag”三個(gè)。6.1ROS2里的IMU數(shù)據(jù)話題內(nèi)容/imu/data_raw加速度計(jì)輸出的矢量加速度和陀螺儀輸出的旋轉(zhuǎn)加速度。/imu/data/imu/data_raw的數(shù)據(jù)再加上融合后的四元數(shù)姿態(tài)描述/imu/mag磁強(qiáng)計(jì)輸出的磁強(qiáng)數(shù)據(jù)IMU數(shù)據(jù)的獲取是通過訂閱IMU節(jié)點(diǎn)發(fā)布的話題,從話題中獲取IMU節(jié)點(diǎn)發(fā)出的消息包來實(shí)現(xiàn)的。如圖所示:6.2IMU數(shù)據(jù)獲取詳細(xì)操作步驟見教材P155-P166頁(yè)cd~/ros2_ws/srcros2pkgcreateimu_pkg1、編寫節(jié)點(diǎn)代碼新建文件,命名為“imu_data.cpp”。6.2IMU數(shù)據(jù)獲取6.2.1編寫IMU數(shù)據(jù)獲取程序#include<rclcpp/rclcpp.hpp>#include<sensor_msgs/msg/imu.hpp>#include<tf2/LinearMath/Quaternion.h>#include<tf2/LinearMath/Matrix3x3.h>
std::shared_ptr<rclcpp::Node>node;
voidIMUCallback(constsensor_msgs::msg::Imu::SharedPtrmsg){tf2::Quaterniontf2_quaternion;tf2_quaternion.setX(msg->orientation.x);tf2_quaternion.setY(msg->orientation.y);tf2_quaternion.setZ(msg->orientation.z);tf2_quaternion.setW(msg->orientation.w);
tf2::Matrix3x3matrix(tf2_quaternion);
doubleroll,pitch,yaw;matrix.getRPY(roll,pitch,yaw);roll=roll*180/M_PI;pitch=pitch*180/M_PI;yaw=yaw*180/M_PI;RCLCPP_INFO(node->get_logger(),"roll=%.0fpitch=%.0fyaw=%.0f",roll,pitch,yaw);}6.2IMU數(shù)據(jù)獲取intmain(intargc,char**argv){rclcpp::init(argc,argv);
node=std::make_shared<rclcpp::Node>("imu_data_node");
autosub=node->create_subscription<sensor_msgs::msg::Imu>("/imu",10,IMUCallback);
rclcpp::spin(node);
rclcpp::shutdown();
return0;}6.2IMU數(shù)據(jù)獲取2、設(shè)置編譯規(guī)則3、修改軟件包信息4、編譯軟件包find_package(rclcppREQUIRED)find_package(sensor_msgsREQUIRED)find_package(tf2REQUIRED)add_executable(imu_datasrc/imu_data.cpp)ament_target_dependencies(imu_data"rclcpp""sensor_msgs""tf2")install(TARGETSimu_dataDESTINATIONlib/${PROJECT_NAME})<depend>rclcpp</depend><depend>sensor_msgs</depend><depend>tf2</depend>cd~/ros2_wscolconbuild6.2IMU數(shù)據(jù)獲取6.2.2仿真運(yùn)行雷達(dá)數(shù)據(jù)獲取程序sourceinstall/setup.bashros2launchwpr_simulation2wpb_simple.launch.pysourceinstall/setup.bashros2runimu_pkgimu_data6.2IMU數(shù)據(jù)獲取打開第2個(gè)子窗口。6.2IMU數(shù)據(jù)獲取
下面實(shí)現(xiàn)一個(gè)航向鎖定的功能。編寫一個(gè)節(jié)點(diǎn),先訂閱“/imu/data”話題。從此話題中接收IMU節(jié)點(diǎn)發(fā)來的sensor_msgs::Imu類型消息包,解析出機(jī)器人的姿態(tài)角度。設(shè)置一個(gè)目標(biāo)航向角度,讓機(jī)器人朝著這個(gè)航向運(yùn)動(dòng)。若運(yùn)行過程中機(jī)器人的姿態(tài)被改變了,導(dǎo)致航向角與目標(biāo)角度不一致。則根據(jù)航向角偏差值,計(jì)算出糾偏速度值,打包成geometry_msgs::Twist類型的消息包,發(fā)布到“/cmd_vel”話題中。機(jī)器人底盤節(jié)點(diǎn)會(huì)從“/cmd_vel”話題獲取速度值并執(zhí)行,以此來實(shí)現(xiàn)航向鎖定的行為。如圖所示:6.3基于IMU的航向鎖定實(shí)現(xiàn)詳細(xì)操作步驟見教材P167-P179頁(yè)1、編寫節(jié)點(diǎn)代碼新建文件,命名為“imu_behavior.cpp”。6.3基于IMU的航向鎖定實(shí)現(xiàn)6.3.1編寫航向鎖定程序按照上一個(gè)實(shí)驗(yàn),在工作空間中創(chuàng)建一個(gè)imu_pkg軟件包。如果已經(jīng)創(chuàng)建好了,可以直接使用,不用再重復(fù)創(chuàng)建。具體操作步驟如下:#include<rclcpp/rclcpp.hpp>#include<sensor_msgs/msg/imu.hpp>#include<geometry_msgs/msg/twist.hpp>#include<tf2/LinearMath/Quaternion.h>#include<tf2/LinearMath/Matrix3x3.h>
std::shared_ptr<rclcpp::Node>node;rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtrvel_pub;
voidIMUCallback(constsensor_msgs::msg::Imu::SharedPtrmsg){tf2::Quaterniontf2_quaternion;tf2_quaternion.setX(msg->orientation.x);tf2_quaternion.setY(msg->orientation.y);tf2_quaternion.setZ(msg->orientation.z);tf2_quaternion.setW(msg->orientation.w);
tf2::Matrix3x3matrix(tf2_quaternion);
doubleroll,pitch,yaw;matrix.getRPY(roll,pitch,yaw);roll=roll*180/M_PI;pitch=pitch*180/M_PI;yaw=yaw*180/M_PI;RCLCPP_INFO(node->get_logger(),"roll=%.0fpitch=%.0fyaw=%.0f",roll,pitch,yaw);6.3基于IMU的航向鎖定實(shí)現(xiàn)doubletarget_yaw=90;
geometry_msgs::msg::Twistvel_msg;doublediff_angle=target_yaw-yaw;vel_msg.angular.z=diff_angle*0.01;vel_msg.linear.x=0.1;vel_pub->publish(vel_msg);}
intmain(intargc,char**argv){rclcpp::init(argc,argv);
node=rclcpp::Node::make_shared("imu_behavior_node");
autosub=node->create_subscription<sensor_msgs::msg::Imu>("imu",10,IMUCallback);
vel_pub=node->create_publisher<geometry_msgs::msg::Twist>("/cmd_vel",10);
rclcpp::spin(node);
rclcpp::shutdown();
return0;}6.3基于IMU的航向鎖定實(shí)現(xiàn)2、設(shè)置編譯規(guī)則3、修改軟件包信息4、編譯軟件包find_package(rclcppREQUIRED)find_package(sensor_msgsREQUIRED)find_package(tf2REQUIRED)find_package(geometry_msgsREQUIRED)add_executable(imu_behaviorsrc/imu_behavior.cpp)ament_target_dependencies(imu_behavior"rclcpp""sensor_msgs""tf2""geometry_msgs")install(TARGETSimu_dataimu_behaviorDESTINATIONlib/${PROJECT_NAME})<depend>rclcpp</depend><depend>sensor_msgs</depend><depend>tf2</depend><depend>geometry_msgs</depend>cd~/ros2_wscolconbuild6.3基于IMU的航向鎖定實(shí)現(xiàn)sourceinstall/setup.bashros2launchwpr_simulation2wpb_simple.launch.pysourceinstall/setup.bashros2runimu_pkgimu_behavior6.3基于IMU的航向鎖定實(shí)現(xiàn)6.3.2仿真運(yùn)行航向鎖定程序打開第2個(gè)子窗口。6
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DB13T 5094-2019 太陽(yáng)能光伏空氣源熱泵取暖系統(tǒng)通 用技術(shù)要求
- DB13T 2912-2018 A級(jí)綠色食品 芝麻菜生產(chǎn)技術(shù)規(guī)程
- DB13T 5007-2019 商務(wù)誠(chéng)信信息資源目錄編制規(guī)范
- DB13T 2971-2019 預(yù)拌砂漿企業(yè)綠色生產(chǎn)管理規(guī)程
- 針灸學(xué)考試筆試試題及答案
- 漳州教資面試題庫(kù)及答案
- 在幼兒園面試題庫(kù)及答案
- 滬教版英語(yǔ)(三起)四年級(jí)上冊(cè)(2024)期中綜合素質(zhì)達(dá)標(biāo)(含答案含聽力原文無聽力音頻)
- 《學(xué)前兒童健康教育與活動(dòng)指導(dǎo) 》課件-第三章 學(xué)前兒童身體保健教育
- 語(yǔ)文職稱筆試題目及答案
- 深圳2020-2024年中考英語(yǔ)真題復(fù)習(xí)專題01 語(yǔ)法填空(解析版)
- 臨床執(zhí)業(yè)助理醫(yī)師技能考試試題及答案
- JJF(津) 139-2024 電動(dòng)汽車公用充電設(shè)施統(tǒng)計(jì)抽樣計(jì)量性能評(píng)價(jià)技術(shù)規(guī)范
- DB11T 301-2017 燃?xì)馐覂?nèi)工程設(shè)計(jì)施工驗(yàn)收技術(shù)規(guī)范
- 非遺項(xiàng)目計(jì)劃書模板范文
- 2022年《數(shù)據(jù)結(jié)構(gòu)(本)》形考任務(wù)實(shí)踐活動(dòng)3
- 視頻監(jiān)控維保項(xiàng)目投標(biāo)方案(技術(shù)方案)
- 2024年汽車駕駛員(技師)職業(yè)鑒定理論考試題庫(kù)(含答案)
- 上海市市轄區(qū)(2024年-2025年小學(xué)四年級(jí)語(yǔ)文)統(tǒng)編版期末考試(下學(xué)期)試卷及答案
- 叔侄關(guān)系斷絕協(xié)議書
- 中小學(xué)-預(yù)防性騷擾與性侵害-1-課件
評(píng)論
0/150
提交評(píng)論