roboware安裝與使用


一、在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM