总结了一下,学习内容主要有:
1.ubuntu的基础命令
pwd: 获得当前路径
cd: 进入或者退出一个目录
ls:列举该文件夹下的所有文件名称
mv 移动一个文件到另一个目录中
cp 拷贝一个文件到另一个目录中
rm -r 删除文件
gedit
sudo 给予管理员权限
sudo apt-get install
sudo pkg -i xx.deb
unzip xx.zip 解压缩zip文件
zip -r archive_name.zip directory_to_compress 压缩 目录到文件中
2.ros工作空间的构建
2.1 典型的功能包创建和运行过程
2.2一个ros工作空间的目录架构
2.3 代码过程
//1. 创建工作空间
mkdir -p ~/ws_test/src
//2. 进入工作空间
cd ws_test
//3. 初始化工作空间,会生成build,devel,build存放编译信息,devel存放可执行文件与相关依赖项,src文件存放代码
catkin_make
//4. cd src
//5. 创建包,宝引用了roscpp
catkin_create_pkg helloworld roscpp
//6. 写程序,鼠标点击helloworld包的src,创建helloworld.cpp文件,文件中写如下内容
int main(int argc, char** argv)
{
ros::init(argc,argv, "node_name");
ROS_INFO("helloworld");
return 0;
}
//7. 在CMakeLists.txt中配置, 指定生成可执行文件
add_executable(helloworld src/helloworld.cpp)
target_link_library(helloworld ${catkin_LIBRARY})
//8. 对工作空间进行编译,回退到ws_test目录下
catkin_make编译
//9.运行,在一个终端中启动roscore,在另一个终端中启动可执行文件rosrun pkg包名字 exe可执行文件名
//9.1 roscore
//9.2
source ./devel/setup.bash
rosrun helloworld helloworld
ros通讯机制
【摘抄书中的】同此歌行来说,一个移动机器人项目是多个进程协同完成的,除了极少部分进程可以独立完成自己的之外,其他的进程均需要进行进程之间的数据交互,因此进程间的通讯机制是构建复杂机器人项目的基础。
ROS节点
在ros的世界中,最小的进程单元就是节点Node,通常一个node负责机器人的一个单独模块。一个package中可以有多个可执行文件(通常为C++编译生成的可执行文件或者python脚本),可执行文件在运行之后就形成了一个进程,这个进程就是ros节点。
节点管理器master
节点管理器Master在整个网络通讯中相当于管理中心,管理着各个节点(Node),节点在启动的时候,首先要在Master中进行注册,之后Master会将该节点NODE纳入到整个ros系统中。Node之间的通讯也是由Master进行牵线,然后才能两两的进行点对点的通讯。当ROS节点启动的时候,首先启动Master,再由节点管理器以此启动Node。
换句话说,节点管理器实际上扮演了一个“通讯调度中心”的角色,它启动之后,各个Node之间才会建立相应的关联。但是,在Node连接建立之后,Master的任务就完成了,此时如果关闭Masetr,已经运行的Node之间的通信还可以继续进行。
ros通讯方式有4种,分别是:
1.topic话题通讯模式
2.Service服务模式
3.Parammeter Service模式
4.Actionlib模式
3.话题的订阅、发布、消息自定义
Topic话题订阅模式是一种ROS常见的通讯方式,对于实时性、周期性的消息,使用Topic模式来传输消息是最佳选择,Topic模式是一种点对点的单项通讯方式,这里的点指的是Node,也就是节点之间可以通过Topic来传递消息。Topic话题主要经历下面的初始化过程:首先,Publisher发布者节点和subscriber订阅者节点都要到节点管理器Master中进行注册;然后,Publisher会发布Topic话题,
每一个节点只接受话题所发布的数据,发布数据后至于接收者是否接收到数据,那就和这个节点无关了。结合小海龟,来说明一下话题发布和订阅如何使用:
//1.构建工作空间
mkdir ~/mrobot_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
这时候在src文件夹下生成了learing_topic/include和 le