ROS机器人学习摇杆篇——1


                                                                                 ***ROS机器人操作系统学习总结-摇杆篇*
 本人是个ROS学习新手,对ROS操作系统学习也就几个月,当时在网上看了几个大神的学习的博客分享,感觉很不错,受益无穷,所以我也想把自己学习过程中的一些理解和用途分享出来,里面可能有一些我理解的不对的,希望大家看后能够指出来,一起学习。
  这篇文章主要讲的是我们用摇杆控制一个小海龟,然后让另外一个小海龟跟随这个被摇杆控制的小海龟,其实这个wiki上已经有了,只不过wiki上的是讲键盘控制,我只不过改了下launch文件就可以让摇杆控制了。
   参考资料:http://wiki.ros.org/joy/Tutorials/WritingTeleopNode这是摇杆的控制代码,注意不同版本的ros对应的代码是不同的,特别是hydro有点改动,大家要好好看下。
                    http://wiki.ros.org/tf/Tutorials:这是tf的教程,其实我们要做的事情并不多,只要理解前面三个教程,1:如何建立一个broadcaster,2如何建立一个listener 3:如何添加一个新的坐标系,这个在前三个code都有解释,具体的代码解释我会在后面陆续整理出来..
              现在开始说一下我们如何用摇杆控制乌龟,很简单,我们按照上面的内容,创建一个joy_stick的包,在其中的src里面创建一个joy_stick_example.cpp的文件,注意我的ros是hydro版本。不同版本之间有些小的差别。

#include 
#include     //是乌龟的数据类型的头文件
#include          //摇杆控制的头文件
class TeleopTurtle                          //定义一个类,主要用来写乌龟控制的实现
{
public:
  TeleopTurtle();

private:
  void joyCallback(const sensor_msgs::Joy::ConstPtr& joy);      //一个回调函数,摇杆实现对乌龟的控制就是通过调         
                                                                //用这个函数实现  
  ros::NodeHandle nh_;

  int linear_, angular_;
  double l_scale_, a_scale_;
  ros::Publisher vel_pub_;
  ros::Subscriber joy_sub_;

};                          
TeleopTurtle::TeleopTurtle():
  linear_(1),
  angular_(2)
{

  nh_.param("axis_linear", linear_, linear_);
  nh_.param("axis_angular", angular_, angular_);
  nh_.param("scale_angular", a_scale_, a_scale_);
  nh_.param("scale_linear", l_scale_, l_scale_);
  vel_pub_ = nh_.advertise("turtle1/cmd_vel", 1);
  joy_sub_ = nh_.subscribe("joy", 10, &TeleopTurtle::joyCallback, this);
}
void TeleopTurtle::joyCallback(const sensor_msgs::Joy::ConstPtr& joy)
{
  geometry_msgs::Twist twist;
  twist.linear.x = l_scale_*joy->axes[linear_];         //把摇杆的值传递给乌龟的坐标,让乌龟移动
  twist.angular.z = a_scale_*joy->axes[angular_];        
  vel_pub_.publish(twist);                                //把这些值发布出去,
}                                                             
int main(int argc, char** argv)
{
  ros::init(argc, argv, "teleop_turtle");
  TeleopTurtle teleop_turtle;

  ros::spin();
}

这些都是wiki里面有的,还有三个tf的函数大家直接在参考资料里面复制下来就可以了,不用改的,注意好对应版本,
下面是launch启动文件,我们创建一个launch目录,在里面创建一个tf_joy_turtle.launch文件,

"1.0"?>

         "turtlesim" type="turtlesim_node" name="sim"/>
         "joy_stick" type="joy_stick_eample" name="joy_stick" output="screen"/>

         "axis_linear"  value="1" type="int"/>
         "axis_angular"  value="0" type="int"/> 
         "axis_ascalar" value="2" type="double"/>
         "axis_lscalar" value="2" type="double"/>

         "true" pkg="joy" type="joy_node" name="turtle_name">
          "dev" type="string" value="/dev/input/js0"/>
          "deadzone" value="0.12"/>
          


         "joy_stick" type="tf_listener" name="listener"/>
         "tf_stick" type="tf_broadcaster"  args="/turtle2"  name="joy1"/>
         "tf_stick" type="tf_broadcaster" args="/turtle1" name="joy2"/>
         "joy_stick" type="add_framecaster" name="add_framecaster"/>

搞定完这些后,我们先编译一下rosmake
最后我们启动文件,
roslaunch joy_stick tf_joy_turtle.launch,我们就可以用我们的摇杆控制乌龟了,而且另外一个乌龟总是与摇杆控制的乌龟保持左边2米的距离。

你可能感兴趣的:(ROS学习总结分享)