1. 参考資料
ROS は、kitti データセットの画像をロードして画像トピックを公開し、rivz で表示します。
ROS は、kitti データセットの LIDAR 点群データをロードし、rivz で表示します。
2. ROS は KITTI データセットの画像データをロードします
ROS は kitti データセットの画像データをロードし、rviz に表示します。
1. kitti データセットをダウンロードする
KITTI データセットの RawData データをダウンロードして解凍します。
2011_10_03_drive_0027_sync.zip
2011_10_03_calib.zip
ファイルのディレクトリ構造
.
├── 2011_10_03
│ ├── 2011_10_03_drive_0027_sync
│ │ ├── image_00
│ │ ├── image_01
│ │ ├── image_02
│ │ ├── image_03
│ │ ├── oxts
│ │ └── velodyne_points
│ ├── calib_cam_to_cam.txt
│ ├── calib_imu_to_velo.txt
│ └── calib_velo_to_cam.txt
2. ワークスペースを作成する
# 创建目录,用于存储ROS工作空间
mkdir -p ~/catkin_ws/src
# 初始化工作空间
cd ~/catkin_ws/src
catkin_init_workspace
# 编译工作空间
cd ~/catkin_ws
catkin_make
3. 環境変数を設定する
# 临时生效
source ~/catkin_ws/devel/setup.bash
# 永久生效
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
4. 機能パッケージを作成する
# 创建功能包
cd ~/catkin_ws/src
catkin_create_pkg kitti_tutorial roscpp rospy std_msgs
# 编译功能包,生成 build、devel 文件夹
cd ~/catkin_ws
catkin_make
5. ソースコードを編集する
kitti_tutorial 関数パッケージ ディレクトリに入り、scripts ディレクトリを追加して、Python ファイルを編集します。
cd ~/catkin_ws/src/kitti_tutorial
mkdir scripts
# 完成源代码之后,修改python文件的权限
chmod +x kitti.py
kitti.py
#!/usr/bin/env python
# coding:utf-8
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2
import os
DATA_PATH = "/media/yoyo/U/2011_10_03/2011_10_03_drive_0027_sync"
if __name__ == "__main__":
rospy.init_node("kitti_node", anonymous=True)
cam_pub = rospy.Publisher("kitti_cam", Image, queue_size=10)
bridge = CvBridge()
rate = rospy.Rate(10)
frame = 0
while not rospy.is_shutdown():
img = cv2.imread(os.path.join(DATA_PATH, 'image_02/data/%010d.png'%frame))
cam_pub.publish(bridge.cv2_to_imgmsg(img, 'rgb8'))
rospy.loginfo("camera image published")
rate.sleep()
frame += 1
frame %= 154
パラメータの説明
- ノード名:
kitti_node
; - 公開されたトピック名:
kitti_cam
、データ型はImage
; CvBridge()
: opencv と ros 間の画像フォーマット変換;
6. 設定ファイルの編集
ros 関数パッケージ ディレクトリに入り、関数パッケージ内のファイルを編集しますCMakeLists.txt
。
CamkeList.txt
catkin_install_python(PROGRAMS scripts/kitti.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
7. コンパイルと実行
ワークスペース ディレクトリに入り、ワークスペースを再コンパイルします。
cd ~/catkin_ws
catkin_make
helloworld プログラムを実行します。
# 打开新终端,启动roscore
roscore
# 如果没有设置环境变量,则source环境变量
source ~/catkin_ws/devel/setup.bash
# 打开新终端,启动节点,运行helloworld程序
cd ~/catkin_ws
rosrun kitti_rutorial kitti.py
8.rviz表示を開始します
rosrun rviz rviz
yoyo@yoyo:~/catkin_ws$ rosrun rviz rviz
[ INFO] [1690354820.980297976]: rviz version 1.12.17
[ INFO] [1690354820.980329927]: compiled against Qt version 5.5.1
[ INFO] [1690354820.980337661]: compiled against OGRE version 1.9.0 (Ghadamon)
[ INFO] [1690354821.111348690]: Stereo is NOT SUPPORTED
[ INFO] [1690354821.111407271]: OpenGl version: 3 (GLSL 1.3).
3. ROS は KITTI データセットの LIDAR 点群データをロードします
ROS は、KITTI データセットの LIDAR 点群データをロードし、rviz に表示します。
この章の手順は前章と同様ですが、重要な点と相違点のみを記載します。詳細については、前章を参照してください。
1. ソースコードを編集する
kitti2pcl.py
#!/usr/bin/env python
# coding:utf-8
import rospy
import os
import numpy as np
from sensor_msgs.msg import PointCloud2
import sensor_msgs.point_cloud2 as pcl2
from std_msgs.msg import Header
DATA_PATH = "/media/yoyo/U/2011_10_03/2011_10_03_drive_0027_sync"
if __name__ == "__main__":
# 初始化节点
rospy.init_node("kitti_node", anonymous=True)
# 实例化发布者
pcl_pub = rospy.Publisher("kitti_pcl", PointCloud2, queue_size=10)
rate = rospy.Rate(10)
frame = 0
while not rospy.is_shutdown():
pcl = np.fromfile(os.path.join(DATA_PATH, 'velodyne_points/data/%010d.bin'%frame), dtype=np.float32).reshape(-1, 4)
header = Header()
header.stamp = rospy.Time.now()
header.frame_id = 'map'
# 发布消息
pcl_pub.publish(pcl2.create_cloud_xyz32(header, pcl[:,:3]))
rospy.loginfo("published")
rate.sleep()
frame += 1
frame %= 154
パラメータの説明
- ノード名: kitti_node;
- 公開されたトピック名: kitti_pcl、データ型は PointCloud2;
- bin ファイルのデータには、各行に 4 つの数字があり、それぞれ xyz と反射強度情報を表します。
2. 設定ファイルの編集
ros 関数パッケージ ディレクトリに入り、関数パッケージ内のファイルを編集しますCMakeLists.txt
。
CamkeList.txt
catkin_install_python(PROGRAMS scripts/kitti2pcl.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
3.rviz表示を開始します
4. よくある質問
質問:[rosrun] Couldn't find executable named kitti.py
yoyo@yoyo:~/catkin_ws$ rosrun kitti_tutorial kitti.py
[rosrun] Couldn't find executable named kitti.py below /home/yoyo/catkin_ws/src/kitti_tutorial
[rosrun] Found the following, but they're either not files,
[rosrun] or not executable:
[rosrun] /home/yoyo/catkin_ws/src/kitti_tutorial/scripts/kitti.py
错误原因:
没有给 kitti.py 文件添加权限
解决办法:
给 kitti.py 文件添加权限
chmod +x kitti.py