ROS使用笔记

1. 提取bag中固定topic或者固定时间段数据

rosbag filter my.bag out.bag "topic == '/tf' or topic == '/tf2'"
rosbag filter my.bag out.bag "t.to_sec() >= 123444.77 and t.to_sec() <= 234545.88"

2. 提取pcd数据

rosrun pcl_ros bag_to_pcd <input_file.bag> <topic> <output_directory>

// save pointcloud2 to current diectory
rosrun pcl_ros pointcloud_to_pcd input:=/topic_name

3. 记录数据

rosbag record /topic_name1 /topic_name2 /topic_name3
rosbag record -O filename.bag /topic_name1

4. service & action

ROS中的topic为同步通讯,service为异步通讯机制,service在要求异步而且响应时间不定的场景下有先天的劣势,如果服务端迟迟没有响应,那么客户端程序将处于阻塞状态,直到超时,这会使操作变得相当耗时。
action实现了一种类似于service的请求/响应通讯机制,区别在于action带有反馈机制,用来不断向客户端反馈任务的进度,并且还支持在任务中途中止运行。 客户端给服务端抛出一个目标,然后客户端就可以去干别的事情了,在任务执行期间,客户端会以消息的形式,周期性地接收到来自服务端的进度反馈,如果没有终止任务的话这个过程会一直延续到收到最终的结果。当然也可以随时终止当前的操作,开始一个全新的操作。

5. roslaunch文件

<arg name="projfolder" default="/home/joe/workspace/testData/playground"/>

<param name="projpath"  type="string" value="$(arg projfolder)/"/>

<node pkg="rosbag" type="play" name="player" output="screen" args="--clock $(arg projfolder)/20190311playgroundloopcut.bag --topics /velodyne_points" />

有关param的全局与局部获取

6. 自定义消息

//1 add message/service file
add_message_files(DIRECTORY msg FILES test.msg)
add_service_files(DIRECTORY srv FILES test.srv)
//2 add dependencies 在devel/include中生成.h头文件
generate_messages(DEPENDENCIES std_msgs geometry_msgs)
//3 add depends
catkin_package(INCLUDE_DIRS .../*头文件*/ 
CATKIN_DEPENDS message_generation message_runtime .../*ros依赖包*/
DEPENDS .../*非ros依赖包*/) //需要message_generation生成C++或Python能使用的代码,需要message_runtime提供运行时的支持
···
include_directories(... )
link_directories(... )
···
add_executable()
target_link_libraries()
// a)
add_dependencies(test ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp) // 编译消息 
// b)
// find_packages(catkin REQUIRED COMPONENTS test_msgs)
add_dependencies(test ${catkin_EXPORTED_TARGETS}/**/ test_msgs_gencpp) // 使用自定义消息, 调用同一工作空间的自定义消息类型时注明依赖关系,防止发生头文件找不到的报错

Ref-1
Ref-2 浅谈catkin

7. from raw velodyne_packets to velodyne_points

rosbag play XX.bag /raw/data_packets:=/velodyne_packets  // remap topic name
rosrun velodyne_pointcloud cloud_node _calibration:=calibration.yaml

wiki

7.1 from *.pcap file to rosbag

# 读取PCAP文件
rosrun velodyne_driver velodyne_node _model:=VLP16 _pcap:=/your/pcap/path/data.pcap _read_once:=true
# 转换
rosrun velodyne_pointcloud cloud_node _calibration:=calibration.yaml
# 录包
rosbag record -O file.bag /velodyne_points

matlab读取pcap

8. rqt_bag查看数据

rqt_bag sample.bag

https://blog.csdn.net/orange_littlegirl/article/details/99304550

9. 引用另一包内库文件(devel/lib/libXXX.so)

// 在CMakeLists中添加
find_package(catkin REQUIRED COMPONENTS XXX )

// install库文件到ros空间下
install(
        TARGETS
        XXX
        ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
        RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
        LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
)
// install headers
install(DIRECTORY include/pclomp
        DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION})
# 在package.xml文件中添加依赖
<build_depend>XXX</build_depend>
  <run_depend>XXX</run_depend>

10. escalating to SIGTERM

运行ros节点执行ctrl+c后进程会转而执行rosspin()后面的程序,但是如果在一定时间内程序没有执行完毕,进程会强制退出,并抛出“escalating to
SIGTERM
”错误,为了解决此问题,可以修改/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch路径下的nodeprocess.py文件,将该文件第48行的“_TIMEOUT_SIGINT
= 15.0 #seconds
”中的15秒改为您期望运行的最大时间。

11. conflicting declaration ‘typedef struct LZ4_stream_t LZ4_stream_t’解决

sudo mv /usr/include/flann/ext/lz4.h /usr/include/flann/ext/lz4.h.bak
sudo mv /usr/include/flann/ext/lz4hc.h /usr/include/flann/ext/lz4.h.bak
 
sudo ln -s /usr/include/lz4.h /usr/include/flann/ext/lz4.h
sudo ln -s /usr/include/lz4hc.h /usr/include/flann/ext/lz4hc.h

12. 查看数据frame

rostopic echo /topic | grep frame_id

13. ros中的时间

播放rosbag时,若参数/use_sim_time 为true,则此时

  • ros::WallTime::now()为当前的真实时间,也就是墙上的挂钟时间,一直在走。
  • ros::Time::now()为rosbag当时的时间,是由bag中/clock获取的。是仿真时间。使用模拟时间时,当 /clock节点接受到第一条消息时,now() 返回时刻 0,此时客户端还不知道时钟时间。
# 检测到时钟错误
find . -type f -exec touch {} /;
find . -type f -print | xargs touch

14. 播放rosbag使用-k参数,节点才会继续运行

15. rosbag play -s [Sec]

使包从据开始时间【Sec】处开始运行

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值