ROS回顾学习(8): 项目研究中遇到问题和难点记录

1.rosrun 找不到节点,或不存在该节点

	// 查看CMakeLists.txt,确保声明顺序如下(编译是"catkin_make"):
	
	find_package()
	catkin_package()
	include_directories()
	add_executable()
	target_link_libraries()
	

2.rosrun 运行参数添加到launch文件中运行

	N1: ros::init(argc, argv, "imu2txt");
		ros::NodeHandle nh("~");
		std::string file_name;
		nh.param<std::string>("file_name", file_name, "./imu_data.txt");
	
	放入launch文件中:
	<launch>
    	<node name="imu2txt" pkg="data2txt" type="imu2txt" respawn="false" output="screen" >
        	<param name="file_name"         type="string" value="/home/night_fury/Documents/record_bags/calibration/imudata_to_wall.txt"/>  
    	</node>
	</launch>
	
	N2: argc=3  
		argv[0]="map_server"  
		argv[1]="-f"  
		argv[0]="test"  
	
	放入launch文件中(如参考文献1):
	<launch>
    	<node name="map_server" pkg="map_server" type="map_server"  args="$(find costmap_2d)/test/willow-full-0.025.pgm 0.025" />
    	<node name="rosplay" pkg="rosbag" type="play"
        args="-s 5 -r 1 --clock --hz=10 $(find costmap_2d)/test/simple_driving_test_indexed.bag" />
	</launch>

3.Nodelet

待学习-更新

nodelet待学习更新

4.rosbag 数据包保存

	"记录部分话题数据"
	$: rosbag record -O rs_camera_test_01.bag /D435/aligned_depth_to_color/image_raw /D435/color/image_raw /D435/color/camera_info /T265/odom/sample /tf_static /tf
	
	"查看rosbag的文件信息" 
	$: rosbag info  rs_camera_test_01.bag
	
	"记录所有话题数据"
	$: rosbag record -a
	
	rosbag play -l  ***.bag   ## 循环播放数据
	
	"播放数据包文件"
	$: rosbag play rs_camera_test_01.bag
	
	"OTHERWISE: 若是播放数据时遇到时间不统一时,则采用仿真时间如下"
	$: rosbag play --clock file.bag
	或: $: rosparam set /use_sim_time true
____________________________________________________________________
	Q1: rosbag 好像无法记录机器人的模型文件?

	#局限性
	#rosbag只是简单对数据进行记录和回放,如果节奏发生改变,很可能会引起接收端的一些错误,而且它并没有与接收方进行任何的"交互"。

5.如何更改rostopic的发布频率

	#有时候数据发送太快也不是一件好事,除了在源程序中修改消息的发布速率,还有什么方法可以修改topic的更新频率呢?
	
	ROS提供了一种工具" topic_tools/throttle ", 它能够在不修改任何源文件的条件下修改任意话题的更新速率!
	
	// ubuntu16.04 下安装
	sudo apt-get install ros-kinetic-topic-tools
	
	// 使用很简单
	// rosrun topic_tools  throttle messages <intopic> <msgs_per_sec> [outtopic]
	rosrun topic_tools throttle messages base_scan 1.0 
	
	// 若不指定输出改变频率之后的话题,则默认话题名称为 [your_topic]_throttle, 比如base_scan_throttle
	
	// 另外,若保持前后话题一样,那么发布频率将会诡异的叠加.., 官网中没有谈到这点可以增加话题的发布频率..., 
	// 不过大家可以试试,确实可以增加,但是效果如何看个人了。。。

6.ROS中多线程调用和执行

	"在ROS中回调函数与多线程相对应,而ROS中有一个针对多线程运行的函数(详情见参考链接[3])"
	SO1: single-thread Spinning, 在ros中单线程就是靠ros::spin() 和ros::spinOnce()来实现的.
	"ros::spin()"
		ros::init(argc, argv, "my_node");
		ros::NodeHandle nh;
		ros::Subscriber sub = nh.subscribe(...);
		...
		ros::spin();
	"ros::spinOnce()"
		ros::Rate r(10); // 10 hz
		while (should_continue)
		{
			... do some work, publish some messages, etc. ...
			ros::spinOnce();
			r.sleep();
		}

	SO2: 在ROS中的多线程
	ros::MultiThreadedSpinner spinner(4);   ## 使用4个线程
	spinner.spin();
	
	"AsyncSpinner API (Jade)"
	ros::AsyncSpinner spinner(4);	##使用4个线程
	spinner.start();
	ros::waitForShutdown();

给出一个参考案例,见链接[4].

7. ROS编译过程中找不到自定义的头文件(是msg文件生成的头文件)

  • 常规错误排除法
		find_package(catkin REQUIRED COMPONENTS message_generation)
		
		catkin_package(
		...
		CATKIN_DEPENDS message_runtime
		...		
		)
		
		"以及在package.xml文件中添加相关的<build_depend>和<run_depend>,如下所示:"
			<build_depend>message_generation</build_depend> 
			<run_depend>message_runtime</run_depend>
  • 如果常规msg编译方式无效,那么就要为专门依赖消息的节点指定依赖,也就是告诉编译器在编译该节点时需要明确它的依赖
		"以下依赖设置必须放在add_executable()下面"
		add_dependencies(some_target ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

8.多线程程序调试

对多线程进行gdb调试,有可能出现core dump之后, bt往前搜索也看不出什么错误的时候可以进行core文件生成调试:

	ulimit -c unlimited
	
	./bin/**  ## 运行程序
	
	## 出现core dump之后,再运行:
	gdb ./bin/** core文件名
	
	## 然后进行相关的调试
	## 另外, 如何出现不能主动core dump的情况下, 如死锁, 死循环, 可以用 kill -11 pid 杀死进进程, 强行让它出现core dump.


[参考链接]

[1].rosrun+roslaunch+传递参数

[2].rosbag常用参数学习

[3].ROS-Wiki-Callbacks and Spinning

[4].spinning一个简单的参考案例

[5].CMakeLists.txt文件编写WIki

[6]. topic_tools/throttle

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱发呆de白菜头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值