PS:采用的视频教程是大学慕课的《机器人操作系统入门》 https://www.icourse163.org/learn/ISCAS-1002580008#/learn/announce, 由于使用的是Ubuntu 18.04,使用的ROS版本为 Melodic 和视频所用的ROS kinetic版本有所出入,产生以下问题:1.使用模块不在,解决方法 用 git clone 克隆;2.加载robot_sim_demo只有地板,没有模型和小车,解决办法 由于gazebo9版本不兼容这个demo的模型,所以要么换低版本gazebo,要么换模型。
ROS中相关函数的使用方法可以见网站:https://docs.ros.org/api/roscpp/html/
以下记录下roscpp中相关的程序,以便自查自用。所有代码均可以从github找到。
https://github.com/DroidAITech/ROS-Academy-for-Beginners
- topic_demo
功能描述:两个node,一个发布模拟的GPS消息(格式为自定义,包括坐标和工作状态),另一个接收并处理该信息(处理方式为计算到原点距离)。
个人笔记:这个topic可以用来处理传感器传入的数据
步骤:
- package
- msg
- talker.cpp
- listener.cpp
- CMakeList.txt & package.xml
package
cd ~/catkin_ws/src
catkin_crate_pkg topic_demo roscpp rospy std_msgs
个人笔记:其中catkin_ws是工作空间;第二行指令是创建一个包,后面是依赖包
msg
cd topic_demo
mkdir msg
cd msg
vim gps.msg
gps.msg的内容如下:
float32 x
float32 y
string state
个人笔记:msg文件不能直接使用,要经过catkin_make编译之后,会在 ~/catkin_ws/devel/include/topic_demo
中生成一个 gps.h
文件,然后在c++中include这个头文件就可以使用了,使用方法为:topic_demo::gps msg;
talker.cpp
//ROS头文件
#include <ros/ros.h>
//自定义msg产生的头文件
#include <topic_demo/gps.h>
int main(int argc, char **argv)
{
//用于解析ROS参数,第三个参数为本节点名
ros::init(argc, argv, "talker");
//实例化句柄,初始化node
ros::NodeHandle nh;
//创建publisher
ros::Publisher pub = nh.advertise<topic_demo::gps>("gps_info",