ROS相关学习
ROS是个人学习机器人相关知识很好的平台,现成的通信框架和足够丰富的开源资源可用节省学习和实践中的时间,提高学习效率。
ROS并不是机器人唯一的架构方式,在实际工程问题中ROS并不能完全满足需求,但对于注重机器人知识体系的某部分的个人来说,比如专注于slam,路径规划等某方面,使用ROS相当于在一个相对稳定的架构中开发自己的模块。
1.配置ros package路径:
许多教程讲在.bashrc中添加如下内容:
source /opt/ros/melodic/setup.bash //ros melodic自己的setup.bash路径
source /home/stephane/catkin_rospi/devel/setup.bash //作者的一个工作空间的setup.bash路径
但source多的情况下有冲突存在,无法成功添加source到ROS_PACKAGE_PATH, 有人研究过setup.bash的内容也未能找到原因。
使用标准语句放在 .bashrc 中可解决。
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/robin/catkin_ws/src
2.URDF建模
在使用urdf建模后用check_urdf来检查urdf文件是否正确
urdf文件的编写尽量写一段以后check一下,否则有bug后不好定位
例如:来检查mbot_base.urdf
check_urdf mbot_base.urdf
正确的话显示相关信息:
robot name is: mbot
---------- Successfully Parsed XML ---------------
root Link: base_link has 2 child(ren)
child(1): left_wheel_link
child(2): right_wheel_link
3. 问题解决
1、在工作空间catkin_make编译后/devel/lib中没有生成bin文件。
---- 检查CMakeLists,看是否有catkin_package()
2、无法包含devel/include下的文件。
---- 在CMakeLists的 catkin_package( ) 中添加 INCLUDE_DIRS 即可包含
ROS系统 ROS1与ROS2共存使用切换方法
那么当我们又安装了ROS2.0后,就产生了如何切换ROS版本的问题,因为同一个终端里无法同时使用ROS1和ROS2。同样我们可以通过在bashrc文件中加入选择功能来解决这个问题:
第一步 打开bashrc文件:
sudo gedit ~/.bashrc
第二步 在bashrc文件末尾加入以下代码:
echo "ros melodic(1) or ros2 dashing(2)?"
read edition
if [ "$edition" -eq "1" ];then
source /opt/ros/melodic/setup.bash
else
source /opt/ros/dashing/setup.bash
fi
4. Ros bag相关
1.ros bag filter
在ROS数据集中去除某些Topic
rosbag filter input.bag output.bag "topic !='topic1' and topic !='topic2' ... "
在ROS数据集中记录某些Topic
rosbag filter input.bag output.bag "topic =='topic1' or topic =='topic2' ... "
在ROS数据集中记录指定时间戳的子集,截取数据集指定时间子集
rosbag filter my.bag out.bag "t.to_sec() >= t1 and t.to_sec() <= t2"