赞
踩
本次任务是将AstraPro3D摄像头和机械狗运用起来,AstraPro为奥比中光开发的3D传感摄像头,机械狗是云深处绝影mini,过程中主要运用到了AstraSDK做骨架提取,ros系统控制机械狗和如何在Ubuntu16.04上基本的利用fswebcam去调用AstraPro摄像头
配置环境:Ubuntu16.04(通过TeamViewer登陆进机械狗系统)
摄像头:AstraPro
首先如何配置AstraSDK链接如下:
https://developer.orbbec.com.cn/forum_plate_module_details.html?id=819
https://developer.orbbec.com.cn/forum_plate_module_details.html?id=969
https://developer.orbbec.com.cn/forum_plate_module_details.html?id=967
作者在配置AstraSDK Linux版本时也参考了大量学习资料,在这里贴出链接。最后的目标是能在AstraSDK里面运行起来Sample里面的SimpleBodyViewer
可以通过以下几个代码测试是否能开启Astra的ros:
roslaunch astra_camera astrapro.launch
rostopic list
rostopic echo /camera/depth/image_raw
rosrun image_view image_view image:=/camera/depth/image_raw
如果rostopic list有显示,且能成打开摄像头,astra的ros配置成功
通过以上步骤我们就可以实现调用Sample里面的SimpleBodyViewer提供的骨架信息,具体的骨架信息在以下这个函数中:
那么之后就是利用ROS去控制绝影mini:
首先要先开启udp的message传输(具体文件请看本文最后github链接):
开启ROS节点和创建mes传输节点
roscore
./message_transformer.py
发送ROS Twist消息
c++:一般来说只需要用lx和az,lx前进速度,az转向速度
//init the ros to control the robot dog. ros::init(argc, argv, "publish_velocity"); ros::NodeHandle nh; ros::Publisher pub = nh.advertise<geometry_msgs::Twist>("/cmd_vel", 1000); srand(time(0)); ros::Rate rate(2); void robotMove(double lx,double ly,double lz,double ax,double ay,double az,ros::Publisher &pub,ros::Rate &rate){ if(ros::ok){ geometry_msgs::Twist msg; msg.linear.x = lx; msg.linear.y = ly; msg.linear.z = lz; msg.angular.x = ax; msg.angular.y = ay; msg.angular.z = az; pub.publish(msg); ROS_INFO_STREAM("Sending random velocity command:"<<" linear="<<msg.linear.x<<" angular="<<msg.angular.z); rate.sleep(); } }
python:
#!/usr/bin/env python # -*- coding: utf-8 -*- import rospy from geometry_msgs.msg import Twist def velocity_publisher(linearX,angularZ): rospy.init_node('publish_velocity', anonymous=True) turtle_vel_pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10) rate = rospy.Rate(2) while not rospy.is_shutdown(): vel_msg = Twist() vel_msg.linear.x = linearX vel_msg.angular.z = angularZ turtle_vel_pub.publish(vel_msg) str_info = "Publsh turtle velocity command[{} m/s, {}rad/s]".format(vel_msg.linear.x, vel_msg.angular.z) rospy.loginfo(str_info) rate.sleep() if __name__ == '__main__': try: velocity_publisher(0,0.5) ##第一个前进速度,第二个转向速度 except rospy.ROSInterruptException: pass
之后我们就可以利用SDK里面的骨架信息去控制机械狗的行为,由于AstraSDK是C++版本,所以我们可以使用C++控制代码。
那为什么还要提供一个py版本呢,因为可以把AstraPro当成普通RGB摄像头使用,利用fswebcam,或者opencv:
连接后先检测摄像头在哪一个camera,代码如下:
v4l2-ctl --list-devices
如果没有“v4l2-ctl”这个环境变量,百度一下(apt install xxx即可
观察到RGB camera前面的编号,假设是6,那么代码如下:
参考网站:
https://blog.csdn.net/qq_29627051/article/details/102868724
fswebcam -d /dev/video6 --no-banner -r 720x480 -S 10 ~/image.jpg
把video0改为video6,如果是camera0也一样改成camera6
不然会出现以下报错:
webcam-unable-to-find-a-compatible-palette-format
这样就可以实现只调用RGB图像了
最后github链接:待补充
演示视频链接:https://www.bilibili.com/video/BV1Wh41127wu?from=search&seid=331279642344468380
备注:
点击下面链接,进入奥比中光开发者社区,了解更多3D视觉技术信息:https://developer.orbbec.com.cn/
或扫描下方二维码,进入奥比中光开发者社区:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。