RPLIDAR A2 rviz顯示雷達資料教程
扣扣技術交流群:460189483
1. 簡介
RPLIDAR A2的執行教程在這裡不做重點講解,官方教程已經介紹的很詳細,在這裡跟大家解釋下例程中是怎麼在RVIZ中事實顯示影像的。
執行下面這句話時,可以看到rviz自動開啟,並且在影像中顯示出了鐳射雷達掃描到的資料資訊,那麼鐳射雷達的資料是如何傳遞到rviz中的那?
roslaunch rplidar_ros view_rplidar.launch
2. view_rplidar.launch分析
開啟view_rplidar.launch
<launch>
<include file="$(find rplidar_ros)/launch/rplidar.launch" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find rplidar_ros)/rviz/rplidar.rviz" />
</launch>
我們發現在其中呼叫了rplidar.launch
,使用include
命令是為了減少冗餘程式碼的數量,簡化程式碼。rplidar.launch
如下
<launch>
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/ttyUSB0"/>
<param name="serial_baudrate" type="int" value="115200"/>
<param name="frame_id" type="string" value="laser"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
</node>
</launch>
在這個launch檔案中可以清楚的看到,在其中定義了串列埠的名字"/dev/ttyUSB0"
,波特率"115200"
等等一系列的串列埠配置資訊,正是由於這些配置資訊,才可以在rplidarNode
節點中獲取鐳射雷達傳送過來的資料資訊。
3.分析如何傳送資料到rviz
看到這裡可能很多朋友會比較疑惑是如何傳送資料到rviz平臺的,在此我們開啟rplidar_ros/src/node.cpp
檔案,在193行左右可以發現這個訊息釋出者的節點名字和型別,型別和我們以往使用的不太一樣。
ros::Publisher scan_pub = nh.advertise<sensor_msgs::LaserScan>("scan", 1000);
沒錯,這個<sensor_msgs::LaserScan>
型別就是rviz中LaserScan
功能模組定義的標準資訊格式
我們可以在命令列中輸入下列命令來檢視LaserScan的資料格式
rosmsg show sensor_msgs/LaserScan
- 1
執行結果如圖所示:
這個時候我們再來對比rplidar_ros/src/node.cpp
檔案中的void publish_scan()
函式
void publish_scan(ros::Publisher *pub,
rplidar_response_measurement_node_t *nodes,
size_t node_count, ros::Time start,
double scan_time, bool inverted,
float angle_min, float angle_max,
std::string frame_id)
{
static int scan_count = 0;
sensor_msgs::LaserScan scan_msg;
scan_msg.header.stamp = start;
scan_msg.header.frame_id = frame_id;
scan_count++;
bool reversed = (angle_max > angle_min);
if ( reversed ) {
scan_msg.angle_min = M_PI - angle_max;
scan_msg.angle_max = M_PI - angle_min;
} else {
scan_msg.angle_min = M_PI - angle_min;
scan_msg.angle_max = M_PI - angle_max;
}
scan_msg.angle_increment =
(scan_msg.angle_max - scan_msg.angle_min) / (double)(node_count-1);
scan_msg.scan_time = scan_time;
scan_msg.time_increment = scan_time / (double)(node_count-1);
scan_msg.range_min = 0.15;
scan_msg.range_max = 8.0;
scan_msg.intensities.resize(node_count);
scan_msg.ranges.resize(node_count);
bool reverse_data = (!inverted && reversed) || (inverted && !reversed);
if (!reverse_data) {
for (size_t i = 0; i < node_count; i++) {
float read_value = (float) nodes[i].distance_q2/4.0f/1000;
if (read_value == 0.0)
scan_msg.ranges[i] = std::numeric_limits<float>::infinity();
else
scan_msg.ranges[i] = read_value;
scan_msg.intensities[i] = (float) (nodes[i].sync_quality >> 2);
}
} else {
for (size_t i = 0; i < node_count; i++) {
float read_value = (float)nodes[i].distance_q2/4.0f/1000;
if (read_value == 0.0)
scan_msg.ranges[node_count-1-i] = std::numeric_limits<float>::infinity();
else
scan_msg.ranges[node_count-1-i] = read_value;
scan_msg.intensities[node_count-1-i] = (float) (nodes[i].sync_quality >> 2);
}
}
pub->publish(scan_msg);
}
在函式中可以清楚的看到有對下列變數進行賦值操作
std_msgs/Header header
uint32 seq
time stamp
string frame_id
float32 angle_min
float32 angle_max
float32 angle_increment
float32 time_increment
float32 scan_time
float32 range_min
float32 range_max
float32[] ranges
float32[] intensities
因此可以斷定正是通過對這些資料賦值,然後再講訊息釋出出去,rviz中的LaserScan便會自動訂閱這些訊息,從而將鐳射雷達中的資料顯示出來,如果還是有疑問的話大家可以在執行roslaunch rplidar_ros view_rplidar.launch
的同時,在行的命令列中輸入下列命令檢視ROS話題發發布訂閱情況:
rosrun rqt_graph rqt_graph
在這個圖中可以清楚的看到程式只發布了一個topic——”/scan”,同時在我們的rviz中我們也可以看到在”topic”選項後面對應的是”/scan”,即我們的分析完全正確。
相關文章
- 英偉達:資料顯示顯示卡越好吃雞水平越高
- 雷達資料傳輸質量分析
- Juniper:資料顯示全球語音助理達到25億個
- element table不顯示任何資料,無資料倒是顯示出無資料的了
- Mac顯示/不顯示隱藏檔案教程!Mac
- win10如何設定資料夾預設大圖示顯示_win10系統設定資料夾預設以大圖示顯示教程Win10
- 資料顯示設定攻略
- macbook 外接顯示器教程Mac
- 雷達氣象學(4)——雷達引數和雷達氣象方程
- 北醒鐳射雷達模組 資料彙總
- 爬取Arcconf文件教程並自動生成Gitbook文件顯示 - 資料獲Git
- 資料庫下表和列名顯示資料庫
- window10怎麼顯示資料夾大小 win10 如何顯示資料夾大小Win10
- win10 如何顯示資料夾大小 win10如何直接顯示資料夾大小Win10
- 資料分析軟體Power BI探索資料教程(五)——如何全屏顯示並編輯磁貼
- 雷達模組開發學習教程(一)——檢測人員資訊
- PVE容器直通顯示卡教程
- [20181207]sqlplus下顯示資料精度.txtSQL
- win10 如何顯示隱藏資料夾_win10 如何顯示隱藏的資料夾Win10
- 微信小程式資料資料繫結顯示NaN微信小程式NaN
- 鐳射雷達常用的資料處理軟體推薦
- win10怎麼顯示隱藏資料夾 win10顯示隱藏資料夾的方法Win10
- 雷達融合策略
- 英偉達控制皮膚沒有顯示設定 英偉達顯示設定不可用
- Android MPAndroidChart LineChart 顯示資料格式化Android
- 資料顯示:美元主導比特幣交易比特幣
- 使用終端虛擬示波器顯示資料
- Linux基礎命令---mysqlshow顯示資料庫LinuxMySql資料庫
- 基於IIC介面的OLED資料顯示
- mac隱藏資料夾怎麼顯示?Mac
- 雷達氣象學(3)——雷達電磁波的折射
- 實用教程丨如何將實時資料顯示在前端電子表格中(一)前端
- 資料顯示2021財年蘋果App Store廣告營收或達50億美元蘋果APP營收
- TI 多模雷達1843毫米波雷達做自動泊車(用了8個雷達)
- 雷達氣象學(2)——雷達電磁波的衰減
- win10如何設定自動顯示資料夾大小_win10怎麼顯示資料夾的大小Win10
- win10資料夾圖示不正常顯示怎麼辦_win10電腦資料夾圖示顯示異常的解決方法Win10
- [20191104]sqlplus下顯示資料精度2.txtSQL