刚接触ROS操作系统的时间并不多,对ROS里的了解也十分有限。ROS下的编程我主要是用C++来写。(但感觉很虚,因为自己只是了解的下C++,之前的代码都是用C写的。现在正在抓紧时间学习C++)。
下面是我的一些收获:
$ rostopic echo /turtle1/cmd_vel//查看相应的主题参数 主题改为自己需要的即可
$ rostopic type /turtle1/cmd_vel //主题数据类型查看 可找到对于的头文件<geometry_msgs/Twist.h>
eg:geometry_msgs/Twist
$ rosmsg show geometry_msgs/Twist //消息内容查看 可找到对于的头文件 <geometry_msgs/Vector3.h>
eg:
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
例子:
#include<ros.h>
#include<geometry_msgs/Vector3.h>
#include<geometry_msgs/Twist.h>
ros::NodeHandle nh;
geometry_msgs::Twist canshu;//定义变量,采集对应参数;
void cmd_velCB(const geometry_msgs::Twist& car_move)//回调函数 car_move为有效参数的类。
{
canshu.linear.x= car_move.linear.x;//采集此刻数据
canshu.angular.x=car_move.angular.x;
digitalWrite(13, HIGH-digitalRead(13)); // blink the led
if(canshu.linear.x == 2) {
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
}
else if (canshu.linear.x == -2)
{
digitalWrite(8,HIGH);
digitalWrite(9, HIGH);
}
else digitalWrite(9, LOW);
}
ros::Subscriber<geometry_msgs::Twist> sub("/turtle1/cmd_vel",&cmd_velCB); //订阅所需的相应主题 <类型>+实例化(主题)("主题",&回调函数)
void setup()
{
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(13,OUTPUT);
nh.initNode();//初始化节点句柄
nh.subscribe(sub);//订阅主题
}
void loop()
{
nh.spinOnce();//消息处理循环
delay(100);
}
1、运行 roscore
2、rosrun rosserial_python serial_node.py /dev/ttyACM0
3、rosrun turtlsim turtlsim_node //打开乌龟窗口
4、rosrun turtlsim turtle_telop_key//打开控制键盘
5、 rostopic echo /turtle1/cmd_vel//查看相应的主题参数
完成就可以获得参数的变化。