实验室购买的IMU型号为LPMS-CURS和LPMS-CURS2
LPMS公司官方没有提供IMU的驱动程序,此驱动程序是由一个实验室做的: Larics laboratory
并且他们写的驱动已经在github上开源!!!
下载链接:https://lp-research.com/support/
这里我们选用的是LpSensor-1.3.5 library (Ubuntu Linux 64-bit binary)
下载完成后:
直接提取到主文件夹
sudo dpkg -i LpSensor-1.3.5-Linux-x86-64/liblpsensor-1.3.5-Linux.deb
dpkg -L liblpsensor
因为买的IMU没有蓝牙链接功能,所以没有安装libbluetooth-dev
如果catkin_ws下有src工作空间,或者之前学过ROS的初级教程,这一步可以跳过!
catkin_init_workspace为初始化工作空间命令!
mkdir -p ~/catkin_ws/src
cd !:2
catkin_init_workspace
下载资源来自github
链接为:https://github.com/larics/timesync_ros.git
链接为: https://github.com/larics/lpms_imu.git
下载命令为:
cd ~/catkin_ws/src
git clone https://github.com/larics/timesync_ros.git
git clone https://github.com/larics/lpms_imu.git
编译命令为:
cd ~/catkin_ws
source devel/setup.bash
catkin_make
此时会显示编译成功
若此处有问题,可参考下面遇到的问题或者百度
采用USB线连接,查看usb端口号,默认条件下为:/dev/ttyUSB0
ls /dev/ttyUSB*
cd ~/catkin_ws/
source devel/setup.bash
其余命令:
启动ROS
roscore
rosrun rqt_plot rqt_plot
source devel/setup.bash
rosrun lpms_imu lpms_imu_node
此处可能容易出问题,比如出现/dev/ttyUSB0 permission denied等问题,参考下面
在rqt_plot的输入框中填入:
/imu/linear_acceleration
因为CMakelists.txt文件里面的要求C++版本为14。
然而ubuntu14.04支持的GCC版本为4.8.4,不支持C++14,导致编译不通过。ubuntu16.04的GCC版本为5.4.0,支持C++14.
解决方法:
1.ubuntu14.04升级系统为ubuntu16.04.
2.ubuntu14.04升级GCC版本—5.4.0就可以,不用非要升最高
升级教程:https://blog.csdn.net/answerMack/article/details/88342876
到最后一步了,可是读取不到IMU的数据。
这个问题的参考链接为https://blog.csdn.net/zbrj12345/article/details/79752221
是因为没有权限去读/dev/ttyUSB0的数据。所以可以按照上述的方法。
sudo chmod 777 /dev/ttyUSB0
修改权限为可读可写可执行,但是这种设置电脑重启后,又会出现这种问题,还要重新设置.因此查询资料,可以用下面这条指令:
sudo usermod -aG dialout username
其中username是用户名,换成自己电脑的用户名即可.
把此用户名加入dialout用户组,然后注销下电脑,即可.这样下次重启也不用修改权限了
安装库:https://github.com/ccny-ros-pkg/imu_tools/tree/kinetic
参考教程:http://wiki.ros.org/rviz_imu_plugin
在Global Options里面的Fixed Frame中键入/imu:
按下面设置参数,显示imu:
在/home/ma/catkin_ws1/src下:
catkin_create_pkg imu_turtlesim roscpp std_msgs sensor_msgs tf geometry_msgs
在/home/ma/catkin_ws1/src/imu_turtlesim/src下:新建imu_turtlesim.cpp:
#include
#include
#include
#include
#include
#include
using namespace std;
class TeleopImu{
public:
TeleopImu();
private:
void callBack(const sensor_msgs::Imu::ConstPtr& imu);
ros::NodeHandle n;
ros::Publisher pub;
ros::Subscriber sub;
};
TeleopImu::TeleopImu()
{
pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",1);
sub = n.subscribe<sensor_msgs::Imu>("imu", 10, &TeleopImu::callBack, this);
}
void TeleopImu::callBack(const sensor_msgs::Imu::ConstPtr& imu)
{
geometry_msgs::Twist vel;
tf::Quaternion bq(imu->orientation.x,imu->orientation.y,imu->orientation.z,imu->orientation.w);
double roll,pitch,yaw;
tf::Matrix3x3(bq).getRPY(roll,pitch,yaw);
vel.angular.z = roll;
vel.linear.x = pitch;
pub.publish(vel);
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "teleopImu");
TeleopImu teleop_turtle;
ros::spin();
}
tf::Quaternion bq(imu->orientation.x,imu->orientation.y,imu->orientation.z,imu->orientation.w);
double roll,pitch,yaw;
tf::Matrix3x3(bq).getRPY(roll,pitch,yaw);
命令为四元数转欧拉角
添加:
add_executable(imu_turtlesim src/imu_turtlesim.cpp)
target_link_libraries(imu_turtlesim
${catkin_LIBRARIES}
)
/home/ma/catkin_ws1/src/imu_turtlesim
新建launch文件夹----新建imu_turtlesim.launch
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="imu_turtlesim" type="imu_turtlesim" name="imu_turtlesim" />
</launch>
roslaunch imu_turtlesim imu_turtlesim.launch
参考书籍:Learning ROS for Robotics Programming Second Edition
参考教程:
[1]官方链接:https://lp-research.com/ros-and-lp-research-imus-simple/
ubuntu下截图小工具链接教程:https://blog.csdn.net/qq_38880380/article/details/78233687
ctrl+A即可截图,爽歪歪!!!!