【Robotics Library学习笔记 二】——在Linux上编写应用程序

参考官方教程,笔者的开发环境为wsl2内安装的Ubuntu-20.04

机器人操纵器的正向运动学计算

在以下步骤中,我们将使用 Robotics Library 开发一个非常简单的运动学应用程序。
在您的主目录中为示例创建一个目录,并在此目录中,创建两个文件 myMdlDemo.cppCMakeLists.txt
在这里插入图片描述
将以下内容添加到您的文件中。CMakeLists.txt

cmake_minimum_required(VERSION 2.8.11)
project(myMdlDemo)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(RL COMPONENTS MDL REQUIRED)
add_executable(myMdlDemo myMdlDemo.cpp)
target_link_libraries(myMdlDemo ${RL_LIBRARIES})

此文件控制构建过程,并将由 CMake 处理。RL 需要 C++11 标准和启用的数学常量find_package 查找 RL 安装中包含的 CMake 配置文件。add_executable 将创建一个包含相应源文件的新程序。target_link_libraries 定义程序要链接到的库。

将以下内容添加到myMdlDemo.cpp。

#include <iostream>
#include <rl/math/Transform.h>
#include <rl/math/Unit.h>
#include <rl/mdl/Kinematic.h>
#include <rl/mdl/Model.h>
#include <rl/mdl/XmlFactory.h>

int main(int argc, char** argv)
{
	rl::mdl::XmlFactory factory;
	std::shared_ptr<rl::mdl::Model> model(factory.create("/usr/share/rl-0.7.0/examples/rlmdl/unimation-puma560.xml"));
	rl::mdl::Kinematic* kinematics = dynamic_cast<rl::mdl::Kinematic*>(model.get());
	rl::math::Vector q(6);
	q << 10, 10, -20, 30, 50, -10;
	q *= rl::math::DEG2RAD;
	kinematics->setPosition(q);
	kinematics->forwardPosition();
	rl::math::Transform t = kinematics->getOperationalPosition(0);
	rl::math::Vector3 position = t.translation();
	rl::math::Vector3 orientation = t.rotation().eulerAngles(2, 1, 0).reverse();
	std::cout << "Joint configuration in degrees: " << q.transpose() * rl::math::RAD2DEG << std::endl;
	std::cout << "End-effector position: [m] " << position.transpose() << " orientation [deg] " << orientation.transpose() * rl::math::RAD2DEG << std::endl;
	return 0;
}

接下来在根目录下创建build目录,开启终端并导航到build目录内执行

cmake ..

便会在build目录内生成makefile文件,接着输入

make

编译生成可执行文件myMdlDemo,在终端输入

./myMdlDemo

即可运行,效果如下
在这里插入图片描述

机器人机械手的可视化

在工程根目录下建立另一个目录myViewDemo,在该目录下建立 CMakeLists.txtmyViewDemo.cpp ,分别编写以下程序

cmake_minimum_required(VERSION 2.8.11)
project(myViewDemo)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
include(${QT_USE_FILE})
find_package(RL COMPONENTS SG REQUIRED)
add_executable(myViewDemo myViewDemo.cpp)
target_link_libraries(
	myViewDemo
	${QT_QTCORE_LIBRARY}
	${QT_QTGUI_LIBRARY}
	${QT_QTOPENGL_LIBRARY}
	${RL_LIBRARIES}
	/usr/lib/x86_64-linux-gnu/libSoQt.so
)
#include <iostream>
#include <QWidget>
#include <Inventor/SoDB.h>
#include <Inventor/Qt/SoQt.h>
#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
#include <rl/sg/so/Scene.h>

int
main(int argc, char** argv)
{
	SoDB::init();
	QWidget* widget = SoQt::init(argc, argv, argv[0]);
	widget->resize(800, 600);		//若出现内存报错,注释掉这段
	rl::sg::so::Scene scene;
	scene.load("/usr/share/rl-0.7.0/examples/rlsg/unimation-puma560_boxes.xml");
	SoQtExaminerViewer viewer(widget, NULL, true, SoQtFullViewer::BUILD_POPUP);
	viewer.setSceneGraph(scene.root);
	viewer.setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND);
	viewer.show();
	SoQt::show(widget);
	SoQt::mainLoop();
	return 0;
}

运行效果如下
在这里插入图片描述
注意:该例程使用的是qt4,若cmake报错,请安装qt4或更改qt4为默认选择

配置VScode在wsl2下工作环境

现在已经成功编译运行了应用程序,但为了方便后续开发,还要配置一下vscode在wsl2下工作环境
开始之前在vscode本地安装wsl拓展
在这里插入图片描述
安装完成后连接wsl2下的Ubuntu
在这里插入图片描述
连接到wsl2后打开工程目录,作为工作空间在这里插入图片描述
确保在wsl2下安装好c/c++拓展插件(注意不是本地)后按下Ctrl+Shift+P进行C/C++配置
在这里插入图片描述
修改C++标准为C++11,根据源码添加相关头文件路径
在这里插入图片描述
或者根据程序报错提示添加在这里插入图片描述
若遇到实在不知道咋解决的问题就关掉错误波形也可,反正能编译就行
完成配置后的json文件:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include/qt4/QtGui",
                "/usr/include/qt4",
                "/usr/include/rl-0.7.0"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c17",
            "cppStandard": "c++11",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

可以看到配置完成后源代码头文件没有报错波浪线,而且可以从头文件转到定义
在这里插入图片描述
编译也正常,可以愉快地开发了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值