国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

GPS學(xué)習(xí)(一):在ROS2中將GPS經(jīng)緯度數(shù)據(jù)轉(zhuǎn)換為機(jī)器人ENU坐標(biāo)系,在RVIZ中顯示坐標(biāo)軌跡

這篇具有很好參考價(jià)值的文章主要介紹了GPS學(xué)習(xí)(一):在ROS2中將GPS經(jīng)緯度數(shù)據(jù)轉(zhuǎn)換為機(jī)器人ENU坐標(biāo)系,在RVIZ中顯示坐標(biāo)軌跡。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本文記錄在Ubuntu22.04-Humbel中使用NMEA協(xié)議GPS模塊的過(guò)程,使用國(guó)產(chǎn)ROS開(kāi)發(fā)板魯班貓(LubanCat )進(jìn)行調(diào)試。

一、GPS模塊介紹

在淘寶找了款性價(jià)比較高的輪趣科技GPS北斗雙模定位模塊作為入門(mén)學(xué)習(xí)使用,支持GNSS系統(tǒng)(北斗、GPS、GLONASS、日本的QZSS以及衛(wèi)星增強(qiáng)系統(tǒng)SBAS),定位精度在2.5m左右,屬于民用級(jí)別。引出了常用的幾個(gè)外部接口,主要用type-c調(diào)試比較方便,售后技術(shù)也相當(dāng)給力。接線示意圖如下,注意:測(cè)試時(shí)需要將GPS天線放置在室外,否則模塊將沒(méi)有GPS信號(hào)
ros gps,ROS2,GPS學(xué)習(xí),自動(dòng)駕駛,機(jī)器人,ubuntu,自動(dòng)駕駛

二、坐標(biāo)轉(zhuǎn)換

機(jī)器人基于Ubuntu-ROS平臺(tái)做開(kāi)發(fā)調(diào)試,所以需要將GPS模塊的經(jīng)緯度和高度信息轉(zhuǎn)化為機(jī)器人所能認(rèn)識(shí)的本地坐標(biāo)系(局部笛卡爾坐標(biāo)系)。參考其他博主案例,使用半正矢公式來(lái)將經(jīng)緯度轉(zhuǎn)為xyz坐標(biāo)值。

轉(zhuǎn)換原理

半正矢公式介紹:
半正矢公式是一種根據(jù)兩點(diǎn)的經(jīng)度和緯度來(lái)確定大圓上兩點(diǎn)之間距離的計(jì)算方法,在導(dǎo)航有著重要地位。它是球面三角學(xué)中“半正矢定理”公式的特例,該定理涉及了球面三角形的邊和角。
對(duì)于任何球面上的兩點(diǎn),圓心角的半正矢值可以通過(guò)如下公式計(jì)算:

??????????hav( d r \fracn5n3t3z{r} rd?)=hav( ψ 2 \psi_{2} ψ2?- ψ 1 \psi_{1} ψ1?)+cos( ψ 1 \psi_{1} ψ1?)cos( ψ 2 \psi_{2} ψ2?)hav( λ 2 \lambda_{2} λ2?- λ 1 \lambda_{1} λ1?)

hav 是半正矢函數(shù)的縮寫(xiě):

??????????haversin( θ \theta θ)= s i n 2 sin^{2} sin2( ( θ ) 2 \frac{(\theta)}{2} 2(θ)?)= 1 ? c o s ( θ ) 2 \frac{1-cos(\theta)}{2} 21?cos(θ)?

參數(shù)解釋:

d :兩點(diǎn)之間的距離(沿大圓,見(jiàn)球面距離);
r :球的半徑;
ψ 1 \psi_{1} ψ1? ψ 2 \psi_{2} ψ2? :點(diǎn) 1 的緯度和點(diǎn) 2 的緯度,以弧度制度量;
λ 1 \lambda_{1} λ1? λ 2 \lambda_{2} λ2?:點(diǎn) 1 的經(jīng)度和點(diǎn) 2 的經(jīng)度,以弧度制度量。
等號(hào)左邊的 d r \fracn5n3t3z{r} rd?:圓心角,單位是弧度。

所以,可以通過(guò)應(yīng)用反半正矢函數(shù)(如果可以查到值)或通過(guò)使用反正弦函數(shù)來(lái)解出d :
?????????? d = r ? a r c h a v ( h ) d=\sqrt[]{r*archav(h)} d=r?archav(h) ???????????????????=??2r*arcsin h \sqrt[]{h} h ?)

將h=hav d r \fracn5n3t3z{r} rd?代入后可得:
???ros gps,ROS2,GPS學(xué)習(xí),自動(dòng)駕駛,機(jī)器人,ubuntu,自動(dòng)駕駛
對(duì)于中短距離來(lái)說(shuō),半正矢公式是計(jì)算地球表面 GPS 坐標(biāo)之間距離的有用且相對(duì)準(zhǔn)確的方法,在距離較長(zhǎng)時(shí)其準(zhǔn)確性可能會(huì)降低。

增加回調(diào)函數(shù)

這里簡(jiǎn)單解釋一下gpsCallback回調(diào)函數(shù)的內(nèi)容,此處訂閱sensor_msgs::msg::NavSatFix數(shù)據(jù)格式的GPS話題進(jìn)行數(shù)據(jù)處理。

//將緯度和經(jīng)度值從度數(shù)轉(zhuǎn)換為弧度。
double rad(double d) 
{
	return d * 3.1415926 / 180.0;
}
void gps_callback(const sensor_msgs::msg::NavSatFix::SharedPtr gps_msg)
{
    if (!pose_init)
    {
        // Initialization code remains the same.
        //使用接收到的 GPS 消息中的緯度、經(jīng)度和高度f(wàn)alse進(jìn)行初始化,只初始化一次
        init_pose.latitude = gps_msg->latitude;
        init_pose.longitude = gps_msg->longitude;
        init_pose.altitude = gps_msg->altitude;
        init = true;
    }
    else
    {
        //計(jì)算當(dāng)前 GPS 位置與初始 GPS 位置之間的緯度和經(jīng)度變化
        double radLat1 ,radLat2, radLong1,radLong2,delta_lat,delta_long,x,y;
        double deltaLat_y ,deltaLong_x;
        deltaLat_x = 0; 
        deltaLong_y = 0;
        radLat1 = rad(init_pose.latitude);//初始化位置的緯度
        radLong1 = rad(init_pose.longitude);//初始化位置的經(jīng)度
        radLat2 = rad(gps_msg->latitude);//當(dāng)前位置的緯度
        radLong2 = rad(gps_msg->longitude);//當(dāng)前位置的經(jīng)度
        deltaLat = radLat2 - radLat1; 
        deltaLong = radLong2 - radLong1;
 
        // 代入公式進(jìn)行計(jì)算x的坐標(biāo)值
        x = 2 * asin(sqrt(pow(sin(delta_lat / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(deltaLong_y / 2), 2));
        
        //公式計(jì)算結(jié)果默認(rèn)為弧度,所以這里要轉(zhuǎn)換成m的單位
        x = x * EARTH_RADIUS * 1000; 

        //  代入公式進(jìn)行計(jì)算y的坐標(biāo)值
        y = 2 * asin(sqrt(pow(sin(deltaLat_x / 2), 2) + cos(radLat2) * cos(radLat2) * pow(sin(deltaLong / 2), 2));
        y = y * EARTH_RADIUS * 1000; // Convert to meters.

        // 將高度差計(jì)算為z的坐標(biāo)值
        double z = gps_msg->altitude - init_pose.altitude;

        //將計(jì)算得到的xyz值發(fā)布為ROS中的PoseStamped數(shù)據(jù),作為路徑發(fā)布
        
        ros_path_.header.frame_id = "path";
        ros_path_.header.stamp = rclcpp::Node::now();
        geometry_msgs::msg::PoseStamped pose;
        pose.header = ros_path_.header;
        pose.pose.position.x = x;
        pose.pose.position.y = y;
        pose.pose.position.z = z;
        ros_path_.poses.push_back(pose);
        state_pub_.publish(ros_path_);
    }
}

效果演示

使用nmea_navsat_driver驅(qū)動(dòng)啟動(dòng)GPS模塊,源碼鏈接:https://github.com/ros-drivers/nmea_navsat_driver/tree/ros2

ros2 launch nmea_navsat_driver nmea_serial_driver.launch.py

然后啟動(dòng)坐標(biāo)轉(zhuǎn)換節(jié)點(diǎn),將經(jīng)緯度數(shù)據(jù)從WGS-84 坐標(biāo)轉(zhuǎn)換到機(jī)器人真實(shí)世
界 xyz 坐標(biāo)系下(一般為東北天方向),以第一個(gè)經(jīng)緯度數(shù)據(jù)為原點(diǎn),不斷描繪實(shí)時(shí)經(jīng)緯度數(shù)據(jù)的位移方向,顯示為機(jī)器人運(yùn)行軌跡圖。

ros2 launch gps_path gps_path.launch.py

打開(kāi)rviz2,修改 Fixed Frame 為path,電機(jī)左下角[add],根據(jù)topic添加[gps_path]->path后,顯示效果為:
ros gps,ROS2,GPS學(xué)習(xí),自動(dòng)駕駛,機(jī)器人,ubuntu,自動(dòng)駕駛文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-771281.html

到了這里,關(guān)于GPS學(xué)習(xí)(一):在ROS2中將GPS經(jīng)緯度數(shù)據(jù)轉(zhuǎn)換為機(jī)器人ENU坐標(biāo)系,在RVIZ中顯示坐標(biāo)軌跡的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 騰訊地圖獲得地圖經(jīng)緯度數(shù)據(jù)進(jìn)行描邊

    騰訊地圖獲得地圖經(jīng)緯度數(shù)據(jù)進(jìn)行描邊

    登錄騰訊地圖?微信小程序JavaScript SDK | 騰訊位置服務(wù) ? 接口調(diào)用:直接瀏覽器調(diào)用就行 一,可以先通過(guò)查詢地區(qū)名字來(lái)獲得地區(qū)碼: https://apis.map.qq.com/ws/district/v1/search?key=你申請(qǐng)獲得keykeyword=梁溪區(qū) 二,用地區(qū)碼查詢描邊經(jīng)緯度: 你申請(qǐng)獲得key https://apis.map.qq.com/ws/distric

    2023年04月24日
    瀏覽(26)
  • 中國(guó)各省會(huì)城市經(jīng)緯度數(shù)據(jù)(附MATLAB代碼)

    北京市:北京;天津市:天津;上海市:上海;重慶市:重慶 ;河北?。菏仪f 山西省:太原 ;陜西省:西安 ;山東?。簼?jì)南;河南?。亨嵵?; 遼寧?。荷蜿?yáng) ;吉林?。洪L(zhǎng)春 ;黑龍江?。汗枮I ;江蘇?。耗暇?;浙江?。汉贾?;安徽?。汉戏?;江西省:南昌; 福建省

    2024年02月13日
    瀏覽(31)
  • STM32——定位模塊ATGM336H,數(shù)據(jù)解析,提取經(jīng)緯度

    STM32——定位模塊ATGM336H,數(shù)據(jù)解析,提取經(jīng)緯度

    ATGM336H定位模塊支持GPS系統(tǒng),BDS(北斗)系統(tǒng),GLONASS(俄羅斯)系統(tǒng),伽利略衛(wèi)星導(dǎo)航系統(tǒng)(歐盟)。這個(gè)模塊要拿到室外才能接收到信號(hào),且初次初始化或者隔太久時(shí)間沒(méi)有啟用會(huì)導(dǎo)致獲取定位信息的時(shí)間很長(zhǎng)。 可以使用中科微電子提供的集成軟件設(shè)置模塊,可以設(shè)置串口

    2023年04月11日
    瀏覽(25)
  • ElasticSearch - 根據(jù)經(jīng)緯度,簡(jiǎn)單搜索指定距離范圍內(nèi)的數(shù)據(jù)

    ElasticSearch - 根據(jù)經(jīng)緯度,簡(jiǎn)單搜索指定距離范圍內(nèi)的數(shù)據(jù)

    ES的地圖檢索方式 ES支持的地圖檢索方式有以下幾種; geo_distance geo_bounding_box geo_polygon 1、 geo_distance :直線距離檢索,如給定點(diǎn)A,要求返回地圖上距離點(diǎn)A三千米的商家(點(diǎn)外賣(mài)場(chǎng)景) 2、查找索引內(nèi)距離北京站(116.433733,39.908404)3000米內(nèi)的點(diǎn) geo_distance涉及的參數(shù)如下 location:確

    2024年02月14日
    瀏覽(17)
  • Python讀取.nc數(shù)據(jù)并提取指定時(shí)間、經(jīng)緯度維度對(duì)應(yīng)的變量數(shù)值

    Python讀取.nc數(shù)據(jù)并提取指定時(shí)間、經(jīng)緯度維度對(duì)應(yīng)的變量數(shù)值

    ??本文介紹基于 Python 語(yǔ)言的 netCDF4 庫(kù),讀取 .nc 格式的數(shù)據(jù)文件,并提取指定維(時(shí)間、經(jīng)度與緯度)下的變量數(shù)據(jù)的方法。 ??我們之前介紹過(guò) .nc 格式的數(shù)據(jù),其是 NetCDF (Network Common Data Form)文件的擴(kuò)展名,是一種常用的科學(xué)數(shù)據(jù)存儲(chǔ)格式,多用于存儲(chǔ)科學(xué)和工程領(lǐng)

    2024年03月08日
    瀏覽(36)
  • NCDC氣象數(shù)據(jù)的提取與處理(四):python批量讀取、寫(xiě)入nc數(shù)據(jù)經(jīng)緯度格點(diǎn)數(shù)值

    NCDC氣象數(shù)據(jù)的提取與處理(四):python批量讀取、寫(xiě)入nc數(shù)據(jù)經(jīng)緯度格點(diǎn)數(shù)值

    1.問(wèn)題描述: 2.思路: 3.實(shí)現(xiàn)過(guò)程: 3.1格點(diǎn)位置匹配 3.2寫(xiě)入表格 4.運(yùn)行效果 4.1打包站點(diǎn)信息 4.2讀取nc文件列表 4.3提取對(duì)應(yīng)格點(diǎn)的nc數(shù)據(jù) 4.4數(shù)據(jù)寫(xiě)入 NCDC的站點(diǎn)數(shù)據(jù)處理在之前三節(jié)里已經(jīng)介紹過(guò)了,但是NCDC的就那么幾種數(shù)據(jù)可能不能滿足日常使用,比如說(shuō)輻射數(shù)據(jù)他就沒(méi)有。

    2024年02月05日
    瀏覽(35)
  • ES 地圖經(jīng)緯度搜索

    ES 地圖經(jīng)緯度搜索

    ES中提供了一個(gè)數(shù)據(jù)類型 geo_point,這個(gè)類型就是用來(lái)存儲(chǔ)經(jīng)緯度的。 創(chuàng)建一個(gè)帶geo_point類型的索引,并添加測(cè)試數(shù)據(jù) ?

    2024年02月12日
    瀏覽(27)
  • 經(jīng)緯度笛卡爾雜談

    當(dāng)然可以!將經(jīng)緯度坐標(biāo)轉(zhuǎn)換為笛卡爾坐標(biāo)系的公式如下: x = ( R + h ) cos ? ? cos ? θ ? y = ( R + h ) cos ? ? sin ? θ ? z = ( R + h ) sin ? ? begin{aligned} x = (R+h)cosphicostheta y = (R+h)cosphisintheta z = (R+h)sinphi end{aligned} x ? = ( R + h ) cos ? cos θ ? y ? = ( R + h ) cos ? sin θ ?

    2024年02月01日
    瀏覽(20)
  • 微信小程序?qū)W習(xí)實(shí)錄6(百度經(jīng)緯度采集、手動(dòng)調(diào)整精度、H5嵌入小程序、百度地圖jsAPI、實(shí)時(shí)定位、H5更新自動(dòng)刷新)

    微信小程序?qū)W習(xí)實(shí)錄6(百度經(jīng)緯度采集、手動(dòng)調(diào)整精度、H5嵌入小程序、百度地圖jsAPI、實(shí)時(shí)定位、H5更新自動(dòng)刷新)

    viewport,手機(jī)端的適配; layui,手機(jī)端界面UI; jweixin-1.6.0,H5與微信小程序通信的API接口文件 getBdGeo ();定位封裝函數(shù); marker.addEventListener(\\\'dragend\\\', function () {}, 監(jiān)聽(tīng)標(biāo)注事件,手動(dòng)調(diào)整景點(diǎn) getCurrentPosition, 加載即自動(dòng)采集當(dāng)前位置的經(jīng)緯度信息和城市地址信息; 通過(guò)web-view

    2024年02月05日
    瀏覽(30)
  • 前端Vue騰訊地圖SDK Api經(jīng)緯度解析為地址信息Geocoding 可用于定位經(jīng)緯度信息解析為地址

    前端Vue騰訊地圖SDK Api經(jīng)緯度解析為地址信息Geocoding 可用于定位經(jīng)緯度信息解析為地址

    前端Vue騰訊地圖SDK Api經(jīng)緯度解析為地址信息Geocoding 可用于定位經(jīng)緯度信息解析為地址,?下載完整代碼請(qǐng)?jiān)L問(wèn)uni-app插件市場(chǎng)地址:https://ext.dcloud.net.cn/plugin?id=13311 效果圖如下: 使用方法 HTML代碼實(shí)現(xiàn)部分

    2024年02月11日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包