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”,即我們的分析完全正確。
相關文章
- 音樂雷達怎麼用?音樂雷達Shazam使用教程
- 雷達報文模擬回放/雷達資料模擬發生器
- 雷達資料傳輸質量分析
- 最新資料顯示 iOS 8普及率達68%iOS
- 資料顯示安卓手機銷量將達到10億安卓
- 北醒鐳射雷達模組 資料彙總
- 雷達氣象學(4)——雷達引數和雷達氣象方程
- Juniper:資料顯示全球語音助理達到25億個
- element table不顯示任何資料,無資料倒是顯示出無資料的了
- Mac顯示/不顯示隱藏檔案教程!Mac
- 資料顯示設定攻略
- win10如何設定資料夾預設大圖示顯示_win10系統設定資料夾預設以大圖示顯示教程Win10
- 雷達融合策略
- macbook 外接顯示器教程Mac
- 雷達氣象學(3)——雷達電磁波的折射
- Actix:資料顯示蘋果裝置佔3G流量消耗高達59%蘋果
- 英國《每日郵報》:資料顯示每年懶死的人多達三百萬
- 鐳射雷達常用的資料處理軟體推薦
- 顯示資料庫所有引數資料庫
- 雷達氣象學(2)——雷達電磁波的衰減
- win10 如何顯示資料夾大小 win10如何直接顯示資料夾大小Win10
- window10怎麼顯示資料夾大小 win10 如何顯示資料夾大小Win10
- 繪製雷達圖
- 微信小程式資料資料繫結顯示NaN微信小程式NaN
- BI:資料顯示Twitter約11.5%的機器使用者 達2400萬
- 資料顯示20~24週歲日本男性獨身單身率高達94.2%
- DualShockers:資料顯示顯示卡市場份額NVIDIA佔達82% AMD佔18%
- 由iphone12說說鐳射雷達 FMCW鐳射雷達iPhone
- 爬取Arcconf文件教程並自動生成Gitbook文件顯示 - 資料獲Git
- 數碼管顯示動態資料
- perf 的資料用火焰圖顯示
- ASPxGridView的資料繫結顯示View
- 自定義progressBar顯示靜態資料
- 動態顯示資料庫圖片資料庫
- 修改資料庫的日期顯示格式資料庫
- struts + hibernate 資料集合如何顯示
- 顯示資料庫中表的主鍵資料庫
- 雷達模組開發學習教程(一)——檢測人員資訊