主要包含兩個(gè)方面:
- 小車?yán)锍逃?jì)數(shù)據(jù)的上傳與接收
- 控制指令的下發(fā)與接收
1.原始消息內(nèi)容
在ROS中,里程計(jì)數(shù)據(jù)主要包括機(jī)器人的位姿(位置和姿態(tài)),以及機(jī)器人的速度(線速度和角速度)。對(duì)于本實(shí)驗(yàn)所用到的麥輪地面機(jī)器人,只需要知道機(jī)器人的x軸與y軸線速度、x軸與y軸位置、z軸角速度、偏航角即可。
由于對(duì)速度積分可以得到位置,對(duì)角速度積分可以得到角度,所以STM32端上傳的里程計(jì)數(shù)據(jù)只需要包括機(jī)器人的 x軸與y軸線速度、z軸角速度 ,ROS端在接收到這些數(shù)據(jù)后,進(jìn)行積分即可得到位置和角度。
另外,在本實(shí)驗(yàn)用到的STM32端集成了一個(gè)ICM20602姿態(tài)傳感器,其中內(nèi)置了姿態(tài)解算算法,可以獲得準(zhǔn)確的機(jī)器人姿態(tài)數(shù)據(jù),因此本實(shí)驗(yàn)使用STM32端上傳的偏航角來代替對(duì)角速度積分得到的航向角。
所以STM32上傳的里程計(jì)數(shù)據(jù)包括機(jī)器人的x軸線速度、y軸線速度、z軸角速度、偏航角。
與里程計(jì)數(shù)據(jù)類似,對(duì)于麥輪地面機(jī)器人,控制指令只需要包括機(jī)器人的x軸速度、y軸速度、z軸角速度即可,機(jī)器人坐標(biāo)系如圖所示:
2.轉(zhuǎn)換為字節(jié)數(shù)組
知道了消息的原始數(shù)據(jù),還需要將它轉(zhuǎn)換成傳輸效率更高的字節(jié)數(shù)組,如圖:
在C/C++中,有很多種將原始數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組的方法,其中一種常用的方法是使用聯(lián)合體(union)。
聯(lián)合體的所有成員占用同一段內(nèi)存,修改一個(gè)成員會(huì)影響其余成員,如果要實(shí)現(xiàn)一個(gè)float數(shù)據(jù)與字節(jié)數(shù)組的互相轉(zhuǎn)換,我們可以定義如下的聯(lián)合體:
typedef union{
float data;
uint8_t data8[4];
}data_u;
這個(gè)聯(lián)合體中有兩個(gè)成員,一個(gè)是32位的float數(shù)據(jù)data,另一個(gè)同樣是占據(jù)了32位字長的字節(jié)數(shù)組data8,根據(jù)聯(lián)合體的性質(zhì),這兩個(gè)成員所在的內(nèi)存位置是一樣的,也就是說,改變其中任何一個(gè)成員的值,另一個(gè)也會(huì)被改變。
利用這個(gè)性質(zhì),我們就可以實(shí)現(xiàn)float與字節(jié)數(shù)據(jù)的互相轉(zhuǎn)換。
3.添加幀頭和校驗(yàn)碼
本實(shí)驗(yàn)選擇常用的0xAA 0x55作為幀頭,同時(shí)對(duì)原始數(shù)據(jù)轉(zhuǎn)換得到的字節(jié)數(shù)組進(jìn)行求和,將結(jié)果保存在1字節(jié)數(shù)據(jù)中,作為校驗(yàn)碼。
準(zhǔn)備工作:
1.在ROS端安裝serial功能包
sudo apt-get install ros-melodic-serial
2.在ROS端創(chuàng)建一個(gè)功能包,命名為xrobot,添加依賴項(xiàng)roscpp rospy tf serial
-
機(jī)器人
+關(guān)注
關(guān)注
213文章
29748瀏覽量
212972 -
通信
+關(guān)注
關(guān)注
18文章
6206瀏覽量
137843 -
STM32
+關(guān)注
關(guān)注
2293文章
11032瀏覽量
365108 -
ROS
+關(guān)注
關(guān)注
1文章
288瀏覽量
17757
發(fā)布評(píng)論請(qǐng)先 登錄
rosserial、ros_lib移植到STM32講解 精選資料分享
小車底盤硬件開源自主導(dǎo)航小車MickX4
ROS與STM32是如何進(jìn)行通信的
最實(shí)用的STM32和ROS機(jī)器人的串口通信方案
移動(dòng)機(jī)器人底盤主要包含哪些設(shè)備
如何完成ROS與STM32之間的串口通信呢
如何搭建實(shí)體機(jī)器人ros底盤
移動(dòng)通信電源技術(shù)要求和試驗(yàn)方法
移動(dòng)通信系統(tǒng)優(yōu)化的范疇和內(nèi)容
ROS與STM32通信

ROS與移動(dòng)底盤通信教程
ROS移動(dòng)機(jī)器人的通信接口電路設(shè)計(jì)

ROS1的通信架構(gòu)的基礎(chǔ)通信方式及相關(guān)概念

ROS通信接口機(jī)制介紹

評(píng)論