当前位置 : 主页 > 编程语言 > 其它开发 >

roboware安装与使用

来源:互联网 收集:自由互联 发布时间:2022-05-30
一、在ubuntu18.04虚拟机上安装roboware 感觉官网不太好进,把roboware-studio_1.1.0-1514335284_amd64.deb文件放上网盘了。 链接:https://pan.baidu.com/s/1SImF07-xgyUaQfEoMBr5Rw 提取码:x3zc cd到安装包的父目录
一、在ubuntu18.04虚拟机上安装roboware

感觉官网不太好进,把roboware-studio_1.1.0-1514335284_amd64.deb文件放上网盘了。

链接:https://pan.baidu.com/s/1SImF07-xgyUaQfEoMBr5Rw 提取码:x3zc

cd到安装包的父目录下或者用终端打开,输入解压安装命令:

sudo dpkg -i roboware-studio_1.1.0-1514335284_amd64.deb

如果遇到下面这个问题

Package libgconf-2-4 is not installed

这是由于依赖错误,输入命令自动安装缺少依赖:

sudo apt-get -f -y install

重新运行下面的命令:

sudo dpkg -i roboware-studio_1.1.0-1514335284_amd64.deb

安装完成后,在终端直接在终端输入打开软件:

roboware-studio​​​​​​​ 
二、测试learning_topic功能包(上)

下面的内容适合于已经看过B站《古月ros入门21讲》前面11讲的内容的小伙伴,因为古月老师是教我们手动利用gedit修改CMakeList.txt和package.xml的,这里采用roboware环境,会自动完成修改,这样可以专注于编程与调试。

1、基本工作区创建

文件选项栏下选择新建工作区,这里工作区名字为ros_21_review

将资源管理器设置为release模式,ros选项栏下点击构建,这个操作相当于是catkin_init_workspace操作,如下图是已经完成工作空间的构建了,生成了CMakeList文件的结果。

2、创建功能包learning_topic

右击src选择 新建ROS包

命名为learning_topic回车,发现自动生成了CMakeList.txt和package.xml

3、配置功能包依赖

添加ros包依赖,右键点击 编辑依赖的ros包列表

在弹出的配置栏处输入roscpp std_msgs,这个操作在古月老师的视频中也是需要手动在CMakeList.txt中添加的。

4、添加节点文件talker.cpp和listener.cpp

右击learning_topic功能包,选择 新建src文件夹

在子文件中生成src文件,右击src文件选择 新建cpp源文件

命名为talker.cpp后选择 加入到新的可执行文件中

同理命名listener.cpp,得到两个文件的同时,roboware也修改了CMakeList.txt和package.xml,这个大大节省了配置的时间,在古月的课程中,都是我们自己手动修改的。

将古月老师的参考代码复制进去。
talker.cpp

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

int main(int argc, char **argv)
{
    ros::init(argc, argv, "velocity_publisher");
     
    ros::NodeHandle n;
    
    ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
	
    ros::Rate loop_rate(10);

    int count = 0;
	
    while(ros::ok())
    {
	geometry_msgs::Twist vel_msg;
	vel_msg.linear.x = 0.5;
	vel_msg.angular.z = 0.2;
	turtle_vel_pub.publish(vel_msg);
	ROS_INFO("Publish turtle velocity command [%0.2f m/s, %0.2f rad/s]", vel_msg.linear.x, vel_msg.angular.z);
	loop_rate.sleep();
}
    return 0;
}

listener.cpp

#include <ros/ros.h>
#include "turtlesim/Pose.h"

void poseCallback(const turtlesim::Pose::ConstPtr& msg)
{
    ROS_INFO("Turtle pose: x:%0.6f, y:%0.6f", msg->x, msg->y);
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "pose_subscriber");

    ros::NodeHandle n;

    ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);

    ros::spin();

    return 0;
}

快捷键 ctrl + ` 调起终端,在工作空间下编译:

catkin_make

为了避免每次输入ros指令前输入source /devel/setup.bash,将该工作空间下的devel中的setup.bash添加到主目录的.bashrc文件中(ctrl+h显示隐藏文件)

5、测试talker和listener

(1)打开roscore:

roscore

(2)运行小海龟节点:

rosrun turtlesim turtlesim_node

(3)运行talker节点:

rosrun learning_topic talker

(4)运行listener节点:

rosrun learning_topic listener

三、测试learning_topic功能包(下) 1、自定义消息

右击learning_topic功能包,选择 新建Msg文件夹

右击生成的msg文件夹,选择 新建MSG文件,命名为Person.msg

将下面的具体结构定义复制进去

string name
uint8 sex
uint8 age

uint8 unknown = 0
uint8 male = 1
uint8 female = 2

2、添加节点文件person_publisher.cpp和person_subscriber.cpp

同talker.cpp的方法生成person_publisher.cpp和person_subscriber.cpp,分别拷贝下面的代码
person_publisher.cpp

#include <ros/ros.h>
#include "learning_topic/Person.h"

int main(int argc, char **argv)
{
	ros::init(argc, argv, "person_publisher");
	ros::NodeHandle n;
	
	ros::Publisher person_info_pub = n.advertise<learning_topic::Person>("/person_info", 10);
	ros::Rate loop_rate(1);
	int count = 0;
	while(ros::ok())
	{
		learning_topic::Person person_msg;
		person_msg.name = "Tom";
		person_msg.age = 18;
		person_msg.sex = learning_topic::Person::male;
		
		person_info_pub.publish(person_msg);
		ROS_INFO("Publish Person Info: name:%s  age:%d  sex:%d",
				  person_msg.name.c_str(), person_msg.age, person_msg.sex);
		loop_rate.sleep();
	}
	return 0;
}

person_subscriber.cpp

#include <ros/ros.h>
#include "learning_topic/Person.h"

void personInfoCallback(const learning_topic::Person::ConstPtr& msg)
{
	ROS_INFO("Subscribe Person Info: name:%s  age:%d  sex:%d", msg->name.c_str(), msg->age, msg->sex);
}

int main(int argc, char **argv)
{
	ros::init(argc, argv, "person_subscriber");
	ros::NodeHandle n;
	ros::Subscriber person_info_sub = n.subscribe("/person_info", 10, personInfoCallback);
	ros::spin();
	return 0;
}

如下图所示:

在工作空间下编译:

catkin_make

3、测试person_publisher.cpp和person_subscriber.cpp

(1)启动roscore:

roscore

(2)运行person_subcriber节点:

rosrun learning_topic person_subcriber


(3)运行person_publisher节点:

rosrun learning_topic person_publisher

网友评论