ROS は KITTI データセットをロードし、rviz に表示します (1)

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

おすすめ

転載: blog.csdn.net/m0_37605642/article/details/131943899