EAI小车进行slam搭建遇到的问题总结

相关的教程在创客智造 官网上,https://www.ncnynl.com/archives/201703/1460.html

rosbag的教程如下:https://www.ncnynl.com/archives/201608/515.html

实验1.   读取车轮角速度,并记录为rosbag数据格式。

这里涉及到roslaunch 操作,介绍如下:https://blog.csdn.net/moyu123456789/article/details/95007381

比如我们编译后可以在src里找到:/home/zengjun/dashgo_ws/src/dashgo/dashgo_bringup/launch/bringup_follow.launch

如下运行就好:

roslaunch dashgo_bringup bringup_follow.launch

或者:首先, 在终端运行 dashgo 的 D1 驱动节点

$ roslaunch dashgo_bringup minimal.launch

1. 为什么有roslaunch这个指令?

rosrun命令用于运行一个ROS节点,这个在简单程序中使用比较方便。但是在规模比较大的程序中,常常有几个或者几十个节点,这些节点之间彼此互有联系,协同达到软件正确执行的目的。这时候再使用rosrun命令的话,就会比较麻烦。此时,roslaunch命令闪亮登场了,它可以运行多个节点。并且roslaunch命令在运行节点时,还可以附加一些ROS命令选项,比如修改参数或节点的名称,设置节点的命名空间,设置ROS_ROOT及ROS_PACKAGE_PATH,以及环境变量修改等选项的ROS命令。

2. 如何使用roslaunch指令?
 

roslaunch命令执行格式:

                                         roslaunch  功能包名称  launch文件 [参数设置]

这里roslaunch命令会在对应的功能包中找到名称匹配的launch文件,并执行这个launch文件。如果设置了参数的话,会将参数传入到launch文件中赋给对应的参数。

例如,执行vins_estimator功能包中的euroc.launch文件,命令如下。

roslaunch vins_estimator euroc.launch  

如果在launch文件所在路径下执行该launch文件的话,就不需要加功能包名称了,因为此时是能直接找到launch文件的。

如果运行launch文件时需要设置参数,如下所示。arg为参数名称,value为给参数的赋值。

roslaunch my_file.launch arg:=value

注意:在执行roslaunch命令时,一定要先执行source命令:source ../devel/setup.bash命令,否则找不到对应的包名称。

3. 那么这里提到的rospackage又是什么呢?

翻译过来叫做功能包。更具体的介绍:https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter2/2.3.html

       ROS中的package的定义更加具体,它不仅是Linux上的软件包,更是catkin编译的基本单元,我们调用catkin_make编译的对象就是一个个ROS的package,也就是说任何ROS程序只有组织成package才能编译。所以package也是ROS源代码存放的地方,任何ROS的代码无论是C++还是Python都要放到package中,这样才能正常的编译和运行。
一个package可以编译出来多个目标文件(ROS可执行程序、动态静态库、头文件等等)。

package相关命令:

rospack

rospack是对package管理的工具,命令的用法如下:

rostopic命令 作用
rospack help 显示rospack的用法
rospack list 列出本机所有package
rospack depends [package] 显示package的依赖包
rospack find [package] 定位某个package
rospack profile 刷新所有package的位置记录

以上命令如果package缺省,则默认为当前目录(如果当前目录包含package.xml)

roscd

roscd命令类似与Linux系统的cd,改进之处在于roscd可以直接cd到ROS的软件包。

rostopic命令 作用
roscd [pacakge] cd到ROS package所在路径

rosls

rosls也可以视为Linux指令ls的改进版,可以直接lsROS软件包的内容。

rosls命令 作用
rosls [pacakge] 列出pacakge下的文件

rosdep

rosdep是用于管理ROS package依赖项的命令行工具,用法如下:

rosdep命令 作用
rosdep check [pacakge] 检查package的依赖是否满足
rosdep install [pacakge] 安装pacakge的依赖
rosdep db 生成和显示依赖数据库
rosdep init 初始化/etc/ros/rosdep中的源
rosdep keys 检查package的依赖是否满足
rosdep update 更新本地的rosdep数据库

一个较常使用的命令是rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y,用于安装工作空间中src路径下所有package的依赖项(由pacakge.xml文件指定)。

4. 如何创建rospackage,这篇博文手把手教学:https://www.cnblogs.com/duijinglianxinduijingxiuxing/p/7544412.html

5. rostopic如何订阅?

很多信息以rostopic发布:我们可以用rostopic list查询

zengjun@zengjun-Lenovo-G480:~$ rostopic list
/Lencoder
/Lpidout
/Lvel
/Rencoder
/Rpidout
/Rvel
/cmd_vel
/odom
/rosout
/rosout_agg
/tf

#查看topic信息
rostopic info /xxx_imu_driver/imu

#查看topic数据
rostopic echo /xxx_imu_driver/imu

~$ rostopic info /Lencoder
Type: std_msgs/Int16

Publishers: 
 * /arduino (http://zengjun-Lenovo-G480:45412/)

Subscribers: None

 

你可能感兴趣的:(SLAM,linux)