1.ros package structure
一个package要包含:Cmakelists. txt 和package. xml。
ros package要放在工作空间下:
工作空间结构:
workspace_folder/ -- WORKSPACE
src/ -- SOURCE SPACE
CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin
package_1/
CMakeLists.txt -- CMakeLists.txt file for package_1
package.xml -- Package manifest for package_1
...
package_n/
CMakeLists.txt -- CMakeLists.txt file for package_n
package.xml -- Package manifest for package_n
workspce:devel; build; src
src:Cmakelists. txt ; package-1 ; package-2 ; package-n
package-1: package.xml Cmakelists.txt
2.Creating a catkin Package
建立工作空间:
mkdir -p workspace_name/src
cd workspace_name
catkin_make
建立软件包:
cd src
catkin_creat_pkg package_name rospy roscpp std_msgs sensor_msgs pcl_ros
//这一行生成package.xml
package.xml模板
<?xml version="1.0"?>
<package>
<name>package_name</name> //包名
<version>0.0.1</version> //版本
<description>The package_name package</description> //描述
<maintainer email="lmx@wyjy.edu.cn">appleyes</maintainer> //包联系者
<license>MIT</license>
//许可证 BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, and LGPLv3.
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>sensor_msgs</build_depend>
<build_depend>pcl_ros</build_depend>
<run_depend>roscpp</run_depend>
<run_depend>sensor_msgs</run_depend>
<run_depend>pcl_ros</run_depend>
</package>
解决在终端查找包及内部文件的问题.
cd all
mkdir -p 2/src
cd 2
catkin_make
进入all/2/src
将软件包考进来
cd 2
catkin_make
在2工作空间下会出现devel;build.
此时,在home crtl+h 找到.bashrc 在末尾加入工作路径
source ~/all/2/devel/setup.bash --extend
此时包的工作路径被添加到终端,可以在终端对包文件进行访问.
node and node 交流通过topic
查看节点rosnode list
查看话题rostopic list
只有话题可以被订阅或者是发布
以qq群为例:节点是每个人.话题是平台,也就是qq群,每个人可以关注不关注,订阅不订阅.消息就是每个人发布的信息.
服务和话题的不同在于话题是多对多,服务是多对一或者是一对一.
rosout 节点是一个特殊的节点,通过 roscore 自动启动。其作用有点类似于控制台程序中使用的标准输出(即 std:: cout)。/rosout前面的反斜杠“/”表明该节点名称属于全局命名空间。 所有的节点发布都向话题/rosout 发布消息,该话题由同名的/rosout 节点订阅。这个话题的作用是用来生成各个节点的文本日志消息。 ROS 会根据上下文来推测我们讨论的是/rosout 节点还是/rosout 话题。
roslaunch
与rosrun区别:rosrun只能启动一个节点,roslaunch可以启动多个节点
使用方法:
roslaunch [package] [filename.launch]
roscd beginner_tutorials
//进入工作空间后 source ./devel/setup.bash
然后,再roscd
就是酱紫:
cd ~/catkin_ws
source devel/setup.bash
roscd beginner_tutorials
建立launch文件夹及.launch文件
mkdir launch
cd launch
duangduangduang~
下面是launch文件编写部分,终于要搞明白launch文件二三事了,话说对这一堆配置文件,我真是迷的很.
1 <launch>
2
3 <group ns="turtlesim1">
4 <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
5 </group>
6
7 <group ns="turtlesim2">
8 <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
9 </group>
10
11 <node pkg="turtlesim" name="mimic" type="mimic">
12 <remap from="input" to="turtlesim1/turtle1"/>
13 <remap from="output" to="turtlesim2/turtle1"/>
14 </node>
15
16 </launch>
此部分来自作者:Stoneplay26;原文:https://blog.csdn.net/qq_28753373/article/details/82107609.感谢!
在这里说明一下roscd 和cd区别:
cd命令和roscd命令都是切换到指定目录的命令。不同的是,cd是Linux系统的命令,在使用时必须指定目标目录的完整路径;而roscd是ros系统中的命令,它可以直接切换到指定目录(ros系统中的软件包),而不需要输入冗长的完整路径。
例如,要切换到roscpp这个软件包,两个命令的格式分别为:
cd /opt/ros/kinetic/share/roscpp
roscd roscpp
显然,在ros系统中,roscd要比cd命令更加方便。
但在使用的过程中,我们有时候会发现,roscd命令不能正常使用,系统会提示找不到软件包,这是因为roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包,这时候我们需要切换到ros系统的工作空间(catkin_ws)下,通过source命令将软件包添加到环境变量中,即:
cd ~/catkin_ws
source ./devel/setup.bash
添加环境变量之后,roscd即可正常使用。
注意,如果新打开了一个终端,在使用某一工作空间之前,都需要执行上述命令切换到该工作空间的目录下将工作空间的路径添加到环境变量中。
可以使用下面的命令来查看你当前的环境变量:
$ echo $ROS_PACKAGE_PATH
若系统返回信息为:
/home/你的用户名/你的工作空间名/src:/opt/ros/kinetic(ROS的版本名)/share
则表示环境变量已经设置成功了。