导语:ROS(Robot Operating System)机器人操作系统,是一个适用于机器人的开源的操作系统,它用于编写机器人软件程序的一种具有高度灵活性的软件架构。它包含了大量工具软件、库代码和约定协议,旨在简化跨机器人平台创建复杂、鲁棒的机器人行为这一过程的难度与复杂度。
今日开启ROS学习之路。
目录
ROS
一:安装ROS系统(linux):
我是在ubuntu16.04下安装的ROS Kinetic,安装教程可见官网: http://wiki.ros.org/kinetic/Installation/Ubuntu.
二:ROS系统是否安装成功:
检验ros是否安装成功,可输入以下命令,三个命令分别在不同的终端输入。
//1.启动ROS Master
roscore
//2.启动小海龟仿真器
rosrun turtlesim turtlesim_node
//3.启动海龟键盘控制节点
rosrun turtlesim turtle_teleop_key
三:创建工作空间与功能包:
( 开始ROS之前的配置 )
3.1 创建工作空间
mkdir ~/catkin_ws/src
cd ~/catkin_ws/src
cd catkin_init_workspace
编译工作空间
cd ~/catkin_ws/
catkin_make
设置环境变量
source devel/setup.bash
检查环境变量
echo $ROS_PACKAGE_PATH
3.2 创建功能包(begin)
语法:catkin_create_pkg<package_name>[depend1] [depend2] [depend3]**
cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscpp
编译功能包
cd ~/catkin_ws/
catkin_make
source ~/catkin_ws/devel/setup.bash
发布者,话题,订阅者,ROS master之间的关系
四:发布者Publisher的编程实现(C++)
4.1 如何实现一个发布者:
1.初始化ROS节点
2.向ROS master注册节点信息,包括发布的话题名和话题中的消息类型
3.创建消息数据
4.按照一定频率循环发布消息
velocity_publisher.cpp
4.2 配置发布者代码编译规则:
配置CMakeLists.txt中的编译规则:在learning_topic的CMakeLists.txt 中设置需要编译的代码和生成的可执行文件,设置链接库(velocity_publisher是.cpp的文件名即节点名字,放在##Install##上面)
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
4.3 编译并运行发布者:
cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic velocity_publisher
source devel/setup.bash 可在.bashrc中配置好,source /home/xyh/catkin_ws/devel/setup.bash,之后可不再重复执行source命令。
发布者运行后,可在海龟终端界面看到海龟按照规划速度运动,即沿着圆周运动,并且在发布终端界面可以看到发布信息。
五:订阅者Subscriber的编程实现(C++)
5.1 如何实现一个订阅者:
1.初始化ROS节点
2.订阅需要的话题
3.循环等待话题消息,接收到消息后进入回调函数
4.在回调函数中完成消息处理
pose_subscriber.cpp
5.2 配置订阅者代码编译规则:
配置CMakeLists.txt中的编译规则同发布者
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
5.3 编译并运行订阅者:
cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber
订阅者运行后,可以在终端看到海龟的x,y的位置,但位置并没有变化,然后可以通过键盘(rosrun turtlesim turtle_teleop_key)控制海龟,可在终端看到x,y的位置变化。
六:话题消息的定义与使用
在创建新的数据类型之前,应该查看是否有满足的数据类型 rosmsg
6.1 定义msg文件; .在learning topic的目录下创建文件夹msg,再创建文件Person.msg 。
Person.msg
string name
uint8 sex
uint8 age
uint8 unknown=0
uint male = 1
uint female = 2
6.2 在package.xml中添加功能包依赖
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
6.3 在CMakeLists.txt添加编译选项
find_package(... message_generation)
add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
catkin_package(... message_runtime)
6.4 编译生成语言相关文件(catkin工作空间的根目录下编译)
6.5 写publisher和subscriber的.cpp文件,按照上面的海龟步骤进行
Person_publusher.cpp和Person_subscriber.cpp
CMakeLists.txt中编译规则分别多一步
add_dependencies(Person_publusher ${PROJECT_NAME}_generate_message_cpp)
add_dependencies(Person_subscriber ${PROJECT_NAME}_generate_message_cpp)
运行:
catkin_make
roscore
rosrun learning_topic person_subscriber
rosrun learning_topic person_publisher