ROS的一些命令(一)
-
启动:roscore
-
查看数据包详细信息: rosbag info *.bag
-
查看当前所有topic:rostopic list
-
查看当前launch节点:rqt_graph
-
过滤当前节点:rostopic echo /livox/lidar | grep frame_id
-
播放设置:rosbag play -s/u/r/l *.bag
s(开始播放) u(前x秒开始播放) r(倍速播放) l(循环播放)
-
rosbag2pcd: 在rosbag数据包所在文件夹下新建pcd文件夹
rosrun pcl_ros bag_to_pcd <*.bag> <output_directory>
例子:rosrun pcl_ros bag_to_pcd test.bag /points_raw ./pcd
or:bagdump + xx.bag(直接输出pcd文件和rgb图像)
-
从一个bag 包中截取某段时间内的数据rosbag filter 20200918_173724.bag output.bag “t.to_sec() >= 1600421904591 and t.to_sec() <= 1600421922726”
-
从bag包中截取相应的话题以及相应的时间段rosbag filter input.bag output.bag “(topic == ‘/velodyne_point_cloud’ or topic ==‘/visensor/imu’ or topic == ‘/visensor/left/image_raw’) and (t.to_sec() >= 1506117983.884751 and t.to_sec() <= 1506118069.884751)”
-
rosbag生成pcd文件:pcl_viewer -fc 255,0,0 XXX.pcd
launch文件(aunch 文件是一个 XML 格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。)
<launch>
<node name="demo" pkg="demo_package"
type="demo_pub" output="screen"/>
<node name="demo" pkg="demo_package"
type="demo_sub" output="screen"/>
</launch>
创建编译ros功能包
mkdir -p pcl_ws/src
cd pcl_ws
catkin_make
source devel/setup.bash
cd src
catkin_create_pkg pcl_test roscpp sensor_msgs pcl_ros
(新建了一个workspace,用于学习PCL,同时新建了一个名为pcl_test的package,这个ROS包依赖于roscpp,sensor_msgs, pcl_ros这几个包)
在pcl_test/src目录下新建pcl_test_node.cpp;此文件仅包含main函数,是节点的入口。
编写头文件include/pcl_test_core.h以及pcl_test_core.cpp
写一个launch文件pcl_test.launch来启动这个节点
回到工作空间路径下,使用catkin_make进行编译 catkin_make
启动这个节点roslaunch pcl_test pcl_test.launch
打开第三个终端,启动rviz rosrun rviz rviz -f velodyne
新建终端,并运行测试bag: rosbag play --clock test.bag
text.bag包转pic(python)
#coding:utf-8
import roslib;
import rosbag
import rospy
import cv2
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
from cv_bridge import CvBridgeError
path='/' #存放图片的位置
class ImageCreator():
def __init__(self):
self.bridge = CvBridge()
with rosbag.Bag('test.bag', 'r') as bag: #要读取的bag文件;
for topic,msg,t in bag.read_messages():
if topic == "/image_raw": #图像的topic;
try:
cv_image = self.bridge.imgmsg_to_cv2(msg,"bgr8")
except CvBridgeError as e:
print e
timestr = "%.6f" % msg.header.stamp.to_sec()
#%.6f表示小数点后带有6位,可根据精确度需要修改;
image_name = timestr+ ".jpg" #图像命名:时间戳.jpg
cv2.imwrite(path+image_name, cv_image) #保存;
if __name__ == '__main__':
#rospy.init_node(PKG)
try:
image_creator = ImageCreator()
except rospy.ROSInterruptException:
pass